What's wrong with my alpha blend routine?
Posted: Fri Jul 28, 2006 10:04 pm
I just can't understand this. Only a small part of the image is drawn. And also it's not alpha blending correctly. Does anyone know something about this?
Code: Select all
UseTIFFImageDecoder()
Procedure Min(A, B)
If A > B
ProcedureReturn B
EndIf
ProcedureReturn A
EndProcedure
Procedure BlitAlphaImage(Img1, Img2)
Protected hDC
Protected Mem1, Mem2
Protected Bmp.BITMAP
Protected X, Y
Protected W2 = ImageWidth(Img2)
Protected H2 = ImageWidth(Img2)
Protected *OldVal1.RGBQUAD
Protected *OldVal2.RGBQUAD
hDC = GetDC_(0)
GetObject_(ImageID(Img1), SizeOf(BITMAP), @Bmp)
Mem1 = Bmp\bmBits
GetObject_(ImageID(Img2), SizeOf(BITMAP), @Bmp)
Mem2 = Bmp\bmBits
ReleaseDC_(0, hDC)
For X = 0 To W2
For Y = 0 To H2
*OldVal1 = Mem1+X*W2+Y
*OldVal1\rgbRed + 15
*OldVal1\rgbGreen + 15
*OldVal1\rgbBlue + 15
;*OldVal1 = Mem1+X*W2+Y
;*OldVal2 = Mem2+X*W2+Y
;*OldVal1\rgbRed = ((*OldVal1\rgbRed**OldVal2\rgbReserved)/100) + ((*OldVal2\rgbRed*(100-*OldVal2\rgbReserved)) / 100)
;*OldVal1\rgbGreen = ((*OldVal1\rgbGreen**OldVal2\rgbReserved)/100) + ((*OldVal2\rgbGreen*(100-*OldVal2\rgbReserved)) / 100)
;*OldVal1\rgbBlue = ((*OldVal1\rgbBlue**OldVal2\rgbReserved)/100) + ((*OldVal2\rgbBlue*(100-*OldVal2\rgbReserved)) / 100)
;*OldVal1\rgbReserved = Min(*OldVal1\rgbReserved + *OldVal2\rgbReserved, 255)
Next
Next
EndProcedure
OpenWindow(0, 0, 0, 512, 384, "", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
CreateGadgetList(WindowID(0))
LoadImage(0, "Clock - Back.tiff")
LoadImage(1, "Border.tiff")
BlitAlphaImage(0, 1)
ImageGadget(0, 0, 0, 0, 0, ImageID(0))
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Break
EndSelect
ForEver