Tranparentes Fenster und Alphablending
- Deluxe0321
- Beiträge: 336
- Registriert: 19.05.2006 00:31
- Kontaktdaten:
@hoto
Habe mir das selbst heute auch nochmal angesehen. Die Structure
"BLENDFUNCTION" bietet noch einige Einstellungsmöglichkeiten.
Kannst du dir ja mal ansehen. MSDN dürfte weiterhelfen.
Das beste wäre jedoch wenn du im englischen Board nach Codes von
netmaestro suchst. Ich erinnere mich dort eine Procedure mit Beispielen
gesehen zu haben mit denen man die transparenten Farben ändern, bzw.
einiges einstellen (dazu zählt auch helligkeit und co.) konnte um das
IMG/Bitmap als PNG zu speichern.
Ich habe auch noch ein paar Probleme festgestellt. Wenn man z.b. einen
"Skin" mit auf diesem Wege erstellen will und einige Bereiche selbst
Zeichen muss, werden nur die geladenen Bilder, nicht die selbst
gezeichneten angezeigt, bzw. durchsichtig angezeigt.
Gruß Marvin
Habe mir das selbst heute auch nochmal angesehen. Die Structure
"BLENDFUNCTION" bietet noch einige Einstellungsmöglichkeiten.
Kannst du dir ja mal ansehen. MSDN dürfte weiterhelfen.
Das beste wäre jedoch wenn du im englischen Board nach Codes von
netmaestro suchst. Ich erinnere mich dort eine Procedure mit Beispielen
gesehen zu haben mit denen man die transparenten Farben ändern, bzw.
einiges einstellen (dazu zählt auch helligkeit und co.) konnte um das
IMG/Bitmap als PNG zu speichern.
Ich habe auch noch ein paar Probleme festgestellt. Wenn man z.b. einen
"Skin" mit auf diesem Wege erstellen will und einige Bereiche selbst
Zeichen muss, werden nur die geladenen Bilder, nicht die selbst
gezeichneten angezeigt, bzw. durchsichtig angezeigt.
Gruß Marvin
Problem hat sich inzwischen komplett erledigt...
Typisch, dass ich Stunden lang nach einer Lösung suche und dann beim ignorieren und weiter programmieren auf die einfachste Lösung überhaupt komme...
Wieso lade ich die Bilder per GDI+ rein, schreibe sie dann in ein PB Image, nur um sie dann zum resizen und anzeigen wieder in ein GDI+ Bitmap umzuwandeln? Eben, Schwachsinn. Daher flog der PB Image Teil nun raus, nicht nur das der Code nun erheblich kleiner wurde, auch sämtliche Probleme sind verschwunden, denn den Befehl, der für den Ärger mit den zu dunklen Bildern sorgte, brauch ich nun nicht mehr.
Nächstes mal code ich direkt weiter, schreib das Problem direkt ins Forum und ignoriere das Problem dann erst mal bis das Programm selbst soweit steht und ich einen besseren Überblick habe.

Wieso lade ich die Bilder per GDI+ rein, schreibe sie dann in ein PB Image, nur um sie dann zum resizen und anzeigen wieder in ein GDI+ Bitmap umzuwandeln? Eben, Schwachsinn. Daher flog der PB Image Teil nun raus, nicht nur das der Code nun erheblich kleiner wurde, auch sämtliche Probleme sind verschwunden, denn den Befehl, der für den Ärger mit den zu dunklen Bildern sorgte, brauch ich nun nicht mehr.

Nächstes mal code ich direkt weiter, schreib das Problem direkt ins Forum und ignoriere das Problem dann erst mal bis das Programm selbst soweit steht und ich einen besseren Überblick habe.

Eine neue Funktion zum reinladen gibts nicht mehr, da das umstellen die komplette Procedure überflüssig machte. Das Ganze sieht jetzt einfach so aus:
Der Code ist so allein natürlich nicht lauffähig, da fehlt ein GDI+ Wrapper samt GDI+ Initialisierung, dazu findet man aber schon genug in den PB Foren.
Sollte man eigentlich vor einem CreateImage prüfen ob das Bild bereits existiert oder überschreibt der Befehl sowieso dann komplett das bestehende Bild? Steht in der Hilfe leider nix drin.
Code: Alles auswählen
GdipCreateBitmapFromFile("bild1.png", @Image(1))
GdipCreateBitmapFromFile("bild2.png", @Image(2))
GdipCreateBitmapFromFile("bild3.png", @Image(3))
Procedure drawnew()
CreateImage(0,WindowWidth,WindowHeight,32)
hdc = StartDrawing(ImageOutput(0))
GdipCreateFromHDC( hdc, @*gfx )
GdipDrawImage(*gfx, Image(1), 0, 0)
GdipDrawImage(*gfx, Image(2), 100, 0)
GdipDrawImage(*gfx, Image(3), 200, 0)
sz.SIZE
sz\cx = WindowWidth
sz\cy = WindowHeight
ContextOffset.POINT
BlendMode.BLENDFUNCTION
BlendMode\SourceConstantAlpha = 255
BlendMode\AlphaFormat = 1
UpdateLayeredWindow_(WindowID(0), 0, 0, @sz, hdc, @ContextOffset, 0, @BlendMode, 2)
StopDrawing()
EndProcedure
Sollte man eigentlich vor einem CreateImage prüfen ob das Bild bereits existiert oder überschreibt der Befehl sowieso dann komplett das bestehende Bild? Steht in der Hilfe leider nix drin.