|
分類:[C#]
Microsoft Visual C# 2008 Express Edition
フォームアプリケーション
C#の.NETでソフトを開発しているのですが画面描画の速度で行き詰まってしまいました。
製作しているものは高速に画面を書き換える必要があり(書き換える必要があるのは内容のみでサイズは不変)、
それを低負荷で実現する必要があります。
そこで元々製作していた部分はそのままに、画面出力と一部の画像編集をManaged DirectXによって行おうとしています。
具体的にはGDI+によって何枚かのBitmapをGraphicsによって編集し、
それをManaged DirectXによって透過情報を保ったままに合成し、画面出力すると言う形を考えています。
Bitmapが変更されるたびにTextureに読み込む方法は余計に遅くなり現実的でありません。
そこであらかじめTextureと、そこからSurface、Graphicsオブジェクトを作り、それを編集し個別に画面に出力しようとしたのですが
Bitmapで編集した際と違いアルファブレンディングが上手く行われません。(以下のコード)
Surface s = texture.GetSurfaceLevel(0);
Graphics g = s.GetGraphics();
g.drawImage(bitmap,0,0);
色々と調べた結果上記の方法でGraphicsオブジェクトを取り出せるのはTextureのFormatがX8R8G8B8などの
アルファの含まれていない場合だけだと言うことが分りました。
ソースコードは紛失してしまったのですがTextureから作ったGraphicsオブジェクトでも
上手くアルファブレンディングが出来ていたことがあったので不可能ではないと思うのですが…
(思い違いか、あるいは上手くできた理由が別にあったのかもしれませんが)
こういった状況を打開する上手い方法はないでしょうか。
描画速度が改善され、且つ描画対象をコントロールごとに設定できるのであればManaged DirectXで無くともかまいません。
漠然とした質問で申し訳ないのですがよろしくお願いします。
|