zoukankan      html  css  js  c++  java
  • Gimp插件Hello world注释

    前一阵翻译gimp官网的编写插件教程,本打算继续翻译第二部分,但是感觉第一个例子还不是很懂,翻译第二部分有点理解不能,所以就读了一
    下源码,记录如下

    #include <libgimp/gimp.h>
    
    /* 声明query函数,它提供gimp相关信息,使其可以根据参数配置插件 */
    static void query (void);
    
    /* 声明run函数,调用时会运行插件安装在程序数据库中的程序 */
    static void run   (const gchar      *name,
                       gint              nparams,
                       const GimpParam  *param,
                       gint             *nreturn_vals,
                       GimpParam       **return_vals);
    
    // GimpPlugInInfo是一个函数结构体,调用init,quit,query,run函数
    // 本例中init,quit函数不使用,所以置为NULL
    GimpPlugInInfo PLUG_IN_INFO =
    {
    	NULL,
    	NULL,
    	query,
    	run
    };
    
    //宏
    MAIN()
    
    /* query函数,用于提供插件信息 */
    static void query (void)
    {
    	//GimpParamDef结构体,保存程序的定义
    	//GimpParamDef的三个参数,GimpPDBArgType类型, gchar *名称, gchar *描述
    	static GimpParamDef args[] =
    	{
    		{
    		GIMP_PDB_INT32,
    		"run-mode",
    		"Run mode"
    		},
    		{
    		GIMP_PDB_IMAGE,
    		"image",
    		"Input image"
    		},
    		{
    		GIMP_PDB_DRAWABLE,
    		"drawable",
    		"Input drawable"
    		}
    	};
    
    	/* gimp_install_procedure函数使用PDB来安装程序 */
    	gimp_install_procedure (
    	"plug-in-hello",	//名称
    	"Hello, world!",	//简介
    	"Displays "Hello, world!" in a dialog", //帮助(一般作为简介的补充)
    	"David Neary",		//作者
    	"Copyright David Neary",//版权
    	"2004",			//日期
    	"_Hello world...",	//菜单标签名称 “_”在菜单中显示为空格
    	"RGB*, GRAY*",		//图像类型,支持RGB,RGBA, 灰度
    				//如果插件不需要图像,则置为空串
    	GIMP_PLUGIN,		//程序的类型为gimp插件,或“GIMP_EXTENSION(gimp扩展)”
    	G_N_ELEMENTS (args), 	//传入args数组中元素的个数
    	0,			//返回值
    	args, 			//传入args数组
    	NULL			//返回值
    	);
    
    	//插件安装在“滤镜/Misc”文件夹下,标签名称为上面定义的“Hello world...”
    	gimp_plugin_menu_register ("plug-in-hello",
    		             "<Image>/Filters/Misc");
    }
    
    /* run函数,用于实现插件功能 */
    static void
    run (const gchar      *name,
         gint              nparams,
         const GimpParam  *param,
         gint             *nreturn_vals,
         GimpParam       **return_vals)
    {
    	/* 一个插件可以生成多个插件程序,所以本例题的插件程序使用values[0] */
    	static GimpParam  values[1];
    
    	/* 定义程序数据库的状态 */
    	GimpPDBStatusType status = GIMP_PDB_SUCCESS;
    
    	/* 定义程序的运行模式,如交互式,非交互式,最后使用值 */
    	GimpRunMode       run_mode;
    
    	/* 强制设置返回值 */
    	*nreturn_vals = 1;
    	*return_vals  = values;
    
    	/* 设置程序的类型和状态 */
    	values[0].type = GIMP_PDB_STATUS;
    	values[0].data.d_status = status;
    
    	/* 获取运行模式,如果运行模式是非交互式,那么不会显示对话框 */
    	run_mode = param[0].data.d_int32;
    
    	if (run_mode != GIMP_RUN_NONINTERACTIVE)
    		g_message("Hello, world!
    ");
    }
    

    1,最后生成的插件名称与源程序的名称相同

    2,读完这个例子对插件有了一定的了解,但有些地方还很模糊,应该是正常现象

    3,想深入的理解插件的实现与运行原理,那么就要多读源码

    4,想读懂源码,那么就要翻看帮助文档,Devhelp是个好东西

    5,通过一个hello world还不能编写插件甚至依旧看不懂别人的插件实现,欲编写实用的插件,需打好基础,循序渐进

  • 相关阅读:
    098实战 Job的调度
    maven在windows下的安装
    Map的知识点梳理(不包含collections工具类)
    001 LRU-缓存淘汰算法
    Android渲染机制和丢帧分析
    Android性能优化典范
    正确使用Android性能分析工具——TraceView
    android View 绘制完成监听
    那些年我们用过的显示性能指标
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
  • 原文地址:https://www.cnblogs.com/ishell/p/4240174.html
Copyright © 2011-2022 走看看