Windows CE/Mobile での最速描画を行うには…

夏休みだーと思っていたら、もう残りわずか。em-oneレジストリいじりはちょっとお休みでして、アルファチャネル付きPNGWindows CE/Mobile で最速で表示するにはどうしたもんだかと考えておりました。


1.IImage を使う。

 これ、何でも読めて CE5.0 でも使えて最高に便利なんですが、劇遅。しかもDrawメソッドのソースの矩形指定が 0.01mm 単位という謎の仕様。これで3日悩みましたがね。

2.LoadImage で読んで、AlphaBlend で Draw する。

 これ、それなりに早いんですが、致命的な欠点が…

http://www.geocities.jp/gakkun07/kakinaguri.html
※このページの作者さん、文才ありますね。「信念でしょうか?宗教でしょうか?ただの馬鹿なんでしょうか?」このフレーズで10分笑ってました。

3.自分で読んで、自分で Draw する。

 これが一番早そうだけど、ここにもまた障害が…

 GDI で描画する場合、DDB を使うのが常識のようですが、この DDB ったら、バッファアドレスがとれません。かといって、DIB を使うと、バッファアドレスはとれますが、実際の描画でフォーマット変換でも走るのか、劇遅になります。
 いろいろ探していたら、「DIBSection で決まり!」みたいな書き込みを見たので、DDB に Blt してみましたが、速度的に、単なる DIB みたいです。DDB のようにも扱える DIB ってことなんでしょうね。

 あ〜ぁ。と思いながらさまよっていたら、こんな記事が…
http://www.tech-archive.net/Archive/WindowsCE/microsoft.public.windowsce.embedded.vc/2005-11/msg00070.html

 本家本元が出てきましたね。ふむふむ。

 DirectX は、フレームバッファを取得するのに良い方法だと…なぬ?

 んじゃ、ddsd.lpSurface は、フレームバッファアドレスそのものだったんか〜ぃ!

 さて、何で試すべぇか…あっ、いいものあった。


NesterJ4u for EM-ONE
http://hp.vector.co.jp/authors/VA015685/nesterJ4uem1.zip

アップデートしてみました。微妙に早くなったみたいです。