Bitmap transparent malen, Hintergrundfarbe herausfinden ?
Verfasst: 23.03.2008 23:05
Hab da mal eine Anfängerfrage. Irgendwie Brett vorm Kopf.
Um ein Bitmap transparent zu malen gibt es diverse Beispiele und davon gefällt mir TransparentBlt_ am besten. Aber irgendwie finde ich nix wie man die Hintergrundfarbe herausfindet. Wohl die falschen Suchbegriffe.
Habe es mit einem Dummy Createimage gelöst, welches gleich wieder gelöscht wird.
Aber das geht doch sicher einfacher oder ?
Hier mein Beispielcode:
Um ein Bitmap transparent zu malen gibt es diverse Beispiele und davon gefällt mir TransparentBlt_ am besten. Aber irgendwie finde ich nix wie man die Hintergrundfarbe herausfindet. Wohl die falschen Suchbegriffe.
Habe es mit einem Dummy Createimage gelöst, welches gleich wieder gelöscht wird.
Aber das geht doch sicher einfacher oder ?
Hier mein Beispielcode:
Code: Alles auswählen
Prototype TransparentBlt(a,b,c,d,e,f,g,h,i,j,k)
msimg32 = OpenLibrary(#PB_Any, "msimg32.dll")
If msimg32
Global TransparentBlt_.TransparentBlt = GetFunction(msimg32, "TransparentBlt")
EndIf
Procedure Api_Farbverlauf(dc,br,hh,farbe0,farbe1,flag=1)
;http://msdn2.microsoft.com/en-us/library/ms532338(VS.85).aspx
;flag=0 = #GRADIENT_FILL_RECT_H
;flag=1 = #GRADIENT_FILL_RECT_V
Dim t_vertex.TRIVERTEX(1)
;t_vertex(0)\x + y ist eh immer null
t_vertex(0)\Red = Red(farbe0) <<8
t_vertex(0)\Green = Green(farbe0)<<8
t_vertex(0)\Blue = Blue(farbe0) <<8
t_vertex(1)\x = br
t_vertex(1)\y = hh
t_vertex(1)\Red = Red(farbe1) <<8
t_vertex(1)\Green = Green(farbe1)<<8
t_vertex(1)\Blue = Blue(farbe1) <<8
g_rect.GRADIENT_RECT
g_rect\UpperLeft = 0
g_rect\LowerRight = 1
Gradientfill_(dc, @t_vertex(), 2, @g_rect, 1, flag)
EndProcedure
;es geht los==============================================
bmpnr = LoadImage(#PB_Any, #PB_Compiler_Home+"\Examples\Sources\Data\purebasiclogo.bmp")
bmpid = ImageID(bmpnr)
bmpbr = ImageWidth(bmpnr)
bmphh = ImageHeight(bmpnr)
flag = #PB_Window_SystemMenu|1|#PB_Window_Invisible
hwnd = OpenWindow(0,0,0,400,400,"Test",flag)
CreateGadgetList(hwnd)
;nur um die Hintergrundfarbe herauszufinden <------
CreateImage(0,bmpbr,bmphh)
StartDrawing(ImageOutput(0))
DrawImage(bmpid,0,0)
HgFarbe = Point(0, 0)
StopDrawing()
FreeImage(0)
;Logo mit neuem Hintergrund
br1 = 350
hh1 = 100
id1 = CreateImage(1,br1,hh1)
dc1 = StartDrawing(ImageOutput(1))
;Box(0,0,br1,hh1,#Blue)
;oder
Api_Farbverlauf(dc1,br1,hh1,#Blue,#Red)
dcSource = CreateCompatibleDC_(dc)
SelectObject_(dcSource, bmpid)
;TransparentBlt_(dc1, 0,0, bmpbr, bmphh, dcSource, 0, 0, bmpbr, bmphh, farbe)
;oder etwas versetzt
TransparentBlt_(dc1, 0,20, bmpbr, bmphh, dcSource, 30, 0, bmpbr-30, bmphh, HgFarbe)
DeleteObject_(dcSource) ;wichtig ! wenn es nicht mehr gebraucht wird
StopDrawing()
ImageGadget(1,10,90, 0,0,id1)
;Window anzeigen
HideWindow(0,0)
Repeat: event = WaitWindowEvent()
If Event = #PB_Event_Gadget Or Event = #PB_Event_Menu
welcherButton=EventGadget()
Select welcherButton
Case 1: Debug "Button 1 gedrückt"
Case 2: Debug "Button 2 gedrückt"
EndSelect
EndIf
Until event = #PB_Event_CloseWindow
End