Как создать изображение JPEG с прогрессивной разверткой на Android

Мне нужно было отправлять изображения по оченьнизкой пропускной способности соединение с телефона Android (до 10 кбайт/с) и хотел бы отправить их в прогрессивном (чересстрочном) режиме, чтобы пользователь на другом конце начал видеть изображение уже во время длительной передачи.Прямо сейчас я создаю изображение с помощью обычного приложения для работы с фотографиями:

Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

Но это создает непрогрессивныефотографии, и я не смог найти, как убедить его поступить иначе. Насколько я мог определить, второй вариант, который я исследовал (чтение и повторное сжатие снятого изображения), был сорван, потому что метод сжатия растрового изображения не допускает никаких параметров кодирования, кроме имени формата и коэффициента сжатия:

bitmap.compress(Bitmap. CompressFormat.JPEG, 80, вне);

Я предпочел бы указать приложению для работы с фотографиями сохранять в прогрессивном режиме.

Следующим лучшим вариантом был бы алгоритм Java, который без потерь преобразует сохраненный jpeg в прогрессивный (jpegtran делает это в Linux, но это на C и полагается на libjepeg).

Следующим лучшим вариантом был бы способ указания соответствующих параметров кодирования для Android, позволяющий повторно сжимать его, или альтернативная библиотека Java, которая делает то же самое.

Дальнейшие исследования показали, что алгоритмы уже существуют ( /system/lib/libjpeg.so) с исходниками в ~/android-sdk-linux/source-tree/external/jpeg -- но, похоже, нет готовых оболочек JNI.

8
задан Ivin 19 June 2012 в 12:19
поделиться