Seite 1 von 1
PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 10:40
von double7
Hallo,
ich habe einen screen, auf dem ich lustig zeichnen kann. Läuft alles super.
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 ?
Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 10:56
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.
Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 11:03
von double7
Danke für die schnelle Antwort.
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.

Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 11:13
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.
Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 11:53
von double7
Zur Verdeutlichung meines Vorhabens ein Beispiel:
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.
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...

Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 12:50
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)
Re: PNG Grafik mit transparenz speichern
Verfasst: 22.07.2011 15:35
von double7

Bingo
Mit dem Wechsel von Sprite auf Image konnte ich die gewollten Sachen umsetzen.
Vielen Dank für die gute Hilfe
