PNG Grafik mit transparenz speichern

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

PNG Grafik mit transparenz speichern

Beitrag von double7 »

Hallo,

ich habe einen screen, auf dem ich lustig zeichnen kann. Läuft alles super. :D
Jetzt möchte ich jedoch den Inhalt als .png mit Transparenz abspeichern.

Meine Versuche mit usebuffer() und dann auf einem Sprite zeichnen gingen auf Grund der bekannten Probleme mit directX ins leere.
Mit grabsprite() / grabimage() kann ich zwar den Inhalt des Screens holen, jedoch mit Hintergrundfarbe und ohne Transparenz.

Es gibt doch sicherlich noch eine Alternative, oder? /:->
Kann mich jemand mal in die richtige Richtung schubsen ?
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: PNG Grafik mit transparenz speichern

Beitrag von Christian+ »

Kommt drauf an was du alles machen willst aber mit ImageOutput auf ein Image mit Transparentem Hintergrund zu Zeichen sollte das einfachste sein.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Re: PNG Grafik mit transparenz speichern

Beitrag von double7 »

Danke für die schnelle Antwort. :allright:
Mein Ziehl ist es mehrere 3dSprites mit Transparenz übereinander zu legen.
Kann ich Imageoutput auch mit 3DSprites verwenden?

Ich teste es am Besten gleich mal und geb dann Rückmeldung. <)
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: PNG Grafik mit transparenz speichern

Beitrag von Christian+ »

Das kommt drauf an was du mit deinen Sprite3D machst wenn du sieh drehst oder verzerrst wird es mit den Image befehlen nicht so leicht gehen. Aber Sprite3D anzeigen und dann wieder mit Transparenz zu speichern wüsste ich nicht wie man das umsetzen könnte. Geht es dir nur um die Transparenz dann kannst du mit den Image Befehlen die Bilder Laden und mit Transparenz übereinander legen.
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Re: PNG Grafik mit transparenz speichern

Beitrag von double7 »

Zur Verdeutlichung meines Vorhabens ein Beispiel: :D

Ich habe 5 3DSprites mit einer festen Größe.
Diese lade ich als png mit Transparenz ein, "lege" sie übereinander (teilweise mit halbtransparenz)
und zeige sie auf meinem windowed Screen an (hintergrundfarbe mit clearscreen auf #ffffff gesetzt).

Diese übereinander gelegten Sprites möchte ich wieder in eine png Datei haben, in der die Halbtransparenz (watermark effekt)
erhalten bleibt, also ohne den weissen Hintergrund. (Halbtransparentes PNG Image).

Theoretisch geht so etwas, bisher erstelle ich diese Bilder mit Gimp, will aber das ganze automatisieren (ohne Gimp Scripting)

Mit ImageOutput() kam ich gerade nicht weiter. :cry:

Ich werde mal weiter versuchen.
Bitmaps zum Beispiel kann ich mir ja direkt aus dem Speicher ziehen, möglicherweise komme ich über solche Umwege zum Ziel... :coderselixir:
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Christian+
Beiträge: 213
Registriert: 13.07.2008 10:05
Computerausstattung: Windows 8.1 Pro
AMD Phenom II X4 955 @ 3.2 GHz
4GB RAM
NVIDIA GeForce GTX 660

Re: PNG Grafik mit transparenz speichern

Beitrag von Christian+ »

Also wenn ich das richtig verstanden habe willst du so was in die Richtung machen. Du lädst 5 Bilder legst sie übereinander und speicherst dann das Ergebnis. Schau dir mal den Code an ich denke das geht dann in die Richtung und hilft vielleicht weiter.

Code: Alles auswählen

UsePNGImageDecoder()
UsePNGImageEncoder()

LoadImage(1, "test1.png")
LoadImage(2, "test2.png")
LoadImage(3, "test3.png")
LoadImage(4, "test4.png")
LoadImage(5, "test5.png")

CreateImage(0, ImageWidth(1), ImageHeight(1), 32|#PB_Image_Transparent)

StartDrawing(ImageOutput(0))

DrawingMode(#PB_2DDrawing_AlphaBlend)

DrawAlphaImage(ImageID(1), 0, 0, 255)
DrawAlphaImage(ImageID(2), 0, 0, 255)
DrawAlphaImage(ImageID(3), 0, 0, 100)
DrawAlphaImage(ImageID(4), 0, 0, 100)
DrawAlphaImage(ImageID(5), 0, 0, 100)

StopDrawing()

SaveImage(0, "test1-5.png", #PB_ImagePlugin_PNG)
Windows 8.1 Pro 64Bit | AMD Phenom II X4 955 @ 3.2 GHz | 4GB RAM | NVIDIA GeForce GTX 660
Benutzeravatar
double7
Beiträge: 55
Registriert: 20.09.2004 00:40
Kontaktdaten:

Re: PNG Grafik mit transparenz speichern

Beitrag von double7 »

:praise: Bingo

Mit dem Wechsel von Sprite auf Image konnte ich die gewollten Sachen umsetzen.
Vielen Dank für die gute Hilfe :allright:
[0d1n6 15 n07 @ j0b 17´5 |1f357y|3
Antworten