ページ 11

ビットマップ処理がうまくいかない

Posted: 2006年6月27日(火) 01:35
by ganas
今回、次のようなプログラムを使って、ビットマップを読み込むプログラムを作りました。
そして、実行するのですが、ソースコードに書いてある SelectObject(hTargetDC,hTargetBITMAP) の部分で[ハンドルが無効です]というエラーが発生します。

画像が正しくロードされているのは確認済みです。

なお、picMarkは、そのままBitBltなどで転送するためのものです。

Posted: 2006年6月27日(火) 09:17
by 7
CreateCompatibleDC()関数の引数が問題なんじゃないでしょうか。
指定されたデバイスコンテキストに対してコンパチブルなメモリデバイスコンテキストを作る訳なんですけど、たぶん 0 が指定されてて現在の画面に対するコンパチブルなメモリデバイスコンテキストを作っちゃってると。

Posted: 2006年6月27日(火) 17:12
by イグトランス
どちらにしてもhTargetBITMAPは外から値渡し(ByVal)で渡す意味がありません。
関数内で変数宣言するか,或いはByRefにするかのどちらかになると思います。

解決しました

Posted: 2006年6月27日(火) 21:12
by ganas
助言していただき、ありがとうございました。

以下のように修正したところ動作しました。

コード: 全て選択


Sub LoadImg(ImgPath As BytePtr,ByRef hWindow As HWND,ByRef hTargetDC As HDC,ByRef hTargetBITMAP As HBITMAP,ByRef hTargetBITMAPINFO As BITMAP)
	Dim hDC As HDC
	hDC = GetDC(hWindow)
	hTargetDC = CreateCompatibleDC(hDC)
	hTargetBITMAP = LoadImage(NULL,ImgPath,IMAGE_BITMAP,0,0,LR_LOADFROMFILE)
	GetObject(hTargetBITMAP,sizeof(BITMAP),hTargetBITMAPINFO)
	SelectObject(hTargetDC,hTargetBITMAP)
	ReleaseDC(hWindow,hDC)
End Sub