-PR-
締切り
済み

画像操作について2

  • すぐに回答を!
  • 質問No.91953
  • 閲覧数104
  • ありがとう数0
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 10% (4/39)

どなたか助けてください。

下記ソースをチェックしていただけないでしょうか?
ビットマップ画像処理を行うために、CreateDIBSection()で編集領域を
確保して、imageにコピーして画像操作を行いたいのですが、
Debug Assertion Failedというエラーがでます。

知識不足ということもあり、ソース自体に問題がある可能性の方が高いのですが、
根本的に画像操作に対する考え方が間違っているのでしょうか?

ご教授よろしくお願い致します。

環境はVC++6.0 MFC ダイアログベースです

BOOL C***Dlg::*******()
{

HBITMAP hBmp;
BITMAPINFOHEADER bi;
unsigned *bmbuf;

image , MemDC, MemDC2はPublicです。

bi.biSize = sizeof(BITMAPINFOHEADER);
bi.biWidth = 16;
bi.biHeight = -40; //top-down
bi.biPlanes = 1;
bi.biBitCount = 32;
bi.biCompression = BI_RGB;
bi.biSizeImage = 0;
bi.biXPelsPerMeter = 0;
bi.biYPelsPerMeter = 0;
bi.biClrUsed = 0;
bi.biClrImportant = 0;

hBmp=CreateDIBSection(NULL,
(LPBITMAPINFO)&bi,
DIB_RGB_COLORS,
(void **)(&bmbuf),
NULL,
0);

CDC* pDC = this->GetDC();

MemDC.CreateCompatibleDC(pDC);
SelectObject(MemDC.m_hDC,hBmp);

MemDC2.CreateCompatibleDC(pDC);
HBITMAP h_BMP =
(HBITMAP)LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_******),
IMAGE_BITMAP, 16, 40, LR_CREATEDIBSECTION);

HBITMAP h_OLD_BMP = (HBITMAP)::SelectObject(MemDC2.m_hDC,h_BMP);

m_pbg1dc->BitBlt(42,16,100,100,&MemDC2,0,0,SRCCOPY);
memcpy(image, bmbuf, 16 * 40 * 4);

::SelectObject(MemDC2.m_hDC,h_OLD_BMP);
MemDC2.DeleteDC();

DeleteObject(hBmp);

return TRUE;

}
通報する
  • 回答数2
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全2件)

  • 回答No.1
レベル6

ベストアンサー率 0% (0/0)

こんにちは、 私も似たようなプログラムを組んでます。 まず一つの間違いとしては、、、最後の行の DeleteObject(hBmp); はやってはいけないと思います。MemDCが使用中ですから、、 ::SelectObject(MemDC2.m_hDC,h_OLD_BMP); のようにMemDCにも戻してください。 imageは配列ですか? 私のやり方は多少違います。CBitmapク ...続きを読む
こんにちは、
私も似たようなプログラムを組んでます。
まず一つの間違いとしては、、、最後の行の
DeleteObject(hBmp);
はやってはいけないと思います。MemDCが使用中ですから、、
::SelectObject(MemDC2.m_hDC,h_OLD_BMP);
のようにMemDCにも戻してください。
imageは配列ですか?

私のやり方は多少違います。CBitmapクラスを使ってます。
CBitmap::CreateCompatibleBitmapが作ってくれるはずです。
また、余計な話ですけど、、どうせMFCを使うんであれば、
SelectObject(MemDC.m_hDC,hBmp);

MemDCSelectObject(hBmp);
のように記述したほうがわかりやすいと思います。
補足コメント
yomogikun

お礼率 10% (4/39)

imageは二次元配列です。
CreateDIBSectionの戻り値のバッファをコピーしてます。
このimageの中身を操作して表示させようとしています。
投稿日時 - 2001-06-18 16:32:06


  • 回答No.2
レベル6

ベストアンサー率 0% (0/0)

上のソースコードに対して質問していいですか。 MemDCは作っただけでどこにも使われてないのですが、、 また、m_pbg1dcは? CreateDIBSectionはあまり使ったことがなくてよくわかりませんが、、 SelectObject(MemDC.m_hDC,hBmp); などで指定するBitmapはDC交換性を持たなければいけないと思いますけど、、
上のソースコードに対して質問していいですか。
MemDCは作っただけでどこにも使われてないのですが、、
また、m_pbg1dcは?
CreateDIBSectionはあまり使ったことがなくてよくわかりませんが、、

SelectObject(MemDC.m_hDC,hBmp);
などで指定するBitmapはDC交換性を持たなければいけないと思いますけど、、
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ