wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von udg »

wie kann ich ein "Alpha PNG" darstellen ohne "Fenster Rahmen".
Den Code für ein transparentes Fenster (durchsichtig und ohne Rahmen habe ich geschrieben)

Code: Alles auswählen

WORKING CODE @ LAST PAGE
aber sobald ich ein Logo reinlade, habe ich jedes mal ein schwarzes Fenster. Es entsteht einfach kein Splashscreen.
ich habe schon andere Splashscreens erstellt, jedoch mit "ellen langem" Code, dieser ist in meinem nachfolgendem Vorhaben auch nicht brauchbar.

Hintergrund der Frage:
Ich programmiere gerade einen Farbrausch V2M Windows Player (ähnlich dem Winamp) ---> alles fertig.

Nun möchte ich das Programm jedoch mit einem grafischen Interface und diversen Schnickschnack versehen und möchte dies mit all meinen PNG's erledigen.

Ein einfacher Code wie ich ein transparentes PNG realisiere, in dem ich dann weiter auch meine Buttons und Co. einarbeiten kann wäre sehr nett.

2. Frage

ich möchte in meinem V2M Player den Dateinamen des Songs anzeigen lassen. Dies tut es auch. Jedoch wird erweitert dazu immer der komplette Pfad zum Ort der Datei angezeigt.
Wie kann ich dies unterbinden, dass ich nur den Dateinamen angezeigt bekomme?

Ich bin für jede Hilfe dankbar und werde Euch in den Credits erwähnen.
Grüße
Zuletzt geändert von udg am 19.12.2013 19:05, insgesamt 3-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
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 hat geschrieben:2. Frage

ich möchte in meinem V2M Player den Dateinamen des Songs anzeigen lassen. Dies tut es auch. Jedoch wird erweitert dazu immer der komplette Pfad zum Ort der Datei angezeigt.
Wie kann ich dies unterbinden, dass ich nur den Dateinamen angezeigt bekomme?
Mit GetFilePart() kannst du den Dateinamen anzeigen.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von STARGÅTE »

Ich benutze diese Procedure hier

Code: Alles auswählen

Procedure WindowBackground(Window.i, Image.i)
	.i
	Protected WindowID.i = WindowID(Window)
	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
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
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 hat geschrieben:Mit GetFilePart() kannst du den Dateinamen anzeigen.
Danke wiedermal für Deine schnelle und tolle Hilfe. Habs eingebaut :)

Es wird Zeit dass ich die ganzen Befehle einmal durchacker. Das meiste kenne ich leider noch nicht.
Zuletzt geändert von udg am 17.12.2013 21:08, insgesamt 2-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
udg
Beiträge: 566
Registriert: 20.06.2013 23:27

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von udg »

STARGÅTE hat geschrieben:Ich benutze diese Procedure hier

Code: Alles auswählen

Procedure WindowBackground(Window.i, Image.i)
	.i
	Protected WindowID.i = WindowID(Window)
	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
mit dieser Prozedur (fast identisch) habe ich meinen Maus Splashscreen, siehe Oben geschrieben.

Kann ich denn in diesem Code mehrere Image ID's vergeben? Dann könnte ich den Code, ja doch nutzen. Bei meiner Fummelei habe ich immer nur ein Bild darstellen können :(
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 »

Einfach mit CreateImage ein neues Bild erstellen, dann das eine Bild dort malen, dann das andere und die ID
des neuen Bildes übergeben.
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 »

Hallo,
leider stellt es mir kein Bild, Rahmenlos dar wie meinen oben gezeigten Splashscreen( da habe ich einen Anderen Code benutzt).
In meinem Player möchte ich nun alles mit mehreren Grafiken aufhübschen und dann funktioniert mein Splashscreen code leider nicht :(
Wo habe ich hier einen Fehler ich probier und probier aber bekomme mit dieser Vorgehensweise einfach kein Bild angezeigt? :oops:
FEHLER: The specified ImageID is null
mein Bild wird also nicht geladen.

PNG Alpha Bild hier:
Bild

Code: Alles auswählen

WORKING CODE @ LAST PAGE
Danke für Hilfe
Grüße
Zuletzt geändert von udg am 19.12.2013 19:09, 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
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von STARGÅTE »

Bei DrawImage bitte:
DrawImage(ImageID(), ...) nutzen
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster

Beitrag von Bisonte »

da ist eine ganze Menge verrissen.

Wenn du am Ende

Code: Alles auswählen

 OpenWindow(#Window_0, 0, 0, 887, 512, "Screen", #PB_Window_ScreenCentered|#PB_Window_BorderLess)
 
 pic_1 = CatchImage(#PB_Any, ?Pic_1_Start, ?Pic_1_End - ?Pic_1_Start)
 WindowBackground(#window_0, pic_1)
 Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow 
benutzt, wird es auch lauffähig und man sieht das was du, so schätze ich, als Ergebnis erwartet hast...

Deine Fehler unter anderem :

DrawImage wird mit ImageID und nicht mit Imagenummer benutzt (aber ich hab es mal hier nicht benutzt...)

- Der Variablen pic_1 war kein Wert zugewiesen.
- du hast pic eins aus der DataSection geholt und gleich in der nächsten Zeile wieder überschrieben...
- und du hast vergessen die WindowBackground Funktion aufzurufen...

so mal eben auf die schnelle gesehen...
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 »

STARGÅTE hat geschrieben:Bei DrawImage bitte:
DrawImage(ImageID(), ...) nutzen
Danke, habe ich eingefügt und kann mein Bild anzeigen lassen. Jedoch habe ich festgestellt, dass ich nun meinen Code nur
reproduzierte, den ich bereits verwende in meinem anderen Vorhaben. Soll heißen, der Splash Screen funktioniert, hatte er aber schon.

Nun zum überarbeiteten Code:

Include Binary hier: Bild

Code: Alles auswählen

WORKING CODE @ LAST PAGE
Ich habe wie bereits erwähnt vor, meine Oberfläche für den Sound Player mit PNG Grafiken auszubauen. In einem anderen Programmchen,
ein NFO Demo hier: http://rapidshare.com/share/F659442AAB0 ... 522C4DDB95 benutze ich die MP3D Lib.
Windows OS only und DX9c latest nötig.
Hier kann ich bequem meine PNG Alpha-Sprites aufrufen und beliebig auf dem Fenster platzieren. So wie ich es haben will.
Leider konnte ich bisher nicht rausfinden wie ich ebenfalls ein transparentes Fenster darstelle sodass ich davon ablies und das
Ganze in PB normal realisieren will. Immerhin bekomme ich ja einen Splash Screen hin :)

Jemand einen weiteren Tipp?

Danke Euch
Zuletzt geändert von udg am 19.12.2013 19:12, 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
Antworten