プログラムを始めたところの初心者です。
画像を透過し、ウインドウに表示させたいので、いろいろ探してみたところ、
マスクを自動で作成すると言う物があったので、参考にさせてもらいました。
さらに、その中に、『同じように透過済み画像を作れる』とあったので、いろいろ試したのですが、ダメでした・・・
よろしければ、やり方を教えていただけないでしょうか。
http://oshiete1.goo.ne.jp/qa5254128.html
上を参考にさせていただきました
Dim hDC as HDC, hTemp As HDC, hDest as HDC,hOriDC As HDC
Dim hBmpTemp as HBITMAP, dummy(3) as HBITMAP,hOriBmp As HBITMAP
Dim bmp as BITMAP
Dim hMemDC As HDC,hMemBmp As HBITMAP
hDC=GetDC(NULL)
hTemp=CreateCompatibleDC(hDC)
hDest=CreateCompatibleDC(hDC)
hOriDC=CreateCompatibleDC(hDC)
hMemDC=CreateCompatibleDC(hDC)
ReleaseDC(NULL,hDC)
' 元画像の情報の取得
GetObject(hBmp,Len(bmp),bmp)
' モノクロBITMAPの生成
hBmpTemp=CreateCompatibleBitmap(hDest,bmp.bmWidth,bmp.bmHeight)
hOriBmp=CreateCompatibleBitmap(hOriDC,bmp.bmWidth,bmp.bmHeight)
hMemBmp=hBmp
dummy(0)=SelectObject(hTemp,hBmp)
dummy(1)=SelectObject(hDest,hBmpTemp)
dummy(2)=SelectObject(hOriDC,hOriBmp)
dummy(3)=SelectObject(hMemDC,hMemBmp)
SetBkColor(hTemp,GetPixel(hTemp,0,0))
' 背景マスクの生成
BitBlt(hDest,0,0,bmp.bmWidth,bmp.bmHeight,hTemp,0,0,SRCCOPY)
'スプライト
BitBlt(hOriDC,0,0,bmp.bmWidth,bmp.bmHeight,hDest,0,0,NOTSRCCOPY)
BitBlt(hOriDC,0,0,bmp.bmWidth,bmp.bmHeight,hTemp,0,0,SRCAND)
'透過
BitBlt(hMemDC,0,0,bmp.bmWidth,bmp.bmHeight,hDest,0,0,SRCAND)
BitBlt(hMemDC,0,0,bmp.bmWidth,bmp.bmHeight,hOriDC,0,0,SRCPAINT)
' HBITMAPの切り離し
SelectObject(hTemp,dummy(0))
SelectObject(hDest,dummy(1))
SelectObject(hOriDC,dummy(2))
SelectObject(hMemDC,dummy(2))
' HDCの後始末
DeleteDC(hTemp)
DeleteDC(hDest)
DeleteDC(hOriDC)
DeleteDC(hMemDC)
' 呼び出し元への返り値
MakeMaskWith=hMemBmp
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
参照先のURLの回答者です
どこまでが希望通りに動作していて、どこからが希望通りでないのかを明確にしてみましょう
元画像や モノクロマスク、スプライトなどを行ったものを
フォームの特定の位置に描画してその画像を 貼り付けてみましょう
画像の大きさは制限をされていますので アップロード出来るファイルの大きさに加工する必要があります
ALT+PrintScrnで フォームの画像のみをクリップボードに転送して
Windows付属のペイントなどに貼り付けて JPGなどで保存
この際に 必要な部分のみを切り取るとか クオリティを下げるなどして
ファイルの大きさを加減してください GIMPやPhotoShopなどで加工するとかです
アップロードしてみてください
hOriDCに選択されたのがモノクロビットマップなので
背景以外の部分が白くなっているだけの画像のように思います
hOrgBmpを CreateBitmapでカラービットマップで作る必要がありそうですが ・・・
また hMemBmpにこのルーチンに飛んできた際の引数などのhBmpを代入している点もうまくないと思います
hMembmpも CreateBitmapで生成したほうがいいと思いますよ
同じGDIオブジェクトを別のDCに選択して別々の操作をするのはバグの基です
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- その他(プログラミング・Web制作) uwscとWinShotを使いスクリーンショットを撮る 1 2022/06/30 21:15
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- 英語 Thus, PTH may be used to promote bone regeneration 1 2022/07/26 08:15
- Excel(エクセル) マクロで行を追加、削除すると行位置がずれますが、解決方法はありませんか?。 5 2022/05/28 16:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【EXCEL VBA】ダブルクリックで...
-
こんなことてしますか??
-
VBAのユーザーフォームのイメー...
-
C#で画像を他の画像に貼り付け...
-
UWSC 画像判定と条件分岐について
-
Excelで画像クリックのアテンシ...
-
jQuery . プログラミング 助け...
-
UWSCの色判定
-
gif 画像上の ボタンに リン...
-
OpenCVで出力を24bitのbmpにす...
-
UWSCでループ処理がうまくいき...
-
Excel ユーザーフォームで表示...
-
UWSC「画像が無い場合」
-
モーダルウィンドウ内で複数の...
-
【VBA】Excel2016で画像を一括...
-
HTMLで画像をポップアップで表...
-
Excelで画像URLを1つずつセル...
-
画像認識アルゴリズムについて
-
EXCEL VBA 複数のImageコントロ...
-
スマホでサイトの画像を長押し→...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
こんなことてしますか??
-
【EXCEL VBA】ダブルクリックで...
-
Excelで画像URLを1つずつセル...
-
EXCEL VBA 複数のImageコントロ...
-
HTMLで画像をポップアップで表...
-
背景画像の繰り返しについて
-
Excel ユーザーフォームで表示...
-
gif 画像上の ボタンに リン...
-
VBA シート毎に画像挿入
-
jQuery . プログラミング 助け...
-
VBAのユーザーフォームのイメー...
-
jqueryスライダーを2段でスライ...
-
ホームページバナーを(画像が...
-
「using Windows」でエラーが出る
-
スマホでサイトの画像を長押し→...
-
【WPF】画像の切り替え
-
PowerPoint VBA で画像の鮮明度...
-
画像のピクセルデータの取得
-
UWSCの色判定
-
UWSCを使った画像認証マク...
おすすめ情報