#android #camera #rotation #preview #android-camera
#Android #камера #поворот #Предварительный просмотр #android-камера
Вопрос:
Я разрабатываю Samsung Galaxy Tab (7 дюймов) на / для него. Мое приложение должно работать только в портретном режиме, т. е. я заблокировал его в портретном режиме в своем приложении и в настройках устройства. Проблема в том, что когда я пытаюсь повернуть предварительный просмотр камеры, в данный момент она повернута на 90 градусов в неправильном направлении.
Прямо сейчас это мой созданный surfaceCreated
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
camera.setPreviewDisplay(holder);
Camera.Parameters parameters = camera.getParameters();
parameters.setPictureFormat(PixelFormat.JPEG);
parameters.set("orientation", "portrait");
//camera.setDisplayOrientation(90);
parameters.setRotation(90);
camera.setParameters(parameters);
}
catch (IOException exception) {
camera.release();
}
}
Похоже, что camera.setDisplayOrientation (90) не работает (он ничего не делает, поэтому я откомментировал это). Однако parameters.setRotation(90) НА самом деле ВЫПОЛНЯЕТ СВОЮ работу! но это создает уродливую «полосу» «мерцающих цветов» вдоль боковой панели приложения. setDisplayOrientation () должен работать для меня, поскольку я использую Android api 8 (Froyo 2.2)!!
В Google есть ветка о проблемах, связанных с поворотомhttp://code.google.com/p/android/issues/detail?id=1193#c26, но, насколько мне известно, это ничего не говорит о моей проблеме.
Любые решения, относящиеся к этой проблеме, будут высоко оценены! Спасибо!
Ответ №1:
Это сработало для меня в Samsung Galaxy tab:
public void surfaceCreated(SurfaceHolder holder)
{
// The Surface has been created, acquire the camera and tell it where to draw.
mCamera = Camera.open();
Parameters params = mCamera.getParameters();
if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE)
{
params.set("orientation", "portrait");
mCamera.setDisplayOrientation(90);
}
try
{
mCamera.setPreviewDisplay(holder);
}
catch (IOException exception)
{
mCamera.release();
mCamera = null;
}
}
Ответ №2:
Если ваше приложение предназначено только для портретной съемки, то самое простое, что можно сделать, это просто повернуть данные изображения после того, как вы сделали снимок, и не беспокоиться о настройках камеры. Я не уверен, что вкладка глючит (я никогда не пытался повернуть предварительный просмотр камеры), но повернуть изображение после того, как вы сделали снимок, очень просто… проблема заключается только в том, что вам нужно знать, в какую сторону держалось устройство, когда был сделан снимок. Если это вас не беспокоит, то не беспокойтесь об этом 🙂
Комментарии:
1. Поворот сделанного снимка не имеет большого значения, но я бы хотел, чтобы предварительный просмотр был таким же, как на сделанном снимке. Удобство использования и все такое 😉 Проблема не в том, чтобы сделать снимок, а в повороте предварительного просмотра.
Ответ №3:
попробуйте это. Я создаю этот код и тестирую на Galaxy Tab. Код работает хорошо
public void surfaceCreated(SurfaceHolder holder) {
camera = Camera.open();
try {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO)
{
camera.setDisplayOrientation(90);
} else {
Parameters parameters = camera.getParameters();
parameters.setRotation(90);
camera.setParameters(parameters);
}
camera.setPreviewDisplay(holder);
} catch (IOException exception) {
camera.release();
}
}
Комментарии:
1. К сожалению, этот код у меня не работает. = (. Это очень похоже на код, который у меня уже был, но мне нравится необычное выражение IF! Я чувствую, что этот код должен работать (не имеет смысла, что setDisplayOrientation ничего не делает для моей камеры!), и все же это не так. Большое спасибо за ответ.