wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von udg »

Edit
Zuletzt geändert von udg am 19.12.2013 19:14, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von udg »

Edit
Zuletzt geändert von udg am 19.12.2013 19:14, insgesamt 1-mal geändert.
PB v5.43 LTS + v6.02 LTS | Windows 7 x86 + 11 x64 - Gforce RTX 4090 - AMD Ryzen 9 5900X 12-Core Processor 4.2 GHz - 64,0 GB RAM,
ASUSTEK TUF Gaming X570 Plus
ASUS ROG Thor-1200P Platinum (1200W, Aura Sync, OLED Display, 0dB-Cooling)
1x 1 TByte Samsung MZ-V7S500BW 970 EVO Plus 1 TB NVMe M.2 Internal SSD
1x 2 TByte Samsung MZ-V7S2T0BW 970 EVO Plus 2 TB NVMe M.2 Internal SSD
von BiSONTE!. Kauft Hardware gern bei ihm.
Monitor:
LG 38GL950G-B 95 (38 Zoll) Ultragear Curved 21: 9 UltraWide QHD IPS
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten