Domanda

Ho provato diverse cose per cercare di ottenere l'anteprima della fotocamera di presentarsi in ritratto su un SurfaceView. Niente ha funzionato. Sto testando su un Droid che ha 2.0.1. Ho provato:

1) costringendo il layout di essere ritratto da: this.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

2) utilizzando

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

C'è qualcos'altro che posso provare? Se questo un bug in Android o il telefono come posso fare in modo che questo è il caso in modo da avere la prova di informare il cliente?

Grazie, Prasanna

Nessuna soluzione corretta

Altri suggerimenti

Al API lvl 8, questo è disponibile:

pubblica setDisplayOrientation vuoto finale (int gradi)

vale a dire. con portait nel manifesto:

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

ho una soluzione di lavoro per la modalità portrait lavorare in 2.1 (testato su Desire) forse meno.

orientamento dello schermo attività è impostata su ritratto. (Android: screenOrientation = "ritratto")

i parametri della fotocamera:

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

e l'immagine sarà ritratto.

SurfaceHolder si utilizza per la macchina fotografica deve essere di una dimensione compatibile con formato del telefono anteprima risoluzione dello schermo quando arrivavano.

divertente su Desire 2.2 non funziona ... Ecco la correzione:

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

Si può provare questo (buono per 2,2 o al di sotto). Qui ho ruotare l'immagine prima di salvarla su una scheda SD. Ma è solo per la modalità portrait. Se si dovesse rendere sia per la modalità allora si dovrebbe verificare l'orientamento della fotocamera e mettere un po 'di controllo prima di acquisire l'immagine.

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

Non c'è modo per fare questo su molti dispositivi attuali, tra cui il G1 e Droid. Date un'occhiata alla segnalazione di bug rilevanti qui:

Si veda anche un commento da uno degli ingegneri Android (Dave) qui:

Il legame romana ha dato del filo problema ha una soluzione praticabile che sto usando ora.

trovare qui: http://code.google.com/p/android/issues / dettagli? id = 1193 # C26

Non è necessario è necessario impostare i parametri per l'orientamento fino al momento di farlo in modo esplicito. Per impostazione predefinita, supporta questa struttura. Nel mio caso, ho un'attività e, soprattutto, che l'attività ho una telecamera, quindi non ho impostato qualsiasi orientamento per le proprietà della fotocamera, invece, per l'attività ho impostato l'orientamento come ritratto nel file manifesto. ora l'applicazione appare e funziona bene. Potrebbe essere utile per qualcuno ..

Grazie.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top