Intereting Posts

Какой формат предназначен для камеры Android с необработанным PictureCallback?

Я пытаюсь использовать данные с картинки Android. Мне не нравится формат JPEG, так как в конце концов я буду использовать данные серой шкалы. Формат YUV в порядке со мной, так как первая половина занимает серый цвет.

Из учебника по разработке Android,

Public final void takePicture (Camera.ShutterCallback shutter, Camera.PictureCallback raw, Camera.PictureCallback postview, Camera.PictureCallback jpeg)

Добавлено в API уровня 5

Запускает асинхронный захват изображения. Служба камеры начнет серию обратных вызовов в приложение по мере продвижения изображения. Обратный вызов затвора происходит после захвата изображения. Это можно использовать для запуска звука, чтобы пользователь знал, что изображение было захвачено. Необработанный обратный вызов возникает, когда доступны данные необработанного изображения (ПРИМЕЧАНИЕ: данные будут пустыми, если нет необработанного буфера обратного вызова изображения, или буфер обратного вызова необработанного изображения недостаточно велик для хранения необработанного изображения). Обратный вызов postview возникает, когда доступно масштабированное, полностью обработанное изображение для просмотра (ПРИМЕЧАНИЕ. Не все аппаратные средства поддерживают это). Обратный вызов jpeg возникает, когда доступно сжатое изображение. Если приложение не нуждается в конкретном обратном вызове, вместо метода обратного вызова может быть передан нуль.

В нем говорится о «данных необработанного изображения». Однако я не нашел нигде информации о формате для данных необработанного изображения? Есть ли у вас какие-либо идеи?

Я хочу получить данные о сером снимке, сделанные фотографией, и данные находятся в памяти телефона, поэтому для записи / чтения из файлов изображений или конвертирования между различными форматами изображений это не будет стоить времени. Или, может быть, я должен пожертвовать некоторыми, чтобы получить его?

После некоторого поиска, я думаю, я нашел ответ: Из учебника Android :

«Необработанный обратный вызов возникает, когда доступны данные необработанного изображения (ПРИМЕЧАНИЕ: данные будут пустыми, если нет необработанного буфера обратного вызова изображения, или буфер обратного вызова необработанного изображения недостаточно велик для хранения необработанного изображения)».

См. Эту ссылку (2011/05/10) Android: Поддерживаемые устройства обратного вызова с обратным отображением Не все устройства поддерживают raw pictureallback.

https://groups.google.com/forum/?fromgroups=#!topic/android-developers/ZRkeoCD2uyc (2009) Сотрудник Дейв Спаркс в Google сказал:

«Первоначальное намерение состояло в том, чтобы вернуть несжатый кадр RGB565, но это оказалось непрактичным». «Я склонен полностью отказаться от этого API и заменить его на крючки для собственной обработки сигналов».

Многие люди сообщают о подобной проблеме. См. http://code.google.com/p/android/issues/detail?id=10910.

Поскольку многие процессы обработки изображений основаны на изображениях с серой шкалой, я с нетерпением жду серой шкалы необработанных данных в памяти, созданной для каждого изображения Android.

Возможно, вам повезло с getSupportedPictureFormats () . Если в нем указан некоторый формат YUV, вы можете использовать setPictureFormat () и требуемое разрешение, а ciunterintuitively вы получите несжатое высококачественное изображение в обратном вызове JpegPreview, из которого можно легко извлечь оттенки серого (aka luminance).

Большинство устройств будут отображать только JPEG в качестве допустимого выбора. Это потому, что они выполняют сжатие в аппаратном обеспечении со стороны камеры. Обратите внимание, что передача данных с камеры на прикладную RAM часто является узким местом; Если вы можете использовать декодер stagefright hw JPEG, вы получите результат быстрее.

Самая большая проблема с использованием необработанного обратного вызова заключается в том, что у многих разработчиков возникают проблемы с получением чего-либо, возвращаемого на многих телефонах.

Если вас устраивает только массив YUV, предварительный просмотр камеры SurfaceView может реализовать PreviewCallback и вы можете добавить метод onPreviewFrame в свой класс. Эта функция позволит вам получить прямой доступ к массиву YUV для каждого кадра. Вы можете получить его, когда вы выберете.

EDIT: Я должен указать, что я предполагал, что вы создаете собственное приложение для камеры, в котором вы расширили SurfaceView для пользовательской поверхности предварительного просмотра. Чтобы следовать моим советам, вам нужно будет создать пользовательскую камеру. Если вы пытаетесь сделать что-то быстро, хотя я предлагаю создать новое растровое изображение из данных JPEG, где вы сами реализуете оттенки серого.