2012-06-30 4 views
5

Ich benutze ein DroidX, um eine App zu entwickeln, die das Vorschaubild der Kamera verwendet. Der Code, den ich benutze, ist an vielen Stellen im Web zu finden, aber ich habe festgestellt, dass die gewöhnliche Methode "getBestPreviewSize (width, height, camera.parameters)" eine so kleine Größe zurückgibt, dass die Standardmethode decodeYUV420SP mit Nullzeiger-Ausnahme fehlschlägt.GetSupportedPreviewSize gibt die umgekehrte Breite und Höhe zurück

Einige Debuggen zeigt die supportedPreviewSizes für meine DroidX sind:

  • 144h x 176W
  • 240h x 320W
  • 288h x 352w
  • 480h x 640W
  • 480h x 720W
  • 448h x 800w
  • 720h x 1280w

Beachten Sie, dass die Werte von Höhe und Breite eine Landschaftsperspektive geben. Dies ändert sich nicht mit der Kameraausrichtung. Die Breite und Höhe der Oberfläche, die an getBestSupportedPreviewSizes übergeben wurde, ist 480 W x 778 h.

Wenn ich die camera.parameters an getBestSupportedPreviewSizes() übergebe, gibt es eine Größe 288 x 352 zurück. Hier ist die aufrufende Code - ich entschuldige mich, wenn das Format ausgeschaltet ist, aber hier geht:

 if (!cameraConfigured) { 
     Camera.Parameters parameters=camera.getParameters(); 
     Camera.Size size=getBestPreviewSize(pwidth, pheight, parameters); 
     if (size!=null) { 
      parameters.setPreviewSize(size.width, size.height); 
      camera.setParameters(parameters); 
      cameraConfigured=true; 
     } 
    } 

pwidth und pheight sind aus dem surfaceChanged Rückruf Breite und Höhe Parametern. Ich habe versucht camera.setDisplayOrientation (90); in onResume(). Ich habe auch Orientierung ("Portrait") in das Manifest gelegt - keine der 4 Kombinationen dieser Versuche scheint dieses Verhalten zu ändern.

Meine Gedanken sind, sie einfach umzukehren, aber es fühlt sich auf so vielen Ebenen falsch an. Da sich dieser frei verfügbare Code in so vielen anderen Beispielen bewährt zu haben scheint, stehe ich offensichtlich falsch da. Kann jemand Einblick in dieses Verhalten geben?

Vielen Dank im Voraus.

Antwort

3

Der richtige Weg, um über die Kamera nachzudenken, ist der Querformat-Modus, dh wenn Sie im Hochformat darüber nachdenken, fühlen sich die Breite und Höhe "umgedreht" an.

getBestPreviewSize(w, h, p) Die Funktion ist einfach ein Wrapper um die Funktion der getSupportedPreviewSizes()Camera.Parameters, so dass die Breite und die Höhe geführt werden nicht in das Ergebnis der Funktion bestPreviewSize verändern.

+0

Danke Daniel. Ich bin allerdings etwas verwirrt. Wie ich es verstehe, übergeben wir die Oberflächengröße an getBestPreviewSizes() und geben die beste Breite und Höhe zurück, mit der previewsize eingestellt werden kann. Wenn also die Breite kleiner als die Höhe ist (wie im Hochformat), ist die zurückgegebene Breite kleiner als die Höhe der Kamera oder die zurückgegebene Höhe ist kleiner als die Breite der Kamera. Also verstehe ich nicht, wie es das Ergebnis der getBestPreviewSize-Funktion nicht beeinflusst. Was vermisse ich in meinem Denken? – bob

+0

Die meisten getBestPreviewSizes() fns, die ich online gesehen habe, verwenden nur die Breite und Höhe, um eine Vorschaugröße mit einem guten Seitenverhältnis zu finden. Das Seitenverhältnis ist das gleiche, unabhängig davon, ob Höhe und Breite gewendet werden oder nicht. –

+0

hat dies Ihre Frage beantwortet? –