setOneShotPreviewCallback() для объекта Camera, обрезанная версия изображения для предварительного просмотра

Я разрабатываю довольно требовательное к процессу приложение, в котором мне нужно делать снимок и сохранять его каждый раз, когда нажимается кнопка. При нажатии кнопки я запускаю метод setOneShotPreviewCallback() объекта камеры, чтобы получить byte[], представляющий изображение в данный момент. Сразу после этого я беру этот byte[] и конвертирую его в растровое изображение, используя объект YUVImage, который очень сильно загружает процессор. Чтобы уменьшить это, я обрезаю изображение, используя:

Rect rect = new Rect(4*w/10, 0, 9*w/10, h);
final ByteArrayOutputStream output_stream = new ByteArrayOutputStream();
yuv_image.compressToJpeg(rect, 100, output_stream);

Я хотел бы знать, могу ли я сделать это только с помощью byte[] и мне не нужно преобразовывать его в изображение YUV? например, перед запуском обратного вызова создается Rect, а byte[] заполняется только данными изображения внутри этого Rect?


person SamRowley    schedule 18.05.2011    source источник
comment
Я не понимаю эту часть. При нажатии кнопки я запускаю setOneShotPreviewCallback() . Это обратный вызов, вы не можете его вызвать ... и я не думаю, что он дает вам правильное необработанное изображение, когда вы фактически выполняете захват. Обратный вызов можно вызвать в любое время. См. документацию здесь   -  person bluefalcon    schedule 20.05.2011


Ответы (1)


Попробуйте настроить PreviewFormat:

parameters.setPreviewFormat(ImageFormat.JPEG);
person dikirill    schedule 31.05.2011