Android cwac-камера для съемки нескольких фотографий?
Название может быть неясным, но я использую эту замечательную библиотеку CommonsWare(кстати, приятно встретиться с вами на DroidCon), чтобы справиться с печально известными проблемами с фрагментированным API камеры Android.
Я хочу сделать 5 фотографий или кадров.. но не одновременно. Каждый кадр должен делать еще один снимок с интервалом в несколько миллисекунд или, предположительно, после того, как предыдущая фотография была успешно снята. Можно ли это сделать?
Я слежу за автономной реализацией в демоверсиях и просто фотографирую, используя
mCapture.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
try {
takePicture(true, false);
}catch(Exception e){
e.printStackTrace();
}
}
});
Передача true для takePicture(), потому что мне понадобится полученное растровое изображение. Я также отключил режим одиночной съемки, так как я хочу сделать еще одну фотографию сразу после того, как предыдущая будет снята, и предварительный просмотр возобновится
По умолчанию результатом съемки является возврат CameraFragment в режим предварительного просмотра, готовый сделать следующий снимок. Если вместо этого вам нужен только один снимок или вы хотите сначала отправить пользователя в какой-то другой бит пользовательского интерфейса и не хотите, чтобы предварительный просмотр запускался снова, переопределите useSingleShotMode() в CameraHost, чтобы вернуть true. Или вызовите useSingleShotMode() в SimpleCameraHost.Builder, передав логическое значение для использования по умолчанию. Или вызовите метод useSingleShotMode() для вашей PictureTransaction, чтобы управлять этим для отдельного изображения.
Я искал обратный вызов, например, onPictureTaken() или что-то подобное внутри CameraHost, который позволил бы мне сделать снимок и сразу же сделать снимок, прежде чем отпустить камеру, но я не вижу ничего подобного. Кто-нибудь когда-либо делал что-то подобное с помощью этой библиотеки? Могут ли иллюзорные CommonsWare, пожалуйста, пролить некоторый свет на это (если вы это видите?)
Спасибо!
1 ответ
Прочитайте процитированный абзац до следующего, который начинается с:
Тогда вы, вероятно, захотите использовать свою собственную реализацию saveImage() в CameraHost, чтобы делать все, что вы хотите, вместо перезапуска предварительного просмотра. Например, вы можете начать другое действие, чтобы сделать что-то с изображением.
Если то, что вы хотите, возможно, вы бы позвонили takePicture()
снова в saveImage()
вашей CameraHost
Кроме того, что вы делаете с изображением, которое вы получили.
Тем не мение:
Даже при включенной большой куче у вас может не хватить места в куче для того, что вы пытаетесь сделать. Возможно, вам придется явно выбрать изображение с более низким разрешением для изображений.
Это не совсем в рамках библиотеки. Это может работать, и у меня нет проблем с его работой, но возможность сделать N снимков за M секунд не является частью зуда библиотеки, который я (очень очень медленно) чешу. В частности, я не думаю, что я тестировал фотографирование с уже отключенным предварительным просмотром, и в моем коде могут быть некоторые проблемы в этой области.
В долгосрочной перспективе вам лучше будет обрабатывать кадры предварительного просмотра, чем делать снимки.