Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 15.12.2013 10:00
Auch auf die Gefahr hin, das Du mich wieder überliest... Lese mein Posting oder füge mal in die erste Zeile ein EnableExplicit ein....
Vielleicht kannst du dann mein Geschriebenes nachvollziehen...
Edit :
btw. : Netter Code Stargate
Ich hatte sowas immer mit Farbe wegschneiden (#LWA_COLOR) gemacht, allerdings meist mit Rändern l
Vielleicht kannst du dann mein Geschriebenes nachvollziehen...
Edit :
Code: Alles auswählen
EnableExplicit
UsePNGImageDecoder()
Enumeration
#window_0
EndEnumeration
DataSection
pic_1_Start:
IncludeBinary "splash.png"
pic_1_End:
EndDataSection
Procedure WindowBackground(Window.i, Image.i)
Protected WindowID.i = WindowID(0)
Protected ImageID.i = ImageID(Image)
Protected HDC.i = CreateCompatibleDC_(#Null)
Protected Object.i = SelectObject_(HDC, ImageID)
Protected Size.Size
Size\cx = ImageWidth(Image)
Size\cy = ImageHeight(Image)
Protected Point.Point
Protected Blend.BLENDFUNCTION
Blend\SourceConstantAlpha = 255
Blend\AlphaFormat = 1
SetWindowLong_(WindowID, #GWL_EXSTYLE, GetWindowLong_(WindowID, #GWL_EXSTYLE) | #WS_EX_LAYERED)
UpdateLayeredWindow_(WindowID, 0, 0, @Size, HDC, @Point, 0, @Blend, 2)
SelectObject_(HDC, Object)
DeleteDC_(HDC)
EndProcedure
Define pic_1 ; Das PNG Bild
Define pic_2 ; Das Bild auf dem gezeichnet wird
OpenWindow(#Window_0, 0, 0, 420, 520, "Screen", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
; Man muss den Variablen Werte zuweisen
pic_1 = CatchImage(#PB_Any, ?Pic_1_Start, ?Pic_1_End - ?Pic_1_Start) ; PNG aus Datasection holen
pic_2 = CreateImage(#PB_Any,887,520,32,#PB_Image_Transparent) ; Bild 2 erstellen
; Beginne Malerei
If StartDrawing(ImageOutput(pic_2)) ; <- auf unser Zeichenbrett pinseln
DrawAlphaImage(ImageID(pic_1),0,0,255) ; PNG Bild auf unser Zeichenbrett malen (Es ist ein PNG mit A L P H A !)
DrawingMode(#PB_2DDrawing_AlphaBlend) ; Spielkram
RoundBox(262,12,120,40,9,9,RGBA(255,255,255,255))
DrawingMode(#PB_2DDrawing_AlphaBlend|#PB_2DDrawing_Transparent)
DrawText(270, 16, "Aaaah", RGBA(0,0,0,255))
DrawText(270, 16 + TextHeight("M"), "so geht das !", RGBA(0,0,0,255))
StopDrawing()
EndIf
WindowBackground(#window_0, pic_2) ; Unser Zeichenbrett ist fertig also als Hintergrund verwenden.
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow ; Die obligatorische Eventloop, sonst sehn wir ja nix...
