Задача заключаеться в следующем: При использовании DDraw, Надо загрузить картинку и обрезать её по определённому цвету (что не составляет труда), потом эту обрезанную картинку надо перерисовать с учётом AlphaBlend (тоже не составляет проблемм).... А вот совместить это у меня не получаеться!
Для АльфаБленда использую эту функцию:
Private Declare Function AlphaBlend _
Lib "msimg32" ( _
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 widthSrc As Long, _
ByVal heightSrc As Long, _
ByVal dreamAKA As Long) _
As Boolean
Проблемма Заключаеться в том что у меня получаеться одно из двух либо рисовать картинку с прозрачностью либо с AlphaBlend.
Что делать??? Как быть? Подскажите пожалуйста.
P.S.
Есть идея:
1. Создать HDC
2.На него прорисовать другой HDC (с рисунком) и выризать цвет
3. Созданный HDC перерисовать на поверхность с AlphaBlend
Пробовал так:
- Код: Выделить всё
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject 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 TransparentBlt Lib "Msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Integer, ByVal nYOriginDest As Integer, ByVal nWidthDest As Integer, ByVal nHeightDest As Integer, ByVal hdcSrc As Long, ByVal nXOriginSrc As Integer, ByVal nYOriginSrc As Integer, ByVal nWidthSrc As Integer, ByVal nHeightSrc As Integer, ByVal crTransparent As Long) As Boolean
Private Declare Function AlphaBlend _
Lib "msimg32" ( _
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 widthSrc As Long, _
ByVal heightSrc As Long, _
ByVal dreamAKA As Long) _
As Boolean
Dim hMemoryDC As Long
Dim hOldBitMap&
Dim bmp&, nBlend&, AlphaBlandDraw&
Private Sub Command1_Click()
Picture1.ScaleMode = vbPixels
Printer.ScaleMode = vbPixels
hMemoryDC = CreateCompatibleDC(Picture1.hdc)
bmp = CreateCompatibleBitmap(hMemoryDC, Picture1.Width, Picture1.Height)
hOldBitMap = SelectObject(hMemoryDC, bmp)
TransparentBlt hMemoryDC, 0, 0, Picture1.Width, Picture1.Height, Picture1.hdc, 0, 0, Picture1.Width, Picture1.Height, vbBlue
nBlend = vbBlue - CLng(150) * (vbYellow + 1)
AlphaBlandDraw = AlphaBlend(Me.hdc, 0, 0, Picture1.Width, Picture1.Height, hMemoryDC, 0, 0, Picture1.Width, Picture1.Height, nBlend)
Me.Refresh
End Sub
За поверхность я взял форму а за источник picture1 (а вней картинка с синим фоном по которому режим)
Но рисуеться почему то чрный квадрат!!! Что я не так делаю???