はじめまして。
ビットマップ操作について勉強をしております。
現在、ビットマップファイルを読み込んでメモリ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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C# で、あるフォルダー内にあるすべてのテキストファイルを別のフォルダーにコピーする。 4 2022/11/21 13:23
- PHP htmlspecialcharsが機能していないです。 バグですか? 1 2022/04/05 01:22
- PHP ここでの ②if($su_d<>"")の比較演算子 を使う理由は 1 2022/03/26 02:33
- 英語 高校英語の問題 1 2023/05/23 15:29
- PDF acrobatでwordファイルをpdfに変換すると文字化けする 3 2023/02/10 09:31
- その他(クラウドサービス・オンラインストレージ) Google ColabでGoogleドライブのサブフォルダにファイルを生成する方法 1 2022/10/31 17:37
- PowerPoint(パワーポイント) パワーポイントの図をWordへ貼り付け 1 2022/11/09 21:28
- PHP クエリObjectをforeachで回す時に、次のレコードへ移動せずに次のレコードを取得したい 2 2022/07/28 15:29
- Visual Basic(VBA) batからexeを実行し戻り値を受け取る バッチからEXEの結果を受け取りたいのですが、 下記のバッ 1 2023/07/04 15:13
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】看板の文字を埋めてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・【穴埋めお題】恐竜の新説
- ・我がまちの「給食」自慢を聞かせてっ!
- ・冬の健康法を教えて!
- ・一番好きな「クリスマスソング」は?
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
Excelマクロでの再読込み方法
-
ダイアログボックスで複数フォ...
-
RPGでファイル名(もしくはレコ...
-
jwsファイルが開けない!
-
[VBScript]ファイルの入出力を...
-
ファイル名の先頭にアンダース...
-
ビットマップ画像をRGB値でエク...
-
Cでのネットワークファイルの読...
-
グローバル変数のよくない使い...
-
エクセルVBA Dir途中で止まる
-
「VBS」の「MsgBox」につ...
-
ファイルの結合
-
テキストファイルの最終行を削...
-
VBでオープンしたファイルの...
-
【C&C++】指定行のみファイル書...
-
フリーソフトウェアでflaファイ...
-
ファイル読み書き方法について...
-
マウスポインタの変更
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
VBAにてEXCEL以外のファイル(テ...
-
VBに、Cのincludeのようなもの...
-
fopenできる上限の変更
-
分割コンパイルの#defineについて
-
C言語のfopenについて教えてく...
-
ドラッグアンドドロップでファ...
-
ASP .NETでファイル選択ダイア...
-
iniファイルに追記がしたいです。
-
グローバル変数のよくない使い...
-
ファイルの結合
-
バッチで118項目のCSVを処理し...
-
マウスポインタの変更
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
Excelマクロでの再読込み方法
おすすめ情報