2012-01-31 2 views
1

Я открываю камеру в своем приложении, и дисплей кулачка поворачивается на 90 градусов, даже когда я вращаю устройство в своих руках.Android, камера в моем приложении повернута

код:

import java.io.IOException; 
import java.util.List;  
import android.content.Context; 
import android.hardware.Camera; 
import android.view.Display; 
import android.view.Surface; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 
import android.view.WindowManager; 

public class CameraSurfaceView extends SurfaceView implements SurfaceHolder.Callback 
{ 
     private SurfaceHolder holder; 
     private Camera camera; 
     private Context context; 
     public CameraSurfaceView(Context context) 
     { 
       super(context); 

       //Initiate the Surface Holder properly 
       this.holder = this.getHolder(); 
       this.holder.addCallback(this); 
       this.holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
       this.context = context; 
      } 

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

     // Now that the size is known, set up the camera parameters and begin 
      // the preview. 
      Camera.Parameters parameters = camera.getParameters(); 
      List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 
      Camera.Size size = previewSizes.get(0); 
      parameters.setPreviewSize(size.width, size.height);   

      Display display = ((WindowManager)context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay(); 

      if(display.getOrientation() == Surface.ROTATION_0) 
      { 
       //parameters.setPreviewSize(height, width);       
       parameters.setRotation(90); 
      } 

      if(display.getOrientation() == Surface.ROTATION_90) 
      { 
       //parameters.setPreviewSize(width, height);       
      } 

      if(display.getOrientation() == Surface.ROTATION_180) 
      { 
       //parameters.setPreviewSize(height, width);    
      } 

      if(display.getOrientation() == Surface.ROTATION_270) 
      { 
       //parameters.setPreviewSize(width, height); 
       parameters.setRotation(180); 
      }     
      camera.setParameters(parameters);     
      camera.startPreview();    
     }  
     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      try 
      { 
        //Open the Camera in preview mode 
        this.camera = Camera.open(); 
        this.camera.setPreviewDisplay(this.holder); 
      } 
      catch(IOException ioe) 
      { 
        ioe.printStackTrace(System.out); 
      }    
     }  
     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      // Surface will be destroyed when replaced with a new screen 
      //Always make sure to release the Camera instance 
      camera.stopPreview(); 
      camera.release(); 
      camera = null;    
     } 
    } 

Любые идеи? Благодарности

p.s, как я знаю, что это правильный выбор для моего устройства в линии

List<Camera.Size> previewSizes = parameters.getSupportedPreviewSizes(); 
+0

Это ошибка на основе аппаратных настроек на некоторых телефонах. Android не может быть исправлен, чтобы исправить это, поскольку это аппаратное обеспечение. Вам просто нужно повернуть изображение в коде. –

ответ

0

Посмотрите на примере код, указанный в Camera.setDisplayOrientation(int degrees) методом. Обратите внимание, что вы должны выполнить эти действия перед вызовом setPreviewDisplay (SurfaceHolder)

+0

Я изменил порядок, но ничего не изменил ... – ibm123

+0

Попробуйте использовать 'Camera.setDisplayOrientation (degrees)' вместо 'Camera.Parameters.setRotation (degrees)' –

1

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

Camera.Parameters parameters = camera.getParameters(); 
      parameters.set("jpeg-quality", 100); 
      parameters.set("orientation", "landscape"); 
      parameters.set("rotation", 90); 
      parameters.setPictureFormat(PixelFormat.JPEG); 

      parameters.setPreviewSize(w, h); 
      camera.setParameters(parameters); 
Смежные вопросы