ふと疑問が湧いたので質問させてください。
現在WindowsビットマップファイルをCreateDIBitmapを使ってDDBにし、
それをBitBltでウィンドウDCにコピーして表示するアプリを作っているのですが、
DDBを作成した時と、BitBltしたときのPCの画面解像度や色数が異なる場合、
なにか問題が発生するでしょうか?
ちなみにWinXPで色々色数を変えてテストしたところ、
エラーも起きずにBitBltに成功しました。
そもそも、PC画面の色数はデバイスに依存しないのでしょうか?
ご教授お願いいたしますm(_ _)m
>DDBを作成した時と、BitBltしたときのPCの画面解像度や色数が異なる場合、
>なにか問題が発生するでしょうか?
何を問題だと定義するかによるでしょう
BitBlt() に失敗することが問題だというのなら、問題はないと思います
(ソースDC,デスティネーションDCのそれぞれのハンドルが不正でない
限り失敗しそうにないAPI{私は不正な<例えばDC以外の>ハンドル
で試したことはないのであくまで想像です}だから)
ここで言う失敗が、転送先も用意したビットマップも32bitカラーなのに16bitカラー
で描画されてしまうとかそういう問題だと仮定してみます。
以前読んだ話ですが、描画の際にCreateCompatibleDCで作ったメモリDCに
ビットマップハンドルを関連付けて転送した場合、メモリDC作成時のメモリDCの
原型にしたDCの色数に制限されるそうです。
つまり、
1、ディスプレイが16bitカラーの状態でCreateCompatibleDCでメモリDC作成。
2、ディスプレイが32bitカラーの状態へ変化。
3、作ってあったメモリDC経由で32bitカラーのビットマップをディスプレイに転送。
4、描画されるのは16bitに変換されたビットマップ。
ってことらしいです。
CreateDIBPatternBrushPtで作ったブラシや、描画直前にDCを作っているの
ならば問題が起きないかも知れません。
検証していないので参考程度に聞き流してください。
しま様、麩様
ご回答ありがとうございます。
なるほど、Bit数の異なるDDBは互換性があると考えて良さそうですね。
ユーザによってディスプレイ色数が変更された時に、DDBを作り直さなくてもいいか
な。。
とりあえず致命的なエラーが起きてくれなければいいんです。
(浅はかな考えで、色数が増えた場合にAccessViolationとか起きるんではとか。)
どっちにしてもレアケースなんですけどね
解決とします