画像処理モジュール

概要

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する

0x00018bitグレースケール
0x000216bitグレースケール
0x000432bitグレースケール
0x000824bitRGB
0x001048bitRGB
0x002096bitRGB
0x0040192bitXYZ

動作

プラグインの初期化

アプリケーション起動時のプラグインロード時に呼び出されます
必要な初期化処理をしてください
またこのプラグインで扱えるピクセルフォーマットを戻り値として示してください

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 で戻した値
intlock入力一時的なダイアログ操作無効指示 !0.ON 0.OFF

戻り値

無し

動作

一時的にダイアログの操作を無効にする(解除する)時に呼ばれます

エクスポート関数【任意】

以下のエクスポート関数は必要な場合のみ実装します

void on_enable(void *local_data, int enable)

引数

void *local_data入力em_create で戻した値
intenable入力!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_tw入力画像の横方向ピクセル数
size_th入力画像の縦方向ピクセル数
size_tbpp入力画素のbits per pixel
size_tframes入力画像の枚数

戻り値

無し

動作

処理画像が変わった時に呼び出されます
bppに対応する画像形式は以下の通りです

88bitグレースケール
1616bitグレースケール
3232bitグレースケール
2424bitRGB
4848bitRGB
9696bitRGB
192192bitXYZ

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_tw入力画像の横ピクセル数
size_th入力画像の縦ピクセル数
unsigned shortbpp入力画像のbits per pixel
size_tframe入力画像のフレーム番号(0~)
size_tsx入力処理領域として指定されている矩形
size_tsy入力処理領域として指定されている矩形
size_tex入力処理領域として指定されている矩形
size_tey入力処理領域として指定されている矩形
intconnect入力接続近傍 4.4近傍 8.8近傍
intbg入力背景色 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.黒
19264bit浮動少数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入力画素座標をスクリーン座標に変換する関数
doubler入力ガイド色のR成分(0.0-1.0)
doubleg入力ガイド色のG成分(0.0-1.0)
doubleb入力ガイド色の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_tx入力マウスポインターの座標
size_ty入力マウスポインターの座標
unsigned charlocal_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_tx入力マウスポインターの座標
size_ty入力マウスポインターの座標
unsigned charlocal_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_tx入力マウスポインターの座標
size_ty入力マウスポインターの座標
unsigned charlocal_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_tx入力マウスポインターの座標
size_ty入力マウスポインターの座標
unsigned charlocal_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_tx入力マウスポインターの座標
size_ty入力マウスポインターの座標
unsigned charlocal_data入力操作時に押されていたキー(SHIFT.0x01 CTRL.0x02)のOR値

戻り値

無し

動作

マウスの右ボタンが離された時に呼ばれます