Android Camera Preview портит вывод изображения на G2? - PullRequest
0 голосов
/ 06 августа 2011

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

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

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

размер предварительного просмотра: 800x480

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

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

Nexus One, имеющий экран одинакового размера, работает правильно с теми же параметрами.

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

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

1 Ответ

0 голосов
/ 17 марта 2015

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

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.

http://i.stack.imgur.com/PlHFH.png

Это просто примеры изображений, снятых с использованием 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);
...