Windows CE/Mobile での最速描画を行うには…
夏休みだーと思っていたら、もう残りわずか。em-oneのレジストリいじりはちょっとお休みでして、アルファチャネル付きPNGをWindows 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
アップデートしてみました。微妙に早くなったみたいです。