ビットマップの印刷時にBitBltした領域が白黒になってしまう – プログラミング – Home

ビットマップの印刷時にBitBltした...
 
通知
すべてクリア

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


負け犬君
 負け犬君
(@負け犬君)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

開発環境はWindowsXP(SP2),VC++6.0 MFC ダイアログベースです。

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

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

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

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

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

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


引用未解決
トピックタグ
aetos
(@aetos)
Noble Member
結合: 5年前
投稿: 1480
 

CreateBitmap を使ってたりしません?
だとしたら、CreateCompatibleBitmap を使うべきです。


返信引用
負け犬君
 負け犬君
(@負け犬君)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

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
 Kerry
(@Kerry)
ゲスト
結合: 20年前
投稿: 192
 

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

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


返信引用
負け犬君
 負け犬君
(@負け犬君)
ゲスト
結合: 16年前
投稿: 5
Topic starter  

解決しました。

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

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

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