Seite 2 von 3

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 15.12.2013 10:00
von Bisonte
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 :

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...
btw. : Netter Code Stargate :allright: Ich hatte sowas immer mit Farbe wegschneiden (#LWA_COLOR) gemacht, allerdings meist mit Rändern l

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 15.12.2013 19:38
von udg
Bisonte hat geschrieben: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...
Ich überlese Deine Beiträge nicht. Jedoch hatte ich laut deiner vorherigen Antwort den Befehl: WindowBackground(#window_0, pic_2) bereits in einer anderen Sache verwendet und dies funktioniert ja bestens. Darum bin ich nicht weiter darauf eingegenagen.
Es ist ja mega umständlich ein Bild darzustellen und wieviel Zeilen man schreiben muss damit man letztendlich ein Bild zu Gesicht bekommt :D
Aber nachvollziehbar.

Zu Deinem Beispiel:
Leider kann ich Deinen Code nicht ausführen und testen ob ich damit nun weiterarbeiten kann.
in Zeile 42 bekomme ich folgenden Fehler: CreateImage(): Incorrect number of parameters.

Wenn ich :#PB_Image_Transparent) ausklammere zeichnet es mir das Bild jedoch mit schwarzen Hintergrund der nicht mehr Transparent dargestellt wird.

Meine Version: PB 4.61 unter Windows
EnableExplicit habe ich jetzt eingebunden.

Viele Grüße

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 15.12.2013 19:42
von RSBasic
@inc
Das liegt daran, dass in der neueren Version ein Parameter dazugekommen ist. Man hat nun die Möglichkeit, die Hintergrundfarbe schon beim Erstellen der Grafik festzulegen.
Wenn du die neuste Version nutzt, dann hast du das Problem nicht mehr. Also schnell updaten. :allright:

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 15.12.2013 23:03
von Danilo
inc hat geschrieben:Wenn ich :#PB_Image_Transparent) ausklammere zeichnet es mir das Bild jedoch mit schwarzen Hintergrund der nicht mehr Transparent dargestellt wird.

Meine Version: PB 4.61 unter Windows
Ändere mal das Komma in '|' (binäres Or):

Code: Alles auswählen

CreateImage(#PB_Any,887,520,32|#PB_Image_Transparent)

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 16.12.2013 23:04
von udg
@RSBasic
danke für die Info. Dann kann ich lange rumprobieren. Mal schauen, dass ich mir das Update zu Weihnachten schenken lasse :)

Nun habe ich wieder rumprobiert aber wie bekomme ich jetzt weitere PNG Bilder auf das bereits gezeigte Bild? ebenfalls transparent.

In der MP3D Lib geht das einfach mit folgendem Befehlen:

Code: Alles auswählen

DataSection
  MyData1:
    IncludeBinary "pic_1.png"
  EndOfMyData1:
EndDataSection

OpenWindow(#Window_0, 0, 0, 420, 520, "Screen", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
 MP_ScreenToHandle(WindowID(0))
 Sprite_1 = MP_CatchSprite(?MyData1, ?EndOfMyData1 - ?MyData1) ; Logo aus dem Speicher laden

While Not MP_KeyDown(#PB_Key_Escape) And Not WindowEvent() = #PB_Event_CloseWindow; Esc abfrage oder Windows Schliessen
 MP_DrawSprite(Sprite_2, 384, 0)   ; Bild, x,y
 MP_RenderWorld() ; Erstelle die Welt
 MP_Flip ()       ; Stelle Sie dar
WEnd
Leider kann ich in dem Beispiel keine transparenten Fenster darstellen, da MP3D Lib auf ein DX9 Fenster zeichnet und keine
Transparenz möglich ist.

Ich brauche doch jetzt ebenfalls die normale PB Sprite Prozedur richtig? und kann ich dann den Befehl:
WindowBackground(#window_0, pic_2) weiter verwenden zum darstellen aller Grafiken?

Fragen über Fragen.
Ich möchte gern den Player fertig machen, jedoch komme ich nicht weiter da ich an der Grafikoberfläche scheitere :(

Könnte mir jmd. einmal ein Beispiel mit 2 Bildern anhand meines geposteten Codes zeigen?

Danke Euch --> ver2fel :S

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 16.12.2013 23:25
von ts-soft
inc hat geschrieben:@RSBasic
danke für die Info. Dann kann ich lange rumprobieren. Mal schauen, dass ich mir das Update zu Weihnachten schenken lasse :)
Wenn Du PB4.61 legal erworben hast, hast Du auch einen Account und kannst kostenlos auf die aktuelle Version
updaten.
Falls Deine Eltern PB für Dich erworben haben, solltest Du diese mal danach fragen. Alle, die letzten Jahre
(naja, die komischen CD-Versionen sollten wohl endgültig verschwunden sein :mrgreen: ) erschienenen
Versionen sind kostenlos Update-Berechtigt bis es kein PB mehr gibt oder mind. 30 Jahre.

Gruß
Thomas

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 17.12.2013 00:33
von udg
Edit

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 17.12.2013 02:46
von ts-soft
Dann solltest Du aber wirklich mit der Demo arbeiten, bzw. Dir schnellstens eine Version Kaufen oder zu Weihnachten schenken lassen.

Leider hast Du Dich selbst verraten, aber so etwas geht sowieso meist nach hinten los.

Schon der erste Code von Dir in diesem Thread wird mit der Demo nicht funktionieren!

Ich hoffe mal, das Du diesen Zustand schnellstens änderst, ansonsten kann Deiner letzten Bitte leider
nicht entsprochen werden.

Gruß
Thomas

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 17.12.2013 21:14
von udg
Edit

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Verfasst: 17.12.2013 21:30
von ts-soft
inc hat geschrieben:und dann beweise ich wie? dass ich PB gekauft habe?
Das brauchst Du nicht, das Gegenteil würde sowieso irgendwann auffliegen :wink: