Android Camera Preview портит вывод изображения на G2?

Я использую Android Camera а также SurfaceView показать изображение предварительного просмотра пользователю перед съемкой. Это выглядит нормально на экране, но когда я делаю снимок, полученный jpg искажается (горизонтальные линии).

В качестве отправной точки я использовал пример камеры / рисунка Марка Мерфи, который демонстрирует ту же проблему на G2.

Параметры камеры:

Размер превью: 800x480

формат изображения: JPEG

Оба параметра поддерживаются в соответствии с getSupportedPreviewSizes() а также getSupportedPictureFormats()

Nexus One с экраном одинакового размера корректно работает с теми же параметрами.

G2 работает правильно при установке размера предварительного просмотра 640x480

Мой вопрос: кто-нибудь еще сталкивался с этой проблемой раньше (поврежденное изображение, несмотря на использование поддерживаемых настроек)? Как часто это? Как вы обошли это?

1 ответ

До сих пор у меня была та же проблема, и теперь мне удается исправить мою, используя

setPictureFormat(ImageFormat.JPEG);

Настройки параметров камеры.

Совсем недавно выяснилось, что по умолчанию для камеры выводится изображение YUV. Вот почему он отлично показывает при предпросмотре, но как только снимок сделан, вы получите зеленый, розовый или поврежденный вывод изображения. Это значения ImageFormat, которые может поддерживать камера.

JPEG = 256;
NV16 = 16;
NV21 = 17;
RAW10 = 37;
RAW_SENSOR = 32;
RGB_565 = 4;
UNKNOWN = 0;
YUV_420_888 = 35;
YUY2 = 20;
YV12 = 842094169;

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

Это просто примеры изображений, снятых с использованием ImageFormat YUV и сохраняющих его в формате JPEG.

Но в любом случае, если вы не хотите изменять ImageFormat и, следовательно, сохранять настройки в формате YUV, вам может понадобиться сохранить изображение в этом временном решении:

Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getPreviewSize();
YuvImage image = new YuvImage(data, parameters.getPreviewFormat(),
                    size.width, size.height, null);
File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "YuvImage.jpg");
FileOutptStream filecon = new FileOutputStream(file);
image.compressToJpeg(new Rect(0, 0, image.getWidth(), image.getHeight()), 90,
                    filecon);
Другие вопросы по тегам