2013-03-04 3 views
0

Я работаю с необработанным изображением камеры, но вам нужно перезапустить предварительный просмотр после захвата изображения. Когда я вызываю startPreview() после takePicture, андроид зависает, потому что камера до сих пор используется. Я ждал, пока исходное изображение не будет записано на диск, но камера все еще используется, поэтому предварительный просмотр по-прежнему висит в системе.Любой способ определить, свободен ли камера?

camera.takePicture(null, null, null); 
(test needed here){ 
camera.startPreview();  
} 

Вставка предварительного просмотра в rawcallback вешает андроид.

При вызове takePicture jpegCallback возникает после завершения камеры, поэтому безопасно запускать предварительный просмотр, но это также создает .jpg.

Вопрос следующий: takepicture, есть ли способ определить, когда камера находится в режиме ожидания? (кроме jpegCallback?).

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

+0

Знание вашей конкретной цели здесь было бы полезно с точки зрения фактической помощи в достижении вашей цели, а не только ответа на ваш заявленный вопрос (определяя, может ли быть известна «статус» камеры - она ​​занята до обратного вызова JPEG). –

+0

Приложение представляет собой приложение штрих-кода, основанное на точках, где размер точек ОЧЕНЬ маленький. Для моей цели наиболее эффективное изображение формат для работы с необработанным файлом прямо с чипа камеры.Другим соображением было полное разрешение .jpg и вызов BitmapFactory.decodeByteArray, чтобы получить растровое изображение, вызвали проблемы с памятью. Api показало бы, что jpegcallback является необязательным, так что, казалось бы, есть какой-то способ не нуждаться в этом. Затем снова api сказал th e rawimagecallback дал бы сырое изображение, так много для документации. –

+0

О, я вижу ... так что вы хотите необработанный обратный вызов для полного разрешения из-за небольшого размера точек? Вы пытаетесь немедленно перезапустить предварительный просмотр, потому что вам нужен какой-то плавный захват изображений, который не нарушает работу пользователя или не приостанавливает просмотр камеры? –

ответ

0

После вызова takePicture() function вы должны дождаться возврата обратного вызова JPEG, чтобы камера была готова к использованию снова. Невозможно контролировать его статус. В документации прямо говорится следующее:

После вызова этого метода, вы не должны вызывать startPreview() или взять другую картину до обратного вызова JPEG не вернулся.

Если вам нужен какой-то быстрый способ захвата кадров (т.е. изображения) без остановки и перезапуска камеры предварительного просмотра, вы можете реализовать интерфейс PreviewCallback, который просто позволит вам захватить предварительный просмотр кадры без остановки предварительного просмотра на всех. Просто помните, что вам нужно будет преобразовать их из формата YUV (что не сложно с помощью Android YUVImage class.

+0

Я не звоню в jpegcallback, поэтому трудно подождать, пока он закончится. Я начинаю догадываться, что .jpg создается, если или если не вызван jpegcallback, поэтому вызов jpegcallback только для перезапуска предварительного просмотра может не накладывать никаких накладных расходов.Исходное изображение слоя, как видит камера, все остальное - пост-обработка. –

+0

Да. не думайте, что jpegcallback добавляет какие-либо накладные расходы. –

Смежные вопросы