Seite 3 von 3

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 18.12.2013 08:19
von Chimorin
@inc:

http://www.purebasic.fr/german/viewtopi ... hilit=MP3D
http://www.purebasic.fr/english/viewtop ... hilit=MP3D

Frag mal DrShrek. Da könnte man ja zwei Dinge mit einer Klappe schlagen.

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 18.12.2013 21:18
von udg
Habe mich mit MPZ schon unterhalten. Er sagt, es sei nicht möglich auf einen 3D DX Screen Transparenz darzustellen. Er wäre froh wenn einer das hinbekäme und würde dies dann sofort aufnehmen in die LIB.

Wie auch immer. Im Moment habe ich meinen Player soweit, dass ich so viele PNGs anzeigen kann wie ich möchte. Das ganze Fensterlos und so wie ich es wollte.

Nun muss ich die Gatgeds noch dazu bringen, dass sie ebenfalls auf einem PNG angezeigt werden denn ich muss für diverse Grafiken die einen Button darstellen eine Funktion damit verbinden.

Dies tun sie im moment noch nicht.

Grüße

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 19.12.2013 19:20
von udg
mehrere PNG Alpha Transparente Bilder ohne Fenster

Code: Alles auswählen

UsePNGImageDecoder()
EnableExplicit
Enumeration
  #window_0
EndEnumeration
;Images
DataSection
       pic_1_Start:
IncludeBinary "your_picture.png" 
       pic_1_End:
EndDataSection
            
DataSection
       MyData1:
IncludeBinary "your_picture.png" 
       EndOfMyData1:
EndDataSection

DataSection
       MyData2:
IncludeBinary "your_picture.png" 
       EndOfMyData2:
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    ; PNG Bild
Define pic_2    ; Bild auf dem gezeichnet wird
Define sprite_1 ; PNG Bild 2
Define sprite_2 ; Bild 2 auf dem gezeichnet wird
Define exit_1 ; PNG Bild 3
Define exit_2 ; Bild  3 auf dem gezeichnet wird
Define.l Event, EventWindow, EventGadget, EventType, EventMenu
OpenWindow(0, 0, 0, 887, 520, "Fenster", #PB_Window_BorderLess | #PB_Window_ScreenCentered );| #PB_Window_Invisible)

Sprite_1 = CatchImage(#PB_Any, ?MyData1, ?EndOfMyData1 - ?MyData1)    ; Logo aus dem Speicher laden
Sprite_2 = CreateImage(#PB_Any,887,300,32|#PB_Image_Transparent)      ; Bild 2 erstellen
exit_1 = CatchImage(#PB_Any, ?MyData2, ?EndOfMyData2 - ?MyData2)        ; Logo aus dem Speicher laden
exit_2 = CreateImage(#PB_Any,50,50,32|#PB_Image_Transparent)          ; Bild 3 erstellen
pic_1 = CatchImage(#PB_Any, ?Pic_1_Start, ?Pic_1_End - ?Pic_1_Start)  ; Logo aus dem Speicher laden
pic_2 = CreateImage(#PB_Any,887,520,32|#PB_Image_Transparent)         ; Bild 1 erstellen              
              
If StartDrawing(ImageOutput(pic_2))                                   
   DrawAlphaImage(ImageID(pic_1),0,0,255)                             ; PNG Bild 1 
   DrawAlphaImage(ImageID(Sprite_1),0,150,255)                        ; PNG Bild 2
   DrawAlphaImage(ImageID(exit_1),800,0,255)                        ; PNG Bild 3   
   StopDrawing()
EndIf
  WindowBackground(#window_0, pic_2) ; PNG 2 als Hintergrund verwenden.
Repeat

; Catch Screen with left Mouse Button
   Select WaitWindowEvent()
              Case #WM_LBUTTONDOWN
              SendMessage_(WindowID(0), #WM_NCLBUTTONDOWN, #HTCAPTION, 0)
              Case 258 
              Break
          EndSelect
          Select Event
  EndSelect
Until event = #PB_Event_CloseWindow