Question

J'ai essayé plusieurs choses à essayer d'obtenir l'aperçu de la caméra pour afficher en portrait sur un SurfaceView. Rien n'a fonctionné. Je teste sur un Droid qui a 2.0.1. J'ai essayé:

1) forçant la mise en page pour être portrait par: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2) en utilisant

Camera.Parameters parameters = camera.getParameters();
parameters.set("orientation", "portrait");
parameters.setRotation(90);
camera.setParameters(parameters);

Y at-il autre chose que je peux essayer? Si cela comment puis-je faire un bogue dans Android ou le téléphone sûr que ce soit le cas pour que j'ai la preuve d'informer le client?

Merci, Prasanna

Pas de solution correcte

Autres conseils

API lvl 8, il est disponible:

public final setDisplayOrientation vide (degrés int)

i.e.. avec Portait dans le manifeste:

public void surfaceCreated(SurfaceHolder holder) {
    mCamera = Camera.open();
    mCamera.setDisplayOrientation(90);

J'ai une solution de travail pour le mode portrait travail en 2.1 (testé sur le désir) peut-être moins.

orientation de l'écran d'activité est défini sur le portrait. (Androïde: screenOrientation = "portrait")

les paramètres de la caméra:

Camera.Parameters p = mCamera.getParameters ();

 p.set("jpeg-quality", 100);
 p.set("orientation", "landscape");
 p.set("rotation", 90);
 p.setPictureFormat(PixelFormat.JPEG);
 p.setPreviewSize(h, w);// here w h are reversed
 mCamera.setParameters(p);

et l'image sera portrait.

SurfaceHolder que vous utilisez pour l'appareil photo doit être à une taille compatible avec la taille de prévisualisation téléphone résolution d'écran usualy.

Drôle sur le désir 2.2 ne fonctionne pas ... Voici la solution:

   At surfaceCreated(..) or when you have this line
camera = Camera.open();
       add
camera.setDisplayOrientation(90);//only 2.2>

Camera.Parameters p = camera.getParameters();
    p.set("jpeg-quality", 100);
p.setRotation(90);
p.setPictureFormat(PixelFormat.JPEG);
p.setPreviewSize(h, w);
camera.setParameters(p);

Vous pouvez essayer (bon pour 2,2 ou au-dessous). Ici, je fais pivoter l'image avant de l'enregistrer sur la carte SD. Mais il est seulement pour le mode portrait. Si vous deviez le faire pour le mode, vous devriez vérifier l'orientation de la caméra et mettre un peu avant vérification de capture d'image.

PictureCallback jpegCallback = new PictureCallback() {
   public void onPictureTaken(byte[] data, Camera camera) {
      FileOutputStream outStream = null;
      try {
        imageFilePath = getFilename();
        InputStream is = new ByteArrayInputStream(data);
        Bitmap bmp = BitmapFactory.decodeStream(is);
        // Getting width & height of the given image.
        if (bmp != null){
           int w = bmp.getWidth();
           int h = bmp.getHeight();
           // Setting post rotate to 90
           Matrix mtx = new Matrix();
           mtx.postRotate(90);
           // Rotating Bitmap
           Bitmap rotatedBMP = Bitmap.createBitmap(bmp, 0, 0, w, h, mtx, true);
           ByteArrayOutputStream stream = new ByteArrayOutputStream();
           rotatedBMP.compress(Bitmap.CompressFormat.PNG, 100, stream);
           byte[] byteArray = stream.toByteArray(); 
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(byteArray);
           outStream.close();
        } else {
           outStream = new FileOutputStream
                              (String.format(imageFilePath,System.currentTimeMillis()));
           outStream.write(data);
           outStream.close();           
        }       

        preview.camera.startPreview();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
    }
  }
};

Il n'y a aucun moyen de le faire sur de nombreux appareils actuels, y compris le G1 et Droid. Jetez un coup d'oeil au rapport de bogue pertinent ici:

Voir aussi un commentaire d'un des ingénieurs Android (Dave) ici:

Le lien a donné du fil d'émission romaine a une solution viable que j'utilise maintenant.

Trouvez ici: http://code.google.com/p/android/issues / détails? id = 1193 # C26

Il n'y a pas besoin, vous devez définir les paramètres pour l'orientation jusqu'à ce que vous devez le faire explicitement. Par défaut, il prend en charge cette installation. Dans mon cas, j'ai une activité et surtout que l'activité i une vue de la caméra, donc je ne l'ai pas mis une orientation pour les propriétés de la caméra, au lieu de l'activité i définir l'orientation en portrait dans le fichier Manifest. maintenant l'application ressemble et fonctionne bien. Peut-être utile pour quelqu'un ..

Merci.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top