Seite 1 von 3
wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 20:32
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)
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
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 20:37
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.
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 20:48
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
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 20:49
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.
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 20:52
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

Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 11.12.2013 21:08
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.
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 14.12.2013 07:57
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?
FEHLER: The specified ImageID is null
mein Bild wird also nicht geladen.
PNG Alpha Bild hier:
Danke für Hilfe
Grüße
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 14.12.2013 12:21
von STARGÅTE
Bei DrawImage bitte:
DrawImage(ImageID(), ...) nutzen
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 14.12.2013 18:50
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...
Re: wie PNG Bild mit Alpha Kanal in Rahmenlosem Fenster
Verfasst: 14.12.2013 23:46
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:
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