2012-01-31 2 views
1

J'ouvre la caméra dans mon application et l'écran de la caméra est toujours tourné de 90deg même lorsque je tourne l'appareil dans mes mains.Android, appareil photo dans mon application est pivoté

le code:

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;    
     } 
    } 

Toutes les idées? Merci

p.s comment puis-je savoir quel est le bon pour choisir mon appareil dans la ligne

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

Il est un bug sur la base des paramètres du matériel sur certains téléphones. Android ne peut pas être patché pour le réparer car c'est matériel. Vous devrez juste faire pivoter l'image dans le code. –

Répondre

0

Regardez l'exemple de code donné dans Camera.setDisplayOrientation(int degrees) référence de la méthode. Notez que vous devez effectuer ces actions avant d'appeler setPreviewDisplay (SurfaceHolder)

+0

J'ai changé l'ordre, mais cela n'a rien changé ... – ibm123

+0

Essayez d'utiliser 'Camera.setDisplayOrientation (degrees)' au lieu de 'Camera.Parameters.setRotation (degrees)' –

1

J'ai utilisé ce code, quand je voulais afficher l'aperçu de la caméra correctement

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); 
Questions connexes