こんにちは。
すでに作成済みのソフトがあり、そのソフトウェアは画像のビュアの機能を含んでおり
ます。GDI+で描画をしており、コーディングは非常に楽なものの、大きな画像を色調補
正しつつ描画なんてことをすると非常に低速です。
この部分をDirect2Dで書き換えてみたらどれくらい速度に変化があるのだろうか、と考
えているのですが、速度の前にまず既存の機能と同じことができないと意味がないので
コーディングの前にDirect2Dで何ができるのかを調べています。
気になったのが、ビットマップを輝度やコントラストを調整しながら描画する方法が見
つけられないことです。
GDI+では、Graphics::DrawImageにImageAttributesオブジェクトを渡すだけで色調補正
ができるのですが、Direct2Dではどのようにして同等なことを行うのでしょうか。
描画の前に自前でビットマップをいじらないといけないのでしょうか。これでは(この
部分においては)ハードウェアアクセラレーションが効かないので魅力半減です。
ご存知の方がいらっしゃいましたらお教えください。
Visual Studio 2008/MFC/C++
ITO様
ありがとうございます。
やはり色調を補正する場合は自前でピクセルをいじらないといけないのでしょうかね。
うーーん、
検索してみる限りだと、ないですね。
# よくわかってなくて言ってます。的外してたらごめんなさい。
Direct2D は API リファレンスを斜め読みした限り、なさそうですね。
アルファだけは DrawBitmap の引数で行けそうですが。
WIC (Windows Imaging Component) を使ってみるのはどうでしょうか。
CreateBitmapFromWicBitmap メソッドがあるので、相互運用はできます。
IWICColorTransform とかがそれっぽい名前に見えます。
http://msdn.microsoft.com/ja-jp/library/dd742779(VS.85).aspx
http://msdn.microsoft.com/en-us/library/ee719902(VS.85).aspx
…違うか。これは ICM (Image Color Management) に使うメソッドか。
aetos 様
ですね。私も同じインターフェースの名前を見て「これか!」と思ったのもつかの間、
なんだiccか...でした。
DirectXを使ったゲームプログラミングをちゃんと書いたことはないのですが、例えば自
機の色を変えたりなんて時は個別にビットマップを持つのでしょうかね。フェードイン
やフェードアウトならアルファだけで済みますが色を変えるといったニーズはあまりゲ
ームではないということなのでしょうかね。
その程度の色変えだったらパレットでできるんじゃないでしょうか。
> 色を変えるといったニーズはあまりゲームではないということなのでしょうかね。
というよりは、Direct2Dはまだ歩き始めて間もない技術というだけの事かと。
あきさんが求めてる機能もWindows8で実装される模様。
http://msdn.microsoft.com/en-us/library/windows/desktop/hh404566.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/hh706319.aspx
aetos様
そうですね。いわゆる大きな一枚絵を二次元でどうこうするというのはゲームでは用途
はあまりないかもしれません。
ITO様
一通り見たつもりではあるのですが、変換については座標変換しか見当たらず...
gak様
まさにこれですね。Windows 8からですか。
もしかするとサービスパックでVistaでも利用できるようになるかもしれませんね。だと
するとID2D1EffectがQueryInterfaceできたら有効にする、という手法をとれば(サービ
スパックが当たっていれば)Vista以降で利用可ということにできそうで、なおかつ楽に
実装できそうです。
本件以外にも、そもそもXP対応は当面外せないのでGDI(GDI+)での描画も生かさなくて
はならず、GDIとDierct2Dのソース内での共存(スイッチ)をするために何が一番良いか
ということも検討する必要があります。
MFCを利用しているので基本的にView::OnDraw()で描画をするのですが、Direct2DのHWND
レンダーターゲットを使うとなかなかMFCの描画のお約束には当てはまらなくなり、ソー
スが見にくくなりそうです。
じゃあ、今までの描画ロジックに比較的フィットしそうなHDCのレンダーターゲットでは
実は結構描画が遅くなるんじゃないかという心配もあり(未確認ですがアクセラレーシ
ョンが効かないのでは?と勝手に思っています。)、その辺も含めて試しながらの確認
を繰り返す必要がありそうです。
貴重な情報ありがとうございました。大変参考になりました。