画像透過転送(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