2013-06-03 9 views
17

Trochę bawiłem się bitmapami z Androidem i przekonałem się, że kompresja PNG zajmuje znacznie więcej czasu niż najwyższej jakości JPEG. O wiele wiele więcej. Na moim urządzeniu może to być z grubsza do 10 sekund w stosunku do 1.Dlaczego kompresja PNG jest znacznie wolniejsza niż JPEG na Androida?

AFAIK, PNG to w zasadzie filtrowane ciągi pikseli skompresowanych za pomocą deflate. Cóż, znalezienie najlepszego filtra dla każdego ciągu może być czasochłonnym zadaniem, ale może być ustalony kompromis pomiędzy skutecznością szybkości i kompresji. Nie powinno to być wolniejsze niż JPEG. Jak to możliwe?

Może jest na odwrót. Czy jest trochę ultraszybkiej implementacji JPEG na Androida?

UPDATE: I naprawdę tylko zrobić takie rzeczy jak

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

i

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

Powinieneś umieścić kod, aby pokazać, jak kompresujesz. –

+21

JPEG można przyspieszać sprzętowo, PNG jest zawsze wykonywane w oprogramowaniu. JPEG zajmuje stały czas do przetworzenia. 90 +% czasu kodowania i dekodowania PNG spędza w kodeka flidowym. Filtrowanie zajmuje mało czasu. Deflowanie na najwyższym poziomie jakości zajmuje dużo czasu, ponieważ próbuje wielu metod, aby uzyskać najlepszą kompresję. – BitBank

+0

W rzeczywistości Skia obsługuje akcelerację sprzętową JPEG. Powinienem wtedy sprawdzić mój kod na emulatorze. Jeśli luka wydajności obniży się, to musi być to. – akalenuk

Odpowiedz

5

Przetestowałem mojego projektu na emulatorze z dużo większych obrazów i choć kompresja PNG była trochę wolniej, nie było drastyczna różnica w wydajności. Dlatego powinno to być spowodowane akceleracją sprzętową, o czym wspomina BitBank w komentarzu.