Hier mal ein Snippet von Mischa, angepaßt an PB4 von mir.
Code: Alles auswählen
Procedure DrawTransparentImage(TransImage.l, ZielImage.l, x.l, y.l, b.l, h.l, TransColor.l)
Protected hdc.l, hzwischen.l, HdcTemp.l, obj.l, HdcBack.l, HdcObject.l, HdcMem.l, HdcSave.l
Protected BmPAndBack.l, BmPAndObject.l, BmPAndMem.l, BmPSave.l, BmpBackOld.l, BmpObjectOld.l
Protected BmpMemOld.l, BmpSaveOld.l, CColor.l, target.l
ImageID(TransImage) : hdc = StartDrawing(ImageOutput(TransImage))
hzwischen = CreateCompatibleBitmap_(hdc, b, h) : HdcTemp = CreateCompatibleDC_(hdc)
obj = SelectObject_(HdcTemp, hzwischen) : HdcBack = CreateCompatibleDC_(hdc)
HdcObject = CreateCompatibleDC_(hdc) : HdcMem = CreateCompatibleDC_(hdc)
HdcSave = CreateCompatibleDC_(hdc) : BmPAndBack = CreateBitmap_(b, h, 1, 1, 0)
BmPAndObject = CreateBitmap_(b, h, 1, 1, 0) : BmPAndMem = CreateCompatibleBitmap_(hdc, b, h)
BmPSave = CreateCompatibleBitmap_(hdc, b, h) : SetMapMode_(HdcTemp, GetMapMode_(hdc))
BmpBackOld = SelectObject_(HdcBack, BmPAndBack) : BmpObjectOld = SelectObject_(HdcObject, BmPAndObject)
BmpMemOld = SelectObject_(HdcMem,BmPAndMem) : BmpSaveOld = SelectObject_(HdcSave, BmPSave)
SetStretchBltMode_(HdcTemp, #COLORONCOLOR) : StretchBlt_(HdcTemp, 0, 0, b, h, hdc, 0, 0, b, h, 13369376)
If TransColor = -1 : TransColor = GetPixel_(HdcTemp, (b - 1), 0) : EndIf
SetMapMode_(HdcTemp, GetMapMode_(hdc)) : BitBlt_(HdcSave, 0, 0, b, h, HdcTemp, 0, 0, $0CC0020)
CColor = SetBkColor_(HdcTemp, TransColor) : BitBlt_(HdcObject, 0, 0, b, h, HdcTemp, 0, 0, $0CC0020)
SetBkColor_(HdcTemp,RGB(255,255,255)) : Box(0,0,b,h,GetSysColor_(#COLOR_BTNFACE))
StopDrawing() : ImageID(ZielImage) : target = StartDrawing(ImageOutput(ZielImage))
BitBlt_(HdcBack, 0, 0, b, h, HdcObject, 0, 0, $0330008) : BitBlt_(HdcMem, 0, 0, b, h, target, x, y, $0CC0020)
BitBlt_(HdcMem, 0, 0, b, h, HdcObject, 0, 0, $08800C6) : BitBlt_(HdcTemp, 0, 0, b, h, HdcBack, 0, 0, $08800C6)
BitBlt_(HdcMem, 0, 0, b, h, HdcTemp, 0, 0, $0EE0086) : BitBlt_(HdcTemp, 0, 0, b, h, HdcMem, 0, 0, $0CC0020)
BitBlt_(target, x, y, b, h, HdcTemp, 0, 0, $0CC0020) : StopDrawing()
DeleteObject_(obj) : DeleteObject_(BmpBackOld) : DeleteObject_(BmpObjectOld) : DeleteObject_(BmpMemOld)
DeleteObject_(BmpSaveOld) : DeleteDC_(HdcMem) : DeleteDC_(HdcBack) : DeleteDC_(HdcObject)
DeleteDC_(HdcSave) : DeleteDC_(HdcTemp) : DeleteObject_(hzwischen) : DeleteObject_(BmPAndBack)
DeleteObject_(BmPAndObject) : DeleteObject_(BmPAndMem) : DeleteObject_(BmPSave)
EndProcedure
TImage.l = LoadImage(#PB_Any, #PB_Compiler_Home + "Examples\Sources\Data\PureBasicLogo.bmp", #PB_Image_DisplayFormat)
TColor.l = $84695A
DrawTransparentImage(TImage, TImage, 0, 0, 381, 68, TColor)
If OpenWindow(0, #PB_Ignore, 0, 381, 68, "") And CreateGadgetList(WindowID(0))
ImageGadget(0, 0, 0, 381, 68, ImageID(TImage))
While WaitWindowEvent() <> 16 : Wend
EndIf