« 32bit版と64bit版のプラグイン | メイン | savedata フォルダが必要な時だけ作られるように »

2016年03月28日

吉里吉里Z 開発:: 画像ヘッダー読み込みと画像読み込みのプラグイン化

    

・画像本体は読まずにサイズ等だけ得たい
・SUSIE プラグインではなく、本体の画像読み込みと同じような動作で読みこむプラグインが欲しい

これら2つに対応した。
64bit 化以降のリリースバージョンで使えるようになる。

ヘッダーは、
var dic = Bitmap.loadHeader( "filename.ext" );
と言う形で呼び出すと取得できる。
Bitmap クラスのスタティックメソッドとして実装されている。
Layer にはないので注意。
返される辞書に width, height は必須でその他要素は画像フォーマットごとに異なる。
渡すファイル名に拡張子は必須。
通常の読み込みメソッドと同様に拡張子で種類を識別するようになっている。

プラグインから TVPRegisterGraphicLoadingHandler/TVPUnregisterGraphicLoadingHandler で読み込み関数等を登録できるようにした。
登録するのは、拡張子、読み込み関数、ヘッダー読み込み関数、保存関数、保存可否とオプション取得関数、フォーマットポインタの6つ。
読み込み関数は本体とほぼ同じ形で読み込むもの ( IStream になっているという違いはある )
ヘッダー読み込み関数、保存関数は、そのままの意味。
ただし、保存は Bitmap.save の meta にオプションを渡せるようになっている ( 引数名は meta から option に変更予定 )。
Layer.saveLayerImage は、オプションを渡せないので注意。
保存可否とオプション取得関数は、指定した形式で保存できるかどうかの判定と、保存できる場合に指定可能なオプションを返す。
指定可能なオプションは画像フォーマットごとに色々と異なるので、別途取得する形となっている。
var dic = Bitmap.getSaveOption("type"); と言う形で呼び出す。
type は Bitmap.save/Layer.saveLayerImage に渡すものと同じ。
返される辞書には、オプションで指定可能なキーが入っていて、キーの内容(辞書)が指定する値の意味。
各キーの辞書には type として形式が入っていて、range, select, select text, boolean, integer がある。
range の場合、min と max があって、その値の範囲で値を指定可能。
select は、items があって、その配列の要素の index を指定可能。
select text は、items があって、その配列の要素のいずれかの文字列を指定可能。
boolean は、true/false が指定可能。
integer は、整数値が指定可能。
その他に desc に説明が、default に既定値が入っている。

フォーマットポインタは、クラスを使って作りたい等の時に登録する。
登録する各関数の最初の引数に登録したフォーマットポインタが入って呼び出される。
NULL でも問題ない。

保存は必須ではないので、保存関数と保存可否とオプション取得関数を NULL にして登録すれば、その形式で保存できないが読み込みは出来るプラグインが作れる。
プラグインのサンプルとして、wic フォルダに Windows Imaging Component (WIC) を使って画像の読み書きを行うプラグインが入っている。
このプラグインを読み込むと GIF/ICO/TIFF の読み込みと、TIFF の書き出しに対応する。

画像読み込み/保存がプラグイン化されたことで、将来的に SUSIE プラグインは本体からプラグインへ移動される予定。
SUSIE プラグインプラグインとややこしい名前になるが。


投稿者 Takenori : 2016年03月28日 17:35




comments powered by Disqus
Total : Today : Yesterday : なかのひと