Размер предварительного просмотра с CWAC-Camera

Я некоторое время боролся с https://github.com/commonsguy/cwac-camera

Удалось создать свой пользовательский CameraFragment и пользовательский CameraHost.

Я отменил getPictureSize и getPreviewSize. С помощью этих двух методов я могу узнать, какие Sizes можно использовать. Моя общая идея состоит в том, чтобы захватить квадратное изображение, а также предварительно просмотреть его перед захватом.

Я тестировал, и ни одно устройство не возвращает Size в квадратном формате, поэтому я думаю, что лучшим подходом будет выбор размера, ближайшего к моим потребностям. Например, если мне нужно изображение в квадрате 800x800, я верну ближайшее Size, это будет (например) 1280x1024.

Все идет нормально. Проблема заключается в следующем:

В документации указано:

Обычно ваш CameraHost вызывается с помощью getPreviewSize().

Проклятие; мое устройство Nexus5 никогда не запускает этот метод, но эмулятор Genymotion делает это. Таким образом, в моем эмуляторе я могу создать собственный размер предварительного просмотра, чего я не могу сделать на своем реальном устройстве. Поэтому мне нужна помощь в этом вопросе. Почему просто "обычно"? Что я могу сделать, чтобы изменить его на «всегда»?

Во втором случае мне нужны некоторые советы: если мне нужен квадратный размер предварительного просмотра, который, как я знаю, не будет доступен по умолчанию Sizes, возвращаемый getSupportedPreviewSizes, что я могу сделать, чтобы отобразить квадрат ? Может быть, наложение квадрата поверх CameraFragment? Это вообще возможно? Или я должен пойти на любой другой подход?

В любом случае, поздравляю с библиотекой; это абсолютно ясно и с таким количеством вариантов. Не нужно беспокоиться о «некоторых устройствах». Это здорово для Android-разработчика.

Спасибо.


person Reinherd    schedule 26.12.2013    source источник
comment
Извините, но я сейчас в отпуске/отпуске. Я постараюсь помочь больше на следующей неделе по возвращении.   -  person CommonsWare    schedule 27.12.2013
comment
@CommonsWare Так и думал. Наслаждайся ими!   -  person Reinherd    schedule 28.12.2013


Ответы (1)


Почему просто "обычно"? Что я могу сделать, чтобы изменить его на «всегда»?

Цитирование документации:

Однако если getRecordingHint() возвращает ANY или VIDEO_ONLY, CameraHost предоставляет размер предварительного просмотра через getPreferredPreviewSizeForVideo() вместо getPreviewSize(). Если вы хотите использовать другой размер предварительного просмотра для видео, верните его, в противном случае верните null, и вместо этого мы будем использовать результаты из getPreviewSize().

На уровне API 11+ реализация SimpleCameraHost getPreferredPreviewSizeForVideo() делегирует реализацию getPreferredPreviewSizeForVideo() на Camera.Parameters, за исключением устройств, которые, как известно, возвращают для него неверные значения.

что я могу сделать, чтобы отобразить квадрат? Может быть, наложение квадрата поверх CameraFragment?

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

person CommonsWare    schedule 30.12.2013
comment
Чтобы получить квадратный предварительный просмотр, сделайте следующее: Создайте свою собственную активность, раздуйте CameraFragment и добавьте ее в активность, как показано в этом примере toastdroid.com/2014/03/14/ . Замените FrameLayout, на который ссылается R.id.container, на собственный квадратный FrameLayout, который вы реализуете следующим образом: — теперь у вас есть квадратный предварительный просмотр. - person Espen Riskedal; 14.08.2014
comment
Да, чтобы получить квадрат, необходимо использовать другой макет, чтобы скрыть нежелательную область, как сказал @espen-riskedal. Также обратите внимание, что размер предварительного просмотра должен иметь точное соотношение, как один из параметров из списка параметров. В противном случае ваш превью будет растянут. Размер изображения должен иметь точное соотношение, которое вы выбрали в размере предварительного просмотра. В противном случае выводимое изображение может отличаться от экрана предварительного просмотра. - person John Pang; 12.12.2014