Direct2Dでビットマップ描画 – プログラミング – Home

Direct2Dでビットマップ描画
 
通知
すべてクリア

[解決済] Direct2Dでビットマップ描画


あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

こんにちは。

すでに作成済みのソフトがあり、そのソフトウェアは画像のビュアの機能を含んでおり
ます。GDI+で描画をしており、コーディングは非常に楽なものの、大きな画像を色調補
正しつつ描画なんてことをすると非常に低速です。

この部分をDirect2Dで書き換えてみたらどれくらい速度に変化があるのだろうか、と考
えているのですが、速度の前にまず既存の機能と同じことができないと意味がないので
コーディングの前にDirect2Dで何ができるのかを調べています。

気になったのが、ビットマップを輝度やコントラストを調整しながら描画する方法が見
つけられないことです。
GDI+では、Graphics::DrawImageにImageAttributesオブジェクトを渡すだけで色調補正
ができるのですが、Direct2Dではどのようにして同等なことを行うのでしょうか。

描画の前に自前でビットマップをいじらないといけないのでしょうか。これでは(この
部分においては)ハードウェアアクセラレーションが効かないので魅力半減です。

ご存知の方がいらっしゃいましたらお教えください。

Visual Studio 2008/MFC/C++


引用未解決
トピックタグ
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

参考にどうぞ
http://www.tkzdev.net/?p=103


返信引用
あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

ITO様

ありがとうございます。
やはり色調を補正する場合は自前でピクセルをいじらないといけないのでしょうかね。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

うーーん、
検索してみる限りだと、ないですね。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

# よくわかってなくて言ってます。的外してたらごめんなさい。

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


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

…違うか。これは ICM (Image Color Management) に使うメソッドか。


返信引用
あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

aetos 様

ですね。私も同じインターフェースの名前を見て「これか!」と思ったのもつかの間、
なんだiccか...でした。

DirectXを使ったゲームプログラミングをちゃんと書いたことはないのですが、例えば自
機の色を変えたりなんて時は個別にビットマップを持つのでしょうかね。フェードイン
やフェードアウトならアルファだけで済みますが色を変えるといったニーズはあまりゲ
ームではないということなのでしょうかね。


返信引用
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

その程度の色変えだったらパレットでできるんじゃないでしょうか。


返信引用
ITO
 ITO
(@ITO)
ゲスト
結合: 22年前
投稿: 1235
 

ここは見ましたか?
http://msdn.microsoft.com/ja-jp/library/dd372337(v=vs.85)


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

> 色を変えるといったニーズはあまりゲームではないということなのでしょうかね。
というよりは、Direct2Dはまだ歩き始めて間もない技術というだけの事かと。

あきさんが求めてる機能もWindows8で実装される模様。
http://msdn.microsoft.com/en-us/library/windows/desktop/hh404566.aspx
http://msdn.microsoft.com/en-us/library/windows/desktop/hh706319.aspx


返信引用
あき
 あき
(@あき)
ゲスト
結合: 24年前
投稿: 47
Topic starter  

aetos様

そうですね。いわゆる大きな一枚絵を二次元でどうこうするというのはゲームでは用途
はあまりないかもしれません。

ITO様

一通り見たつもりではあるのですが、変換については座標変換しか見当たらず...

gak様

まさにこれですね。Windows 8からですか。
もしかするとサービスパックでVistaでも利用できるようになるかもしれませんね。だと
するとID2D1EffectがQueryInterfaceできたら有効にする、という手法をとれば(サービ
スパックが当たっていれば)Vista以降で利用可ということにできそうで、なおかつ楽に
実装できそうです。

本件以外にも、そもそもXP対応は当面外せないのでGDI(GDI+)での描画も生かさなくて
はならず、GDIとDierct2Dのソース内での共存(スイッチ)をするために何が一番良いか
ということも検討する必要があります。
MFCを利用しているので基本的にView::OnDraw()で描画をするのですが、Direct2DのHWND
レンダーターゲットを使うとなかなかMFCの描画のお約束には当てはまらなくなり、ソー
スが見にくくなりそうです。
じゃあ、今までの描画ロジックに比較的フィットしそうなHDCのレンダーターゲットでは
実は結構描画が遅くなるんじゃないかという心配もあり(未確認ですがアクセラレーシ
ョンが効かないのでは?と勝手に思っています。)、その辺も含めて試しながらの確認
を繰り返す必要がありそうです。

貴重な情報ありがとうございました。大変参考になりました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました