2012-04-30 3 views
9

Согласно сайту разработчика Android:Android Camera Preview Rotation

после андроида 2.2 есть функция

"setDisplayOrientation"

для регулировки вращения камеры предварительного просмотра.

А также, согласно сайту разработчиков Android, мы можем найти следующий исходный код.

android.hardware.Camera.CameraInfo info = 
      new android.hardware.Camera.CameraInfo(); 
    android.hardware.Camera.getCameraInfo(cameraId, info); 
    int rotation = activity.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 ; 
    } 
    int result ; 
    if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) { 
     result = (info.orientation + degrees) % 360 ; 
     result = (360 - result) % 360 ; // compensate the mirror 
    } else { // back-facing 

     result = (info.orientation - degrees + 360) % 360 ; 

    } 

Однако я не могу работать с устройствами. Как Samsung Galaxy Y S5360, S5660, YP-G1, YP-G70 и т. Д.

Только часть машины не работает, Galaxy Nexus, SII или какое-то высокопроизводительное устройство, оно отлично работает.

Не поддерживает ли setDisplayOrientation, или прошивка устройств не готова?

PS. Все устройства Android 2.3.1 или выше.

Помощь.

+0

Я столкнулся с той же проблемой на своей Галактике Y. Вы что-то узнали? Я хотел бы знать, по крайней мере, если setDisplayOrientation преуспел, чтобы заблокировать его в ландшафт, если нет. –

+0

наконец, не решен. просто сделайте активность поверхности камеры горизонтальной. –

+0

У кого-нибудь есть список устройств, на которых происходит эта ошибка? Любая помощь будет оценена по достоинству. – patrickfdsouza

ответ

-3

Попробуйте установить ориентацию xml вашего вида камеры на пейзаж.

+1

Не очень полезный ответ, если бы ОП не было ландшафта, он бы не спросил, как получить портрет в первую очередь. – Shirkrin

+0

@Shirkrin ответ выглядит странно на первом месте. Но факт заключается в том, что на некоторых устройствах предварительный просмотр камеры фиксируется на фоне пейзажа. Если вы настроите xml вашего предварительного просмотра камеры на пейзаж, он будет соответствовать всем устройствам. Что вы будете делать дальше, так это использовать матрицу для поворота снимка, сделанного камерой. – dumbfingers

+0

У этого нет работы. –

3

Проблема настройки отображения ориентации камеры не работает в версии операционной системы этих устройств, которая в основном является (пряничным), но для устройств выше этого она отлично работает.

Я тоже пробовал это на этих устройствах, режим ландшафта работает нормально, но в режиме портрета есть проблема. В случае, если заставить портрет просто вынудил ориентацию камеры на 90 градусов через это в

public void surfaceChanged(SurfaceHolder holder, int format, int width, 
    int height) { 

camera.setDisplayOrientation(90); 


} 

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

PictureCallback myPictureCallback_JPG = new PictureCallback(){ 


    public void onPictureTaken(byte[] arg0, Camera arg1) { 

    Bitmap bitmapPicture= BitmapFactory.decodeByteArray(arg0, 0, arg0.length); 
     Matrix matrix = new Matrix(); 
    matrix.postRotate(90); 
    int height=bitmapPicture.getHeight(); 
    int width=bitmapPicture.getWidth(); 
    Bitmap scaledBitmap = Bitmap.createScaledBitmap(bitmapPicture,height,width, true); 
     Bitmap rotatedBitmap = Bitmap.createBitmap(scaledBitmap , 0, 0, scaledBitmap.getWidth(), scaledBitmap.getHeight(), matrix, true); 
} 

Надеется, что это HELPS

Смежные вопросы