デバイス依存ビットマップ(DDB)は画面の解像度に影響されますか? – プログラミング – Home

デバイス依存ビットマップ(DDB)は画...
 
通知
すべてクリア

[解決済] デバイス依存ビットマップ(DDB)は画面の解像度に影響されますか?


山本正人
 山本正人
(@山本正人)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

ふと疑問が湧いたので質問させてください。

現在WindowsビットマップファイルをCreateDIBitmapを使ってDDBにし、
それをBitBltでウィンドウDCにコピーして表示するアプリを作っているのですが、
DDBを作成した時と、BitBltしたときのPCの画面解像度や色数が異なる場合、
なにか問題が発生するでしょうか?

ちなみにWinXPで色々色数を変えてテストしたところ、
エラーも起きずにBitBltに成功しました。

そもそも、PC画面の色数はデバイスに依存しないのでしょうか?
ご教授お願いいたしますm(_ _)m


引用未解決
トピックタグ
しま
 しま
(@しま)
ゲスト
結合: 18年前
投稿: 123
 

>DDBを作成した時と、BitBltしたときのPCの画面解像度や色数が異なる場合、
>なにか問題が発生するでしょうか?

何を問題だと定義するかによるでしょう
BitBlt() に失敗することが問題だというのなら、問題はないと思います
(ソースDC,デスティネーションDCのそれぞれのハンドルが不正でない
限り失敗しそうにないAPI{私は不正な<例えばDC以外の>ハンドル
で試したことはないのであくまで想像です}だから)


返信引用
麩
 麩
(@麩)
ゲスト
結合: 17年前
投稿: 95
 

ここで言う失敗が、転送先も用意したビットマップも32bitカラーなのに16bitカラー
で描画されてしまうとかそういう問題だと仮定してみます。

以前読んだ話ですが、描画の際にCreateCompatibleDCで作ったメモリDCに
ビットマップハンドルを関連付けて転送した場合、メモリDC作成時のメモリDCの
原型にしたDCの色数に制限されるそうです。

つまり、
1、ディスプレイが16bitカラーの状態でCreateCompatibleDCでメモリDC作成。
2、ディスプレイが32bitカラーの状態へ変化。
3、作ってあったメモリDC経由で32bitカラーのビットマップをディスプレイに転送。
4、描画されるのは16bitに変換されたビットマップ。
ってことらしいです。

CreateDIBPatternBrushPtで作ったブラシや、描画直前にDCを作っているの
ならば問題が起きないかも知れません。

検証していないので参考程度に聞き流してください。


返信引用
山本正人
 山本正人
(@山本正人)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

しま様、麩様
ご回答ありがとうございます。

なるほど、Bit数の異なるDDBは互換性があると考えて良さそうですね。
ユーザによってディスプレイ色数が変更された時に、DDBを作り直さなくてもいいか
な。。
とりあえず致命的なエラーが起きてくれなければいいんです。
(浅はかな考えで、色数が増えた場合にAccessViolationとか起きるんではとか。)
どっちにしてもレアケースなんですけどね


返信引用
山本正人
 山本正人
(@山本正人)
ゲスト
結合: 17年前
投稿: 3
Topic starter  

解決とします


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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