AlphaBlend + Вырезание по цвету...

Работа с 2D и 3D графикой, видео, звуком.

Модератор: Mikle

Gemini
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 390
Зарегистрирован: 24.07.2002 (Ср) 14:15
Откуда: Ozersk

AlphaBlend + Вырезание по цвету...

Сообщение Gemini » 12.10.2008 (Вс) 20:05

Люди нужна срочно помощь!

Задача заключаеться в следующем: При использовании 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 (а вней картинка с синим фоном по которому режим)
Но рисуеться почему то чрный квадрат!!! Что я не так делаю???
У вас нет доступа для просмотра вложений в этом сообщении.
В нашем деле главное ЛОГИКА.

косил косой косой косой.

Вернуться в Мультимедиа

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList