SusieプラグインをC#から利用する

今日はSusieプラグインC#から利用してみようと思って色々調べていた。
世の中には同じことを考える人が多いらしくてたくさんの例題があった。
しかし私としては次のことを念頭に置いて話をすすめたい。

  1. マネージドだけで作る
  2. C#だけで作る

世のサンプルはC++を組み合わせたりアンマネージドなコードを利用していたりしてどれも↑の2つを満たしているものが無かった。なぜそういうコードが見つからないのだろう?↑2つを満たしていくと問題があるのだろうか?

まずプラグイン利用手順だが、

  1. レジストリからSusieのインストール先を得る
  2. ↑の直下に*.spiを探す
  3. LoadLibraryする
  4. GetProcAddressする
  5. ↑これをdelegate型に変換してコレクションに保管する

ここまでで一応準備。実際に画像を展開するときは、

  1. コレクションのプラグイン達に順番に与えられた画像ファイルを展開できるか確認させる
  2. 展開できるプラグインが居たら展開させる

で終了なんだが、問題はこの展開結果をC#でどうやって扱うかだ。結果として帰ってくるのは、

  1. BitmapInfoHeader構造体+カラーパレット
  2. ピクセル配列

の二つで、これをつなげると普通のBITMAPファイルになる。正確にはこの二つだけじゃなくて先頭にBitmapFileHeader構造体をつけないといけない。
ちょっと考えてみたのはこれら3つで何とかBitmapクラスを生成できないかということ。

そこで調べてみるとBitmapのコンストラクタにメモリストリームを受け取るものがある。
なので雰囲気的にはこうすれば何とかなりそう?

まず(BitmapFileHeader + BitmapInfoHeader + Palette + Pixels)をバイト配列memにいれ、

Bitmap bmp = new Bitmap(new MemoryStream(mem));

とまあ書いてみたら簡単そうだが実際にはこのバイト配列へ構造体を複数連結していれるというのがC#では思った以上に難しいのである。とりあえず今日はその部分を考えただけで終わってしまった。そうかこれが難しい原因かな?

つづきは明日である。