画像処理モジュール
概要
exloupeの画像処理用拡張モジュールです
windows用は.wfm、linux用は.lfmの拡張子を持った共有ライブラリーとして作成します
ビルド方法
画像処理 foo に対応するモジュール(foo.wfm, foo.lfm)を foo.c からビルドするコマンドを示します
windows(VisualStudio) ※64bit版としてビルドする必要があります
cl /LD /Fefoo.wfm foo.c
※必要に応じて opengl32.lib user32.lib gdi32.lib 等を追加
linux(GCC)
gcc -O -shared -fPIC -o foo.lfm foo.c
エクスポート関数【必須】
モジュールには以下のエクスポート関数が必要です
const char *em_name(const char *lang)
引数
const char * | lang | 入力 | 言語設定 "jp"か"en" |
戻り値
メニュー及びサイドパネルに表示するための名前文字列 |
動作
機能名を示す
日本語・英語別に対応する場合は引数のlangを参照して結果を変えてください
unsigned int em_init(void (*redraw_pixel)(void), void (*redraw_view)(void), void (*close_ui)(void* instance), void (*set_videoframe)(size_t frame), void (*msg_func)(void), double (*get_scale)(int *axis_y, const wchar_t **unit))
引数
void (*)(void) | redraw_pixel | 入力 | 画像再描画関数 |
void (*)(void) | redraw_view | 入力 | オーバーレイ再描画関数 |
void (*)(void *instance) | close_ui | 入力 | ダイアログクローズ関数 *instance は em_create で渡される引数 |
void (*)(size_t frame) | set_videoframe | 入力 | 動画のフレーム変更関数 frame は 0~ |
void (*)(void) | msg_func | 入力 | ウインドウシステムのメッセージ処理実行関数 |
double (*)(int *axis_y, const wchar_t **unit) | get_scale | 入力 | 計測時のスケール・座標系・単位を取得 戻り値:ピクセル→実座標の係数 axis_y:1=Y軸下向き -1:Y軸上向き unit:単位文字列 |
戻り値
以下のピクセルフォーマットで対応しているもの全てのOR値(最低でも1つは指定が必要)
またダイアログを持つ場合は加えて 0x0100 をorする
0x0001 | 8bitグレースケール |
0x0002 | 16bitグレースケール |
0x0004 | 32bitグレースケール |
0x0008 | 24bitRGB |
0x0010 | 48bitRGB |
0x0020 | 96bitRGB |
0x0040 | 192bitXYZ |
動作
プラグインの初期化
アプリケーション起動時のプラグインロード時に呼び出されます
必要な初期化処理をしてください
またこのプラグインで扱えるピクセルフォーマットを戻り値として示してください
void em_exit(void)
引数
戻り値
動作
アプリケーション終了時のプラグイン解放時に呼び出されます
必要な後処理をしてください
em_exit のみ不要なら省略可能です
void *em_create(void* instance)
引数
void * | instance | 入力 | 管理データー close_ui を呼び出す時に必要 |
戻り値
個別のインスタンスで利用するメモリー(自分で確保する)
各種コールでここの戻り値が渡される
特に必要ない場合は 0 以外の値ならなんでもよい
動作
新しい画像処理フィルターを作成する時に呼ばれます
void em_delete(void *local_data)
引数
void * | local_data | 入力 | em_create で戻した値 |
戻り値
動作
画像処理フィルターを削除する時に呼ばれます
エクスポート関数【ダイアログ関連】
以下のエクスポート関数はダイアログを使用する場合のみ実装します
HWND em_show(void *local_data, HWND parent) 【Windows】
Window em_show(void *local_data, Display *display, Window parent, void (**func)(XEvent xev, void *local_data)) 【Linux】
引数
void * | local_data | 入力 | em_create で戻した値 |
HWND Window | parent | 入力 | 親ウインドウのハンドル |
Display * | display | 入力 | ディスプレイ |
void (**)(XEvent xev, void *local_data) | func | 出力 | メッセージ処理関数 |
戻り値
動作
ダイアログを開く時に呼ばれます
void em_hide(void *local_data)
引数
void * | local_data | 入力 | em_create で戻した値 |
戻り値
動作
ダイアログを閉じる時に呼ばれます
void em_uilock(void *local_data, int lock)
引数
void * | local_data | 入力 | em_create で戻した値 |
int | lock | 入力 | 一時的なダイアログ操作無効指示 !0.ON 0.OFF |
戻り値
動作
一時的にダイアログの操作を無効にする(解除する)時に呼ばれます
エクスポート関数【任意】
以下のエクスポート関数は必要な場合のみ実装します
void on_enable(void *local_data, int enable)
引数
void * | local_data | 入力 | em_create で戻した値 |
int | enable | 入力 | !0.有効化 0.無効化 |
戻り値
動作
サイドパネルのチェックがON/OFFされた時に呼ばれます
void on_lang(void *local_data, const char *lang)
引数
void * | local_data | 入力 | em_create で戻した値 |
const char * | lang | 入力 | 言語設定 "jp"か"en" |
戻り値
動作
言語設定が切り替えられた時に呼ばれます
void on_size(void *local_data, size_t w, size_t h, unsigned short bpp, size_t frames)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | w | 入力 | 画像の横方向ピクセル数 |
size_t | h | 入力 | 画像の縦方向ピクセル数 |
size_t | bpp | 入力 | 画素のbits per pixel |
size_t | frames | 入力 | 画像の枚数 |
戻り値
動作
処理画像が変わった時に呼び出されます
bppに対応する画像形式は以下の通りです
8 | 8bitグレースケール | |
16 | 16bitグレースケール | |
32 | 32bitグレースケール | |
24 | 24bitRGB | |
48 | 48bitRGB | |
96 | 96bitRGB | |
192 | 192bitXYZ | |
int on_filter(void *local_data, void *img, size_t w, size_t h, unsigned short bpp, size_t frame, size_t sx, size_t sy, size_t ex, size_t ey, int connect, int bg)
引数
void * | local_data | 入力 | em_create で戻した値 |
void * | img | 入力 | 画像データー |
size_t | w | 入力 | 画像の横ピクセル数 |
size_t | h | 入力 | 画像の縦ピクセル数 |
unsigned short | bpp | 入力 | 画像のbits per pixel |
size_t | frame | 入力 | 画像のフレーム番号(0~) |
size_t | sx | 入力 | 処理領域として指定されている矩形 |
size_t | sy | 入力 | 処理領域として指定されている矩形 |
size_t | ex | 入力 | 処理領域として指定されている矩形 |
size_t | ey | 入力 | 処理領域として指定されている矩形 |
int | connect | 入力 | 接続近傍 4.4近傍 8.8近傍 |
int | bg | 入力 | 背景色 0.黒 !0.白 |
戻り値
0 | 画像データーを変更していない |
!0 | 画像データーを変更した |
動作
画像を解析・加工する時に呼ばれます
ここで必要な解析・加工作業をしてください
元の画像形式とプラグインで指定した画像形式が合わない場合は合うように変更した作業用バッファが渡されます
それを加工した時に正しく元のデータに反映させるために戻り値に注意してください
bppと画像データの内容の関係は以下の通りです
画素はパックドピクセル形式である画素をしめすRGB(XYZ)が並んで配置されています
画素の並ぶ順番は左上から右へを上から下へ繰り返す順番です
bpp | データ型 | ピクセル内容 |
8 | 符号無し8bit整数 | 輝度(0-255) 0.黒 |
16 | 符号無し16bit整数 | 輝度(0-65535) 0.黒 |
32 | 符号無し32bit整数 | 輝度(0-4294967295) 0.黒 |
24 | 符号無し8bit整数 | R G B 色毎の輝度(0-255) 0.黒 |
48 | 符号無し16bit整数 | R G B 色毎の輝度(0-65535) 0.黒 |
96 | 符号無し32bit整数 | R G B 色毎の輝度(0-4294967295) 0.黒 |
192 | 64bit浮動少数 | X Y Z 成分毎の値(0.0-1.0) 0.黒 |
void on_overlay_view(void *local_data, void (*pixel2screen)(double *x, double *y), double r, double g, double b)
引数
void * | local_data | 入力 | em_create で戻した値 |
void (*)(double *x, double *y) | pixel2screen | 入力 | 画素座標をスクリーン座標に変換する関数 |
double | r | 入力 | ガイド色のR成分(0.0-1.0) |
double | g | 入力 | ガイド色のG成分(0.0-1.0) |
double | b | 入力 | ガイド色のB成分(0.0-1.0) |
戻り値
動作
ウインドウ枠等のオーバーレイを描画する時に呼ばれます
固有の描画が必要な場合はここで処理してください
画像上のピクセル座標から OpenGL に渡す座標値を計算するには pixel2screen(x, y) を利用してください
ピクセル座標を double 型変数に代入してから渡すと OpenGL の座標値に書き換えます
void on_mouse_move(void *local_data, size_t x, size_t y, unsigned char opt_key)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | x | 入力 | マウスポインターの座標 |
size_t | y | 入力 | マウスポインターの座標 |
unsigned char | local_data | 入力 | 操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値 |
戻り値
動作
マウスカーソルが画像上を移動した時に呼ばれます
void on_mouse_lbutton_down(void *local_data, size_t x, size_t y, unsigned char opt_key)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | x | 入力 | マウスポインターの座標 |
size_t | y | 入力 | マウスポインターの座標 |
unsigned char | local_data | 入力 | 操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値 |
戻り値
動作
マウスの左ボタンが押された時に呼ばれます
void on_mouse_lbutton_up(void *local_data, size_t x, size_t y, unsigned char opt_key)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | x | 入力 | マウスポインターの座標 |
size_t | y | 入力 | マウスポインターの座標 |
unsigned char | local_data | 入力 | 操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値 |
戻り値
動作
マウスの左ボタンが離された時に呼ばれます
void on_mouse_rbutton_down(void *local_data, size_t x, size_t y, unsigned char opt_key)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | x | 入力 | マウスポインターの座標 |
size_t | y | 入力 | マウスポインターの座標 |
unsigned char | local_data | 入力 | 操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値 |
戻り値
動作
マウスの右ボタンが押された時に呼ばれます
void on_mouse_rbutton_up(void *local_data, size_t x, size_t y, unsigned char opt_key)
引数
void * | local_data | 入力 | em_create で戻した値 |
size_t | x | 入力 | マウスポインターの座標 |
size_t | y | 入力 | マウスポインターの座標 |
unsigned char | local_data | 入力 | 操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値 |
戻り値
動作
マウスの右ボタンが離された時に呼ばれます