2013-06-03 9 views
17

Ich habe mit Android Bitmaps ein wenig gespielt und herausgefunden, dass PNG-Komprimierung viel mehr Zeit in Anspruch nimmt als selbst JPEG-Qualität. Viel viel mehr. Auf meinem Gerät kann es gegen 1 ungefähr 10 Sekunden sein.Warum ist die PNG-Komprimierung bei Android so viel langsamer als JPEG?

AFAIK, PNG ist im Grunde gefilterte Zeichenketten komprimiert mit deflate. Nun, es könnte zeitaufwendig sein, den besten Filter für jeden String zu finden, aber es kann ein Kompromiss zwischen Geschwindigkeit und Kompressionseffektivität bestehen. Es sollte nicht so langsam wie JPEG sein. Wie kommt es?

Vielleicht ist es andersherum. Gibt es eine ultraschnelle JPEG-Implementierung auf Android?

UPDATE: Ich wirklich nur Dinge wie

mBitmap.compress(CompressFormat.JPEG, 100, stream); 

und

mBitmap.compress(CompressFormat.PNG, 100, stream); 
+1

Sie sollten einen Code eingeben, um zu zeigen, wie Sie komprimieren. –

+21

JPEG kann hardwarebeschleunigt werden, PNG wird immer in Software ausgeführt. JPEG benötigt eine konstante Verarbeitungszeit. 90 +% der Zeit, die PNG kodiert und decodiert wird, wird im Flatecodec verbracht. Die Filterung nimmt eine triviale Menge an Zeit in Anspruch. Das Deflationieren auf der höchsten Qualitätsstufe dauert lange, da es mehrere Methoden versucht, um die beste Komprimierung zu erhalten. – BitBank

+0

Tatsächlich unterstützt Skia JPEG-Hardwarebeschleunigung. Ich sollte dann meinen Code auf einem Emulator überprüfen. Wenn die Performance-Lücke sinkt, dann muss es sein. – akalenuk

Antwort

5

ich mein Projekt auf Emulator mit vielen größeren Bildern und obwohl PNG Kompression getestet habe, war etwas langsamer, gibt es keine drastischer Unterschied in der Leistung. Daher sollte es an der Hardwarebeschleunigung liegen, wie von BitBank im Kommentar gesagt.