Я хочу использовать предварительный просмотр камеры для распознавания изображений. Для моих для моих целей мне нужно, чтобы разрешение предварительного просмотра было как можно выше (и в то же время отображать предварительный просмотр для пользователя).
Я создал класс 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 Tab, ...). Единственное устройство, на котором работает мой код, это HTC Desire HD.
Кто-нибудь знает, как получить полное разрешение 720p в виде массива байтов? Массив? "Что-то", похоже, уменьшает разрешение предварительного просмотра, чтобы подогнать его под дисплей смартфона.
Regards
Joern