画像透過転送(T) <TOP>
AlphaBlendを使って画像を転送します。
あらかじめ120×80ピクセルのBMPファイルをAlphaTest.bmpとして用意してください。
AlphaBlend 画像転送
GetDC デバイスコンテキスト取得
ReleaseDC デバイスコンテキスト解放
左:フォーム設計 右:アルファ値を可変することに変更しました。
アルファ値 【Alpha value】
コンピュータが扱うデジタル画像データにおいて、各点に設定された透過度情報のこと。完全な透明(無色)から、完全な不透明(背景の色をまったく通さない)まで設定することができる。
コンピュータが画像を扱う場合、色情報として、各点についてR(赤)・G(緑)・B(青)の三原色の情報をもち、その組み合わせで色を表現する(CMYKモードの場合は4色)。
点の透明度を表現する場合にはこれにアルファ値を加え、4つの情報の組み合わせで一つの点を表現する。
アルファ値は、データ形式やソフトウェアによって扱える場合と扱えない場合がある。扱える場合、各点の色を表すデータに追加する形で表現される。この追加されたデータ領域をアルファチャンネルという。(この項e-Wordを参照しました)
'================================================================ '= AlphaBlEndで透過転送 '= (AlphaBlend.bas) '================================================================ #include "Windows.bi" ' 透過ピクセルと半透過ピクセルを持つビットマップを表示 Declare Function Api_AlphaBlend& Lib "msimg32" Alias "AlphaBlend" (ByVal hdcDest&, ByVal nXDest&, ByVal nYDest&, ByVal nWidthDest&, ByVal nHeightDest&, ByVal hdcSrc&, ByVal nXSrc&, ByVal nYSrc&, ByVal nWidthSrc&, ByVal nHeightSrc&, ByVal nBlendFunc&) ' 指定されたウィンドウのクライアント領域または画面全体を表すディスプレイデバイスコンテキストのハンドルを取得 Declare Function Api_GetDC& Lib "user32" Alias "GetDC" (ByVal hWnd&) ' デバイスコンテキストを解放 Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&) Var Shared HScroll1 As Object Var Shared Picture1 As Object Var Shared Picture2 As Object Var Shared Text(3) As Object Var Shared Bitmap As Object BitmapObject Bitmap HScroll1.Attach GetDlgItem("HScroll1") Picture1.Attach GetDlgItem("Picture1") Picture2.Attach GetDlgItem("Picture2") For i = 0 To 3 Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1))) Text(i).SetFontSize 14 Next i Var Shared hDC1 As Long Var Shared hDC2 As Long '================================================================ '= '================================================================ Declare Sub MainForm_Start edecl () Sub MainForm_Start() HScroll1.SetScrollRange 0,255 HScroll1.SetScrollStep 5, 1 HScroll1.SetScrollPos 0 Bitmap.LOADFILE "AlphaTest.bmp" 'Picture1.StretchBitmap Bitmap, 0, 0, Picture1.GetWidth, Picture1.GetHeight Picture1.DrawBitmap Bitmap, 0, 0 Bitmap.DeleteObject hDC1 = Api_GetDC(Picture1.GethWnd) hDC2 = Api_GetDC(Picture2.GethWnd) End Sub '================================================================ '= '================================================================ Declare Sub HScroll1_Change edecl () Sub HScroll1_Change() Var Alpha As Long Var Ret As Long Picture2.Cls Alpha = HScroll1.GetScrollPos Ret = Api_AlphaBlend(hDC2, 0, 0, Picture2.GetWidth, Picture2.GetHeight , hDC1, 0, 0, Picture1.GetWidth, Picture1.GetHeight , Alpha * &H10000) Text(3).SetWindowText Trim$(Str$(Alpha)) End Sub '================================================================ '= '================================================================ Declare Sub MainForm_QueryClose edecl (Cancel%, ByVal Mode%) Sub MainForm_QueryClose(Cancel%, ByVal Mode%) Var Ret As Long If Cancel% = 0 Then Ret = Api_ReleaseDC(Picture1.GethWnd, hDC1) Ret = Api_ReleaseDC(Picture2.GethWnd, hDC2) End End If End Sub '================================================================ '= '================================================================ While 1 WaitEvent Wend Stop End