# PNG pixelweise/blockweise speichern?



## anonymerBesuch (25. Jun 2011)

Hallo zusammen,

ich habe in meinem Programm einen Algorithmus implementiert, der ein eingelesenes PNG-Bild mehr oder weniger pixelweise bearbeitet und anschließend wieder in ein PNG zurückschreibt.

Bisher habe ich es so gemacht, dass ich das Bild zuerst in ein BufferedImage einlese, darüber den Algorithmus laufen lasse und zum Schluss mit ImageIO.write(_meinBufferedImage_, "png", _dieAusgabedatei_) speichere, also alle Schritte hintereinander durchführe.

Um die Geschwindigkeit zu erhöhen,habe mir überlegt, ob man stattdessen schon mit der PNG-Kompression und -speicherung der bearbeiteten Pixel beginnen könnte (etwa in einem zweiten Thread), während das Bild noch nicht vollständig konvertiert ist.

Ist dies mit der PNG-Kompressionstechnik überhaupt möglich (wenn dem Kompressor das gesamte Bild bekannt sein muss, wird es wohl nicht funktionieren) und wenn ja, wie kann man es in Java realisieren?

Vielen Dank für eure Hilfe!


----------



## Firephoenix (25. Jun 2011)

Hi,
.png verwendet deflate als Komprimierung, und zumindest für den Huffmann-Teil der Komprimierung muss dir der gesamte Datensatz bekannt sein.
Ich denke es würde eher sinn machen, wenn du das bearbeiten des Bildes auf Threads aufspaltest, z.b. so, dass du das Bild zuerst in 4 kleine Bilder aufteilst, dann jedes mit einem eigenem Thread bearbeitest und am Ende die fertigen Bilder wieder zu einem zusammensetzt wenn alles durchgelaufen ist.
Ob man dabei durch das unterteilen aber nicht mehr Performance verliert, als man durch das Threading gewinnt kann ich nicht sagen  - ausprobieren 
Gruß


----------



## anonymerBesuch (25. Jun 2011)

Schade...
Eine Parallelisierung des Algorithmus hatte ich mir auch schon überlegt (werde ich wohl jetzt auch durchsetzen), ich hatte mir vom parallelen Komprimieren bloß noch mehr Performance erhofft, da der Algorithmus etwas schneller als die Kompression läuft.
Trotzdem vielen Dank für die schnelle Antwort


----------

