Как получить предварительный просмотр данных камеры 720p на Android? - PullRequest
9 голосов
/ 05 декабря 2011

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

Я создал класс Preview, расширив SurfaceView и установив PreviewSize до 1280x720. Я добавил PreviewCallBack, чтобы получить живой Изображение:

camera = Camera.open();

parameters = camera.getParameters();
parameters.setPreviewSize(1280,720);

camera.setParameters( parameters);
byte[] b = new byte[camera.getParameters().getPreviewSize().width *
  camera.getParameters().getPreviewSize().height *
  ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat()) / 8];
camera.addCallbackBuffer(b);
camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());

try {
 camera.setPreviewDisplay(this.getHolder());
 camera.startPreview()
}

Мой байтовый массив b равен 1382400 байт, а мой Функция CameraPreviewCallback.onPreviewFrame () получает эти 1382400 Байты - но только первые 497664 байта содержат данные (соответствующие Разрешение 768x432 (HTC Desire)).

Я проверил это на разных устройствах, все с разрешением экрана 800x480 (HTC Desire, LG Optimus 3D, Samsung Galaxy S2, Samsung Galaxy Вкладка, ...). Единственное устройство, для которого работает мой Код - это HTC Desire HD.

Кто-нибудь знает, как получить полное разрешение 720p в виде байта Массив? «Что-то», кажется, уменьшает разрешение предварительного просмотра, чтобы соответствовать дисплею смартфона.

Привет

Joern

Ответы [ 2 ]

8 голосов
/ 05 декабря 2011

Вы не можете использовать произвольное разрешение для предварительного просмотра камеры.

Некоторые устройства поддерживают только определенные разрешения. Вы можете запросить их через Camera.Parameters.getSupportedPreviewSizes() ¹. Если ваше устройство не возвращает 1280x720 в этом списке, вы не можете его использовать. Вместо этого выберите поддерживаемое разрешение, близкое к желаемому.

¹ Вы должны сделать это, прежде чем использовать любое разрешение, 720p или нет

2 голосов
/ 09 августа 2014

Хотя это старый вопрос, ответ остается неизменным: список поддерживаемых размеров предварительного просмотра для каждого устройства не является точным. Размер предварительного просмотра по умолчанию, насколько мне известно, всегда действителен. Другие размеры, по-видимому, работают максимально в каждом конкретном случае - вы можете быть достаточно уверены, что размер предварительного просмотра по умолчанию не будет выглядеть некорректно на экране, но это все. В частности, этот массив байтов не будет масштабироваться для размещения больших форматов изображений, даже если они «поддерживаются», и только некоторые из «поддерживаемых» размеров предварительного просмотра будут правильно отображаться с разрешением и без зеленых / розовых искажений.

Единственный надежный способ узнать, что разрешение правильное и данные из onPreviewFrame () хороши, - это проверить это вручную.

...