高速ビットマップ描画方法を調査

高速にメモリ上のデータをWindowsで表示する方法について調査してみた。

経験上OpenCVは余り高速ではない。OpenGLでテクスチャに貼り付ける、という方法は高速で、プラットフォームにもあまり依存しない方法なのだが、カメラと対象物との位置関係で、勝手に変形されてしまう(これはOpenGLの目的からして当然であるが、ちゃんとデータを1対1で画像ピクセルに反映させたい、というような場合には問題となる)、という問題がある。

また、OpenGLを使用する場合、ウィンドウ管理はGLUTに任せてしまうと、自分で作成するWindows上のウィンドウに描画するときに問題になる(理論上は可能なはずだが、面倒なのであまり調べていない)。

目標としては、Windowsで、自分で管理するウィンドウの内部に、高速にメモリ上のデータを表示したい。

少し調べてみた結果、Vista以降のWindowsであれば、Direct2Dを使用するのが目的にかなっているようだ。もちろんWindowsにべったりになってしまうのだが、仕方がない。

なんとなく、ID2D1HwndRenderTargetでBitmapを作成し、CopyFromMemoryを行ってDrawBitmapという流れで出来そうな気がしてきた。これだとオフスクリーンではないかも知れない。でも、この応用で何とかなりそうな気がする。

今度実験してみよう。

===================
ちなみに、調べてみると、MacではOpenGLのFramebuffer objectという方法があるようだ。自分がWindows上のOpenGLで試したときには、FBOはそれほどパフォーマンスが良くなかった印象がある。Macだとまた違うかも知れないが。

more…