exloupeの静止画・動画入力用の拡張モジュールです
windows用は.wim、linux用は.limの拡張子を持った共有ライブラリーとして作成します
画像形式 foo に対応するモジュール(foo.wim, foo.lim)を foo.c からビルドするコマンドを示します
windows(VisualStudio) ※64bit版としてビルドする必要があります
cl /LD /Fefoo.wim foo.c
linux(GCC)
gcc -O -shared -fPIC -o foo.lim foo.c
モジュールには以下のエクスポート関数が必須です
const char *** | ext | 出力 | 拡張子のリストを受け取るポインタ |
unsigned int * | type | 出力 | 下記ビットフラグを受け取るポインタ |
無し |
画像フォーマットの基本情報を開示する
拡張子のリストの最後はNULL
pngのように拡張子が1つの場合は
static const char *list[] = {"png", NULL};
*ext = list;
jpg jpegのように複数の拡張子に対応する場合は
pngのように拡張子が1つの場合は static const char *list[] = {"jpg", "jpeg", NULL};
*ext = list;
タイプは以下のフラグから対応するもの全てのOR値を戻す
0x0001 | 8bitグレースケール |
0x0002 | 16bitグレースケール |
0x0004 | 32bitグレースケール |
0x0008 | 24bitRGB |
0x0010 | 48bitRGB |
0x0020 | 96bitRGB |
0x0040 | 192bitXYZ |
0x0100 | 静止画 |
0x0200 | マルチページ静止画 |
0x0400 | 動画 |
静止画/マルチページ静止画/動画のいづれか1つと
8bitグレースケール~192bitXYZまでのいづれか1つは
最低限ONにしなければならない
const char * | path | 入力 | 画像ファイルのパス |
unsigned short * | bpp | 出力 | 1ピクセル辺りのビット数を受け取るポインタ |
size_t * | w | 出力 | 水平方向画素数を受け取るポインタ |
size_t * | h | 出力 | 垂直方向画素数を受け取るポインタ |
size_t * | page | 出力 | 1~.画像枚数を受け取るポインタ |
size_t * | ms | 出力 | 0.静止画 1~.動画のフレーム間隔(ms) |
!0 | ファイルハンドル |
0 | 失敗 |
ファイルを読み込むために開く
pageはシングルページ静止画の場合は1固定
マルチページ静止画及び動画の場合は枚数
msは画像及びマルチページ画像の場合は0で動画の場合はフレーム間隔の時間
対応しているbppは以下の7種類
8.8bit グレースケール
16.16bit グレースケール
32.32bit グレースケール
24.24bit RGB
48.48bit RGB
96.96bit RGB
192.192bit XYZ
void * | fh | 入力 | ファイルハンドル |
void * | buff | 出力 | 画像出力先のポインタ |
size_t | page | 入力 | 取得する画像のページ番号(0~) 静止画の場合は0固定 |
!0 | 成功 |
0 | 失敗 |
ファイルから画像データを読み出す
buffにはem_openで取得した形式の画像1枚分の領域を用意する
const char * | path | 入力 | 画像ファイルのパス |
unsigned short | bpp | 入力 | 1ピクセル辺りのビット数 |
size_t | w | 入力 | 水平方向画素数 |
size_t | h | 入力 | 垂直方向画素数 |
size_t | page | 入力 | 画像枚数 静止画は1 マルチページや動画で最終枚数不明の場合は0 |
size_t | ms | 入力 | 動画のフレーム間隔(ms) 動画は1~ 静止画やマルチページは0 |
!0 | ファイルハンドル |
0 | 失敗 |
ファイルを書き出すために開く
msは画像及びマルチページ画像の場合は0で動画の場合はフレーム間隔の時間(ms)
対応しているbppは以下の7種類
8.8bit グレースケール
16.16bit グレースケール
32.32bit グレースケール
24.24bit RGB
48.48bit RGB
96.96bit RGB
192.192bit XYZ
void * | fh | 入力 | ファイルハンドル |
void * | buff | 出力 | 画像入力元のポインタ |
!0 | 成功 |
0 | 失敗 |
ファイルに画像データを書き出す
buffにはem_openで取得した形式の画像1枚分のデータが入っている
void * | fh | 入力 | ファイルハンドル |
!0 | 成功 |
0 | 失敗 |
ファイルを閉じる
em_open/em_createのどちらでも途中の段階で呼ばれる可能性がある