
はじめまして。
ビットマップ操作について勉強をしております。
現在、ビットマップファイルを読み込んでメモリDC上でコピーし、新しいファイルを生成するプログラムを作っております。
手順としては
1.
LoadImageでBMPファイルを読み込み、ハンドルを取得。
hdcmem_old = CreateCompatibleDC ( NULL );
SelectObject( hdcmem_old , hBitmap_old );
2.
hdcmem_new = CreateCompatibleDC ( NULL );
hBitmap_new = CreateDIBSection( hdcmem_new , (BITMAPINFO*)&bmpInfoHeader , DIB_PAL_COLORS , (void **) &Pixel , NULL , 0 );
SelectObject( hdcmem_new, hBitmap_new );
3.
BitBlt( hdcmem_new , 0 , 0 , LCD_WIDTH , LCD_HEIGHT , hdcmem_old , 0 , 0 , SRCCOPY )
でデータを転送後、ビットマップファイルのヘッダを取り出し、&Pixelからビットデータを加えて新たなファイルを生成しているのですが、生成された画像を見ると全黒になっております。
メモリDCを完全に理解してないせいか、解決策がみあたりません。
もしよろしければ、解決策、またはヒントをご教授していただければと思います。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
ベタな方法ですが、
処理のどこでコケているのか、返り値を一つずつ取得、確認するというのが確実です。
> hdcmem_old = CreateCompatibleDC ( NULL );
> SelectObject( hdcmem_old , hBitmap_old );
hdcmem_old = CreateCompatibleDC ( NULL );
if(hdcmem_old==NULL)エラー;
HGDIOBJ obj = SelectObject( hdcmem_old , hBitmap_old );
if(obj==NULL)エラー;
など。
この回答への補足
BitBltがうまくいってないみたいなので、まずはLoadImageを使用せずに地道にビットマップファイルのヘッダを読み込んでデータを取り扱うことにしました。
どうもありがとうございました。
お返事ありがとうございます。
一つ一つの関数は返り値を調べてチェックしておりますが
特にエラーは見つかりませんでした。
ためしに一つのメモリDCに対してGDI描画関数を用いて適当な図形を
描画してみたのですが、結果は全黒のビットマップのままでした。
-----処理の流れ(完全にオフスクリーンのみの処理です)
"CreateCompatibleDC"でメモリDCを作り
"CreateDIBSection"でBitmapハンドルを得て
"SelectObject"でメモリDCとBitmapハンドルを関連付け
"polygon"等のGDI関数を用いて描画
→ 結果は全黒のビットマップ
・原因としては、メモリDCの確保の仕方がまずい
・現在1bitモノクロBITMAPを用いているため
CreateDIBSectionの第三引数が誤っている。
等考えられるのですが、以前はこのような書式で
描画することができました。
もし、何かご意見いただければ幸いです。
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
VB6でのファイル作成方法
-
error C2065: error C2057: が...
-
[VBScript]ファイルの入出力を...
-
グローバル変数のよくない使い...
-
ファイル名の先頭にアンダース...
-
マクロを作成したファイルを立...
-
バッチで118項目のCSVを処理し...
-
csvファイルを開かずに文字を検...
-
ASP .NETでファイル選択ダイア...
-
Javascript で INI の読み書き
-
【C#】リソースファイルの埋め...
-
BI書、FD書 とは
-
Tifファイルの数値化について
-
VB.NETでファイル操作
-
■ 移植性のないポインタ変換に...
-
VBに、Cのincludeのようなもの...
-
VBScriptでのファイル結合処理...
-
C言語のfopenについて教えてく...
-
大きいサイズのテキストファイ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
VB.NETによるプロセス間通信
-
営業秘密の漏洩について
-
Thunderbirdでemlファイルを開...
-
ドラッグアンドドロップでファ...
-
CSVファイルへの保存の際、デー...
-
バッチで118項目のCSVを処理し...
-
SGファイルって何ですか?
-
ファイルの結合
-
分割コンパイルの#defineについて
-
VBAにてEXCEL以外のファイル(テ...
-
2つのCSVファイルの比較
-
ShellExecuteEx→WaitForSingleO...
-
RPGでファイル名(もしくはレコ...
-
VBに、Cのincludeのようなもの...
-
マウスポインタの変更
-
Excelマクロでの再読込み方法
-
関数の呼び方について
おすすめ情報