ビットマップの印刷時にBitBltした領域が白黒になってしまう

[戻る]
負け犬君 2008/12/08(月) 19:56:35
開発環境はWindowsXP(SP2),VC++6.0 MFC ダイアログベースです。


グラフを表示するアプリケーションを作成しており、印刷機能を追加しています。

印刷処理の流れを説明します。

1、CPrintDialog で印刷ダイアログを出す。
2、GetPrinterDC でDCを取得
3、DOCINFOを用意してStartDoc、StartPage
4、印刷内容を作成
5、EndPage(),EndDoc(),Detach()

ここで 4、印刷内容作成時の処理をさらに説明します。

グラフの軸、グラフの枠、グラフの目盛りと、実際にラインが引かれる部分とを別のビ
ットマップで作成し、あとで適切な位置にBitBltで貼り付けるという方針で作成してい
るのですが、BitBltにて貼り付けたほうのビットマップの色が白黒になってしまいま
す。 これをカラーにしたいのですが、解決法をご存知のかたがいらっしゃいました
ら、ご教授をお願いいたします。

ちなみに貼り付けられる側のビットマップは正しくカラーで印刷されています。

aetos 2008/12/09(火) 09:52:22
CreateBitmap を使ってたりしません?
だとしたら、CreateCompatibleBitmap を使うべきです。

負け犬君 2008/12/09(火) 17:59:09
aetos さん

レスありがとうございます。


CreateCompatibleBitmapを使用しています。

まだ調査中で結論が出ていませんが、どうやらCreateCompatibleBitmapを使わずに
CreateDIBSectionを使う必要があるようです。

参考URL 1 
http://rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200607/06070017.txt

参考URL 2
http://m--takahashi.com/bbs/pastlog/01100/01018.html

印刷時には仮想DCは使えないor使わないほうがいいのでしょうか?

Kerry 2008/12/09(火) 18:20:20
DDBの転送を行うときは、同じデバイスの互換DCや互換ビットマップ同士で
行う必要がありますので、スクリーンDCの互換ビットマップをプリンタDCに
転送するとうまくいかない場合があります。

DIBを使うか、プリンタDCの互換DC、互換ビットマップを使用するように
しましょう。

負け犬君 2008/12/09(火) 19:16:29
[[解決]]
解決しました。

結論から言うと自分のバグでした。

CPrintDialog の GetPrinterDC で取得したDCとコンパチなDCを
CreateCompatibleDC で作成し、貼り付けるほうのビットマップを
作成する際に、作成したDCとコンパチになるようにしていたのを
GetPrinterDCで取得したDCとコンパチになるように変更したら
色の問題が解決されました。

DDB,DIBなどの詳細、コンパチの意味などがまだ良くわかっていないのでさらに調査して
みようと思います。


aetos さん、Kerryさん 有用なアドバイスありがとうございました。

古いスレッドには追加発言できません。