Я разрабатываю довольно требовательное к процессу приложение, в котором мне нужно делать снимок и сохранять его каждый раз, когда нажимается кнопка. При нажатии кнопки я запускаю метод 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?
setOneShotPreviewCallback()
. Это обратный вызов, вы не можете его вызвать ... и я не думаю, что он дает вам правильное необработанное изображение, когда вы фактически выполняете захват. Обратный вызов можно вызвать в любое время. См. документацию здесь - person bluefalcon   schedule 20.05.2011