アプリ版:「スタンプのみでお礼する」機能のリリースについて

プログラムを始めたところの初心者です。
画像を透過し、ウインドウに表示させたいので、いろいろ探してみたところ、
マスクを自動で作成すると言う物があったので、参考にさせてもらいました。
さらに、その中に、『同じように透過済み画像を作れる』とあったので、いろいろ試したのですが、ダメでした・・・
よろしければ、やり方を教えていただけないでしょうか。
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件)

参照先のURLの回答者です



どこまでが希望通りに動作していて、どこからが希望通りでないのかを明確にしてみましょう

元画像や モノクロマスク、スプライトなどを行ったものを
フォームの特定の位置に描画してその画像を 貼り付けてみましょう

画像の大きさは制限をされていますので アップロード出来るファイルの大きさに加工する必要があります
ALT+PrintScrnで フォームの画像のみをクリップボードに転送して
Windows付属のペイントなどに貼り付けて JPGなどで保存
この際に 必要な部分のみを切り取るとか クオリティを下げるなどして
ファイルの大きさを加減してください GIMPやPhotoShopなどで加工するとかです
アップロードしてみてください

hOriDCに選択されたのがモノクロビットマップなので
背景以外の部分が白くなっているだけの画像のように思います
hOrgBmpを CreateBitmapでカラービットマップで作る必要がありそうですが ・・・

また hMemBmpにこのルーチンに飛んできた際の引数などのhBmpを代入している点もうまくないと思います
hMembmpも CreateBitmapで生成したほうがいいと思いますよ

同じGDIオブジェクトを別のDCに選択して別々の操作をするのはバグの基です
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!