とりあえず,数値を+1するプラグインを書いてみた.つまり,script-fu で
(inc 10)
とすると,(11) を返すプラグインである.
#include <libgimp/gimp.h> static void query (void); static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals); GimpPlugInInfo PLUG_IN_INFO = { NULL, /* init_proc */ NULL, /* quit_proc */ query, /* query_proc */ run, /* run_proc */ }; MAIN () static void query (void) { static GimpParamDef args[] = { {GIMP_PDB_INT32, "integer", "input" }, }; static GimpParamDef results[] = { {GIMP_PDB_INT32, "integer", "output"}, }; gimp_install_procedure ( "inc", /* 関数名 */ "increment", /* 説明文 */ "inc", /* 追加情報 */ "pyopyopyo", "Copyright (C) pyopyopyo", "2006", NULL, "", GIMP_PLUGIN, G_N_ELEMENTS (args), G_N_ELEMENTS (results), args, results); } static void run (const gchar *name, gint nparams, const GimpParam *param, gint *nreturn_vals, GimpParam **return_vals) { static GimpParam values[2]; int n = param[0].data.d_int32; *nreturn_vals = G_N_ELEMENTS (values); *return_vals = values; values[0].type = GIMP_PDB_STATUS; values[0].data.d_status = GIMP_PDB_SUCCESS; values[1].type = GIMP_PDB_INT32; values[1].data.d_int32 = n + 1; }
プラグイン側にメモリ領域を確保して,そのアドレスをgimp本体側に返す仕様らしい.reentrantで無いところが気持悪いが,仕様だから仕方ない.