Android - шум в сохраненных изображениях - PullRequest
1 голос
/ 22 марта 2011

Мое приложение Android загружает изображения, выполняет некоторую обработку и сохраняет обработанные изображения на SD-карту. Я сохраняю временные файлы на SD-карту вместо использования буферов. Например, чтение фона, прокрутка изображения, рисование аннотации, объединение фона и аннотации в сохраненном временном файле для использования в качестве следующего фона и т. Д. Типичные фрагменты:

bitmap = Bitmap.createBitmap (imageSizeX, imageSizeY, Bitmap.Config.ARGB_8888);

bitmap = BitmapFactory.decodeFile (путь, параметры);

bitmap.compress (Bitmap.CompressFormat.JPEG, 100, вывод);

Все работает нормально, но в некоторых случаях сохраненные изображения добавляют шум, подобный описанному в этом посте: Изменение размера и вращение растрового изображения: линейный шум

Автор цитируемой статьи решил проблему с помощью подвыборки, но я не хочу этого делать.

Я попробовал решения, предложенные здесь: http://www.curious -creature.org / 2010/12 / 08 / растровый качества полосатость-и-размывания / # более-1218 что, если я правильно понимаю, должно быть достигнуто путем установки: . GetWindow () SetFormat (PixelFormat.TRANSLUCENT); форсировать 32 бита.

который не сильно меняется. Установка или не установка флага дизеринга, похоже, тоже не сильно изменится. Есть еще идеи?

1 Ответ

0 голосов
/ 23 марта 2011

В ответ на мой собственный вопрос: Шум исчезает, или, по крайней мере, результат намного лучше, если сжать до .png вместо .jpg

bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);

То же небо, которое выглядит как текстура ковра в .jpg, выглядит гладким и чистым в .png. Поскольку разница гораздо более очевидна, чем обычная разница между тем же изображением, сжатым в .png и .jpg, я думаю, это зависит от реализации Android. Установка явным образом TRANSLUCENT и DITHER не имеет большого значения, так или иначе.

...