昔作った画像処理ライブラリ群を公開してみたり
2010/3/5 に
Putty0.60ごった煮版で、壁紙表示を自動スケール表示対応させてみた
というエントリーを書いた。
画像のスケール表示(要は拡大縮小)部分には、6,7年ほど前に書いた画像加工用ライブラリを使いました。
このライブラリが、いま見ても、それなりによくできてんじゃないの?っていう出来栄えだったので、
本日、sourceforgeに oss として公開してみました。
http://mk-imagelib.sourceforge.jp/
(最新ソースはコミット済ですが、リリース物件はまだ準備出来ていません)
特徴としては
・メモリー上に展開された画像、ディスク上の画像を共通のインタフェースで処理できる。
・対応形式、フィルタ等は後から自由に追加可能。
→画像入力、出力、フィルタは、個別のプラグインdllとして実装されています
・当時から有名だった、国産画像ビューア Susie のプラグインが、画像入力プラグインとして使える。圧縮ファイル形式のプラグインにも対応している。
・処理中の画像情報の一部(もしくは全部)をディスク上にスワップすることで、メモリーをあまり積んでいないPCでも巨大画像の処理が可能。
→メモリ管理をWindowsのswapファイルに完全にお任せするよりは、2~3倍高速だったはず(当時)。
今となってはどれも微妙な特徴ですね。。。。
例えば、
入力プラグインdll 出力プラグインdll 入力ファイル名 出力ファイル名
の4つをパラメータとして渡すと、入力ファイルを出力ファイルに変換してくれるようなコードは以下のようになります。
/* input_plugin output_plugin input_file output_file */ int main( int argc, char**argv ) { if( argc != 5 ) { cout << "convert.exe <import_plugin.iplg|*> export_plugin.eplg input_file_name output_file_name" << endl; return -1; } HINSTANCE hInstanceImageRead = NULL; HINSTANCE hInstanceImageWrite = NULL; FP_READ_IMAGE fpReadImage = NULL; FP_WRITE_IMAGE fpWriteImage = NULL; hInstanceImageRead = ::LoadLibraryA( argv[1] ); fpReadImage = ( FP_READ_IMAGE )::GetProcAddress( hInstanceImageRead, "read_image" ); hInstanceImageWrite = ::LoadLibraryA( argv[2] ); fpWriteImage = ( FP_WRITE_IMAGE )::GetProcAddress( hInstanceImageWrite, "write_image" ); if( fpReadImage == NULL || fpWriteImage == NULL ) { cout << "cannot load input or output plugin dll.\n"; return -1; } CPLImage *image = new CPLMemoryImage( ); image->CreateImage( "IMAGE" ); if( fpReadImage( argv[3], *image ) ) { if( !fpWriteImage( image, argv[4], NULL ) ) { cout << "fail to write image file.\n"; } } else { cout << "fail to read image file.\n"; } delete image; return 0; }
リファレンスは今のとこないです。
近々用意したいですが、やりたい事とかやらなきゃいけないことがとにかく多すぎる。