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

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
ganas
記事: 19
登録日時: 2006年3月04日(土) 00:39

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

#1 投稿記事 by ganas »

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

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

なお、picMarkは、そのままBitBltなどで転送するためのものです。
7
記事: 473
登録日時: 2005年5月31日(火) 18:51
お住まい: 新潟県
連絡する:

#2 投稿記事 by 7 »

CreateCompatibleDC()関数の引数が問題なんじゃないでしょうか。
指定されたデバイスコンテキストに対してコンパチブルなメモリデバイスコンテキストを作る訳なんですけど、たぶん 0 が指定されてて現在の画面に対するコンパチブルなメモリデバイスコンテキストを作っちゃってると。
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

どちらにしてもhTargetBITMAPは外から値渡し(ByVal)で渡す意味がありません。
関数内で変数宣言するか,或いはByRefにするかのどちらかになると思います。
ganas
記事: 19
登録日時: 2006年3月04日(土) 00:39

解決しました

#4 投稿記事 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
返信する