Từ sự hướng dẫn của chú Siwtom:
Em có được Hàm TransparentPic như sau:
Lấy ảnh Bitmap từ 1 file ngoài, trích 1 phần ảnh của Bitmap này theo tọa độ xSrc và ySrc, kích thước SrcWidth và SrcHeight. Sau đó "Paste" vào vùng có handle of device context (ví dụ như Form, Static, Button... hay 1 Window tự tạo) tại tọa độ PosX và PosY, có thể co giãn về kích thước Width, Height đồng thời tất cả các màu trùng với màu rColorTransparent đều trong suốt.
[GPECODE=vb]
'Declare Const
Private Const SRCCOPY = &HCC0020 ' (DWORD) dest = source
Private Const SRCPAINT = &HEE0086 ' (DWORD) dest = source OR dest
Private Const SRCAND = &H8800C6 ' (DWORD) dest = source AND dest
Private Const NOTSRCCOPY = &H330008 ' (DWORD) dest = (NOT source)
Private Const IMAGE_BITMAP As Long = 0
Private Const LR_LOADFROMFILE As Long = &H10
'Declare Func
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleBitmap Lib "gdi32" (ByVal hdc As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function BitBlt Lib "gdi32" (ByVal hDestDC As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function LoadImage Lib "user32" Alias "LoadImageA" (ByVal hInst As Long, ByVal lpsz As String, ByVal un1 As Long, ByVal n1 As Long, ByVal n2 As Long, ByVal un2 As Long) As Long
'----------------------------------
Private Function TransparentPic(Fullfilename As String, hdc As Long, PosX As Long, _
PosY As Long, Width As Long, Height As Long, xSrc As Long, ySrc As Long, _
SrcWidth As Long, SrcHeight As Long, rColorTransparent As Long) As Long
Dim hBitmap As Long
Dim hdc As Long
Dim tmpDC As Long
Dim oldtmpDC As Long
Dim SrcDC As Long
Dim oldSrcDC As Long
Dim tmpBitmap As Long
Dim oldDC As Long
Dim dcMask As Long
Dim olddcMask As Long
Dim hBitmapMask As Long
'Lay anh tu file nguon neu tai Fullfilename
hBitmap = LoadImage(0, Fullfilename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE)
'Tao SrcDC de tao nguon anh de copy vao hdc
SrcDC = CreateCompatibleDC(hdc)
oldSrcDC = SelectObject(SrcDC, hBitmap)
'Tao tmpDC tuong thich voi hdc de lam trung gian luu tru anh
tmpDC = CreateCompatibleDC(hdc)
tmpBitmap = CreateCompatibleBitmap(hdc, Width, Height)
oldtmpDC = SelectObject(tmpDC, tmpBitmap)
'Tao Mask: MonoChrome or Black and White Bitmap
hBitmapMask = CreateBitmap(Width, Height, 1, 1, ByVal 0&)
dcMask = CreateCompatibleDC(hdc)
olddcMask = SelectObject(dcMask, hBitmapMask)
'Buoc 1: Cai dat mau Transprent lam mau Background
oldcolor = SetBkColor(SrcDC, rColorTransparent) 'Su dung rColorTransparent=RGB(...,...,...)
'Buoc 2: Tao 1 Mask voi BackGround= Black; ForeGround=White
StretchBlt dcMask, PosX, PosY, Width, Height, SrcDC, xSrc, ySrc, SrcWidth, SrcHeight, NOTSRCCOPY
'Buoc 3: Tra lai BackGround ban dau cho anh nguon
SetBkColor SrcDC, oldcolor
'Buoc 4: Tao anh Back trong suot, fore mau trang
BitBlt hdc, PosX, PosY, Width, Height, dcMask, 0, 0, SRCPAINT
'Buoc 5: Chen anh vao tmpdc
StretchBlt tmpDC, PosX, PosY, Width, Height, SrcDC, xSrc, ySrc, SrcWidth, SrcHeight, SRCCOPY
'Buoc 6: Dao (Invert) mau cho dcMask
BitBlt dcMask, PosX, PosY, Width, Height, dcMask, 0, 0, NOTSRCCOPY
'Buoc 7: Them Mask vao tmdc sao cho Back mau trang, Fore la hinh anh
BitBlt tmpDC, PosX, PosY, Width, Height, dcMask, 0, 0, SRCPAINT
'Buoc 8: Chen anh vao hdc lam trong suot phan mau trang cua tmpdc
BitBlt hdc, PosX, PosY, Width, Height, tmpDC, 0, 0, SRCAND
'Giai phong bo nho
SelectObject tmpDC, oldtmpDC
DeleteDC tmpDC
SelectObject dcMask, olddcMask
DeleteDC dcMask
SelectObject SrcDC, oldSrcDC
DeleteDC SrcDC
DeleteObject tmpBitmap
DeleteObject hBitmapMask
End Function
[/GPECODE]
Cám ơn mọi người!