ImgResize.NET完成

とりあえず、2592x1944のフルカラーを1024x768のフルカラーに変換するのに、うちのマシン(Windows2000 Mem512M, 1GHz)で4秒程度。
やはりメモリを直接いじるポインタ操作は激速。


今回のポイントは、Bitmapクラスのラッパーを作って、GetPixel/SetPixelなどビット操作に必要なメソッドを同じインタフェースにしたこと。
本当は、Bitmapクラスを継承したかったのですが、Bitmapはシールクラスのため、サブクラスを生成できないために、このような結果となりました。


とはいえ、一旦、Bitmapクラスで普通にソースを書いておいて、「ほぼ*1」変数宣言部分だけ今回のラッパークラスに置き換え/unsafeでリコンパイルするだけで、Pixelへのアクセスが10倍近く向上するというのはなかなかに強烈です。
#ちゅーか、将来Bitmapクラスが改善された時のことを考えるとこうあるべきだと思います。


自分のためだけに作っているので、Bitmapクラスの持つすべての関数をラッパーしているわけではないけど、これは必要となれば増やせば良い話。
ポインタを使用しているので、unsafeになってしまうのが難点ですが、これですいすい楽々な変換が可能となり、かなり満足しています。

*1:Bitmapのサブクラスではないので、Bitmapオブジェクトが引数に渡されている場面では、内包するBitmapオブジェクトを渡すような書き方に変えなくてはならない。