yaardilbar Level: Guest

|
Re: How to transparent picture background?
try following code:
Private Declare Function GetObject Lib "gdi32" Alias "GetObjectA" (ByVal hObject As Long, ByVal nCount As Long, lpObject As Any) 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 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 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 SetBkColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function GetDesktopWindow Lib "user32" () As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Type BITMAP '14 bytes
bmType As Long
bmWidth As Long
bmHeight As Long
bmWidthBytes As Long
bmPlanes As Integer
bmBitsPixel As Integer
bmBits As Long
End Type
Dim WinHnd As Long
Sub TransparentPaint(objDest As Object, picSource As StdPicture, lngX As Long, lngY As Long, ByVal lngMaskColor As Long)
Dim lngSrcDC As Long
Dim lngSaveDC As Long
Dim lngMaskDc As Long
Dim lngInvDc As Long
Dim lngNewPicDc As Long
Dim bmpSource As BITMAP
Dim hResultBmp As Long
Dim hSaveBmp As Long
Dim hMaskBmp As Long
Dim hInvBmp As Long
Dim hSrcPrevBmp As Long
Dim hSavePrevBmp As Long
Dim hDestPrevBmp As Long
Dim hMaskPrevBmp As Long
Dim hInvPrevBmp As Long
Dim lngOrigScaleMode&
Dim lngOrigColor&
'*************************************
'*************************************
lngOrigScaleMode = objDest.ScaleMode
lngOrigColor = vbPixels
'*************************************
'*************************************
GetObject picSource, Len(bmpSource), bmpSource
'*************************************
'*************************************
lngSrcDC = CreateCompatibleDC(objDest.hdc)
lngSaveDC = CreateCompatibleDC(objDest.hdc)
lngMaskDc = CreateCompatibleDC(objDest.hdc)
lngInvDc = CreateCompatibleDC(objDest.hdc)
lngNewPicDc = CreateCompatibleDC(objDest.hdc)
'*************************************
'*************************************
hMaskBmp = CreateBitmap(bmpSource.bmWidth, bmpSource.bmHeight, 1, 1, ByVal 0&)
hInvBmp = CreateBitmap(bmpSource.bmWidth, bmpSource.bmHeight, 1, 1, ByVal 0&)
'*************************************
'*************************************
hResultBmp = CreateCompatibleBitmap(objDest.hdc, bmpSource.bmWidth, bmpSource.bmHeight)
hSaveBmp = CreateCompatibleBitmap(objDest.hdc, bmpSource.bmWidth, bmpSource.bmHeight)
'*************************************
'*************************************
hSrcPrevBmp = SelectObject(lngSrcDC, picSource)
hSavePrevBmp = SelectObject(lngSaveDC, hSaveBmp)
hMaskPrevBmp = SelectObject(lngMaskDc, hMaskBmp)
hInvPrevBmp = SelectObject(lngInvDc, hInvBmp)
hDestPrevBmp = SelectObject(lngNewPicDc, hResultBmp)
'*************************************
'*************************************
BitBlt lngSaveDC, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngSrcDC, 0, 0, vbSrcCopy
'*************************************
'*************************************
lngOrigColor = SetBkColor(lngSrcDC, lngMaskColor)
BitBlt lngMaskDc, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngSrcDC, 0, 0, vbSrcCopy
'*************************************
'*************************************
SetBkColor lngSrcDC, lngOrigColor
'*************************************
'*************************************
BitBlt lngInvDc, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngMaskDc, 0, 0, vbNotSrcCopy
'*************************************
'*************************************
BitBlt lngNewPicDc, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, objDest.hdc, lngX, lngX, vbSrcCopy
'*************************************
'*************************************
BitBlt lngNewPicDc, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngMaskDc, 0, 0, vbSrcAnd
'*************************************
'*************************************
BitBlt lngSrcDC, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngInvDc, 0, 0, vbSrcAnd
'*************************************
'*************************************
BitBlt lngNewPicDc, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngSrcDC, 0, 0, vbSrcPaint
'*************************************
'*************************************
BitBlt objDest.hdc, lngX, lngY, bmpSource.bmWidth, bmpSource.bmHeight, lngNewPicDc, 0, 0, vbSrcCopy
'*************************************
'*************************************
BitBlt lngSrcDC, 0, 0, bmpSource.bmWidth, bmpSource.bmHeight, lngSaveDC, 0, 0, vbSrcCopy
'*************************************
'*************************************
SelectObject lngSrcDC, hSrcPrevBmp
SelectObject lngSaveDC, hSavePrevBmp
SelectObject lngNewPicDc, hDestPrevBmp
SelectObject lngMaskDc, hMaskPrevBmp
SelectObject lngInvDc, hInvPrevBmp
'*************************************
'*************************************
DeleteObject hSaveBmp
DeleteObject hMaskBmp
DeleteObject hInvBmp
DeleteObject hResultBmp
DeleteDC lngSrcDC
DeleteDC lngSaveDC
DeleteDC lngInvDc
DeleteDC lngMaskDc
DeleteDC lngNewPicDc
'*************************************
'*************************************
objDest.ScaleMode = lngOrigScaleMode
End Sub
Private Sub Command1_Click()
' Load Form2
' Form2.Show '
WinHnd = GetDesktopWindow()
WinHnd = GetDC(WinHnd)
TransparentPaint WinHnd, LoadPicture("Qalandar on Desktop.bmp"), 0, 0, QBColor(15)
End Sub
|