портретная ориентация камеры Android

Я использую камеру в своем приложении. Я просто использую intent для запуска камеры

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
        cameraIntent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
        startActivityForResult(cameraIntent, 101);

Захваченное изображение автоматически входит в landscape view. Как заставить camera записывать изображения в portrait view


person Seshu Vinay    schedule 15.12.2011    source источник
comment
столкнулся с такой же проблемой, подскажите пожалуйста как вы ее решили....   -  person Siva K    schedule 08.10.2012
comment
@SivaK Вместо того, чтобы использовать приложение камеры по умолчанию, я создал свой собственный вид камеры для захвата изображений.   -  person Seshu Vinay    schedule 08.10.2012
comment
Seshu Vinay - спасибо за ваш ответ, есть ли какой-нибудь пример кода или блог для создания нашего собственного вида камеры   -  person Siva K    schedule 08.10.2012
comment
Ниже приведен ответ, который дает пример кода   -  person Seshu Vinay    schedule 08.10.2012
comment
Спасибо - только что я просмотрел приложение FoodSpotting, оно использует камеру по умолчанию, фотографирует в портретном режиме, и когда фотография извлекается в том же портретном режиме.... я буду искать ее... спасибо   -  person Siva K    schedule 08.10.2012


Ответы (3)


Если устройство имеет v2.2 или выше, вы можете изменить ориентацию камеры на портретную, используя camera.setDisplayOrientation(90). В устройствах ниже версии 2.2 камера будет отображаться только в альбомной ориентации, поэтому изображение будет в альбомной ориентации. Проверьте эти сообщения Использование камеры в портретной ориентации, Камера работает неправильно, если клавиатура не открыта.

person anujprashar    schedule 15.12.2011
comment
Я не думаю, что это будет работать без фактического переопределения класса камеры - здесь недостаточно вызова намерения. - person ekatz; 11.02.2013

попробуй это.

        Parameters param = mCamera.getParameters();

        switch(mDisplay.getRotation()){
        case Surface.ROTATION_0:
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO){
                mCamera.setDisplayOrientation(90);
                Log.d("Rotation_0", "whatever");
            }
            else{
                Log.d("Rotation_0", "whatever");
                param.setRotation(90);
                mCamera.setParameters(param);
            }
            break;
        case Surface.ROTATION_90:
            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.FROYO){
                mCamera.setDisplayOrientation(0);
                Log.d("Rotation_0", "whatever");
            }
            else{
                Log.d("Rotation_90", "whatever");
                param.setRotation(0);
                mCamera.setParameters(param);
            }
            break;
        }
person lv0gun9    schedule 15.12.2011

Здесь этот код подходит для всех типов ориентации, которые также поддерживаются в приложении камеры Android [Портретный режим].

int rotation = this.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;

switch (rotation) {

    case Surface.ROTATION_0:
        degrees = 0;
        break;

    case Surface.ROTATION_90:
        degrees = 90;
        break;

    case Surface.ROTATION_180:
        degrees = 180;
        break;

    case Surface.ROTATION_270:
        degrees = 270;
        break;

}
person Harrish Android    schedule 21.09.2015
comment
Спасибо, Тим Кастелинс. - person Harrish Android; 22.09.2015