Я использую предварительный просмотр, чтобы отобразить то, что камера видит на экране.
Я могу заставить все работать нормально, поверхность создана, поверхность установлена, и поверхность отображается.
Однако в портретном режиме изображение всегда отображается под неправильным углом 90 градусов.
Такие как на картинке:
Я знаю, что использование следующего кода исправит картину:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Однако у меня есть предварительный просмотр в Activity, в котором есть другие элементы, и нет смысла отображать мое Activity в ландшафтном режиме. (По умолчанию отключено)
Так что мне было интересно, есть ли способ просто изменить ориентацию предварительного просмотра? И оставить остальную часть моей деятельности правильно отображаемой в портретном режиме?
Или все-таки повернуть превью, чтобы он отображался правильно?
Ответы:
Эта проблема, похоже, началась как ошибка с определенным оборудованием, см. Здесь, но ее можно преодолеть, используя вызов mCamera.setDisplayOrientation (степени), доступный в API 8. Вот как я ее реализую:
Это было на HTC Desire, и мне сначала пришлось вводить записи журнала в каждую проверку ротации, чтобы сказать, что это за ротация, а затем отлаживал устройство и смотрел вывод logCat, пока я вращал устройство. Для HTC Desire 0 был телефоном, как и следовало ожидать (портрет), 90 градусов поворачивал телефон на 90 градусов ПРОТИВ ЧАСОВОЙ СТРЕЛКИ (я предполагал, что это будет по часовой стрелке). В коде вы увидите, что мне не нужно было вращать дисплей, когда телефон был на 90 или 180 градусов - устройство, похоже, справилось с этим само. Только одна точка не работает должным образом: поворот на 270 градусов - это когда вы поворачиваете устройство на 90 градусов по часовой стрелке, и счетчики поворота дисплея это нормально, но если вы поворачиваете устройство на 270 градусов против часовой стрелки, кажется, что это не компенсирует это должным образом.
PS Обратите внимание на смену ширины и высоты при соответствующих поворотах.
источник
mCamera.setParameters(parameters);
Заявление врезаться моим приложение, так как размеры поверхности не действительный размера предварительного просмотра для моего телефона (может быть , потому , что я держу в строке состояния виден?). Однако я обнаружил, что использованиеmCamera.setDisplayOrientation(90)
thenmCamera.setPreviewDisplay(mSurfaceHolder);
без настройки параметров тоже работает!попробуй установить ориентацию дисплея. Это решает мою проблему.
источник
onPreviewFrame()
илиonPictureTaken()
попробуйте этот код
источник
У меня была проблема с передней камерой (проблема перевернутой). Затем я использовал следующий метод, описанный в Android Docs -
источник
Я сделал это по совету mCamera.setDisplayOrientation (90); но также повернул растровое изображение, потому что по какой-то причине другие подходы у меня не работают в версии 2.3.3.
Для поворота растрового изображения я сделал следующее:
источник
Я сравнил свой код с учебным, и, наконец, исправил, поместив следующий код в мой AndroidManifext.xml: В
<activity>
теге:источник
источник
Я думаю, что значение SENSOR_ORIENTATION объяснит, какое значение следует использовать для поворота вместо жесткого кодирования на 90 градусов
источник