• 締切済み

透過済み画像を作りたい

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

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

参照先のURLの回答者です どこまでが希望通りに動作していて、どこからが希望通りでないのかを明確にしてみましょう 元画像や モノクロマスク、スプライトなどを行ったものを フォームの特定の位置に描画してその画像を 貼り付けてみましょう 画像の大きさは制限をされていますので アップロード出来るファイルの大きさに加工する必要があります ALT+PrintScrnで フォームの画像のみをクリップボードに転送して Windows付属のペイントなどに貼り付けて JPGなどで保存 この際に 必要な部分のみを切り取るとか クオリティを下げるなどして ファイルの大きさを加減してください GIMPやPhotoShopなどで加工するとかです アップロードしてみてください hOriDCに選択されたのがモノクロビットマップなので 背景以外の部分が白くなっているだけの画像のように思います hOrgBmpを CreateBitmapでカラービットマップで作る必要がありそうですが ・・・ また hMemBmpにこのルーチンに飛んできた際の引数などのhBmpを代入している点もうまくないと思います hMembmpも CreateBitmapで生成したほうがいいと思いますよ 同じGDIオブジェクトを別のDCに選択して別々の操作をするのはバグの基です

関連するQ&A