2013-03-12 12 views
13

Gerät Nexus 4 Android ver: 4.2.2Nexus 4 Kamera Vorschau Aspekt Ratio erfordert immer 16x9 Oberflächenansicht? Warum

der Hoffnung, jemand anderes diese gefunden hat und kann erklären, wie es zu lösen ....

Nexus 4 unterstützt die folgenden Vorschau Größen: -

W:1280 H:720 Ratio: 1.777777 
W:800 H:480 Ratio: 1.6666666 
W:768 H:432 Ratio: 1.7777778 
W:720 H:480 Ratio: 1.5 
W:640 H:480 Ratio: 1.3333334 
W:576 H:432 Ratio: 1.3333334 
W:480 H:320 Ratio: 1.5 
W:384 H:288 Ratio: 1.3333334 
W:352 H:288 Ratio: 1.2222222 
W:320 H:240 Ratio: 1.3333334 
W:240 H:160 Ratio: 1.5 
W:176 H:144 Ratio: 1.2222222 

myCamera.setPreviewSize() setzt sie, und wenn ich myCamera.getPreviewSize() aufrufen, bekomme ich die richtige, die ich eingestellt habe, ABER .... Wenn ich meine Oberflächenansicht auf die gleiche Größe wie meine Kameravorschau stelle, dann Ich bekomme ein gestrecktes Bild. z.B.

setPreviewSize(640,480) 
getPreviewSize -> I get 640,480 
Surface view (640,480) -> Stretched image 

Nur wenn ich meine Oberflächenansicht auf 16x9 (1.77777) setze, bekomme ich ein perfektes Bild.

Surface view (1280,720) -> Perfect image 

Dies ist das einzige Gerät, mit dem ich dieses Problem habe. Bitte lassen Sie sich von jemandem beraten, wenn eine Kameraeinstellung für den Vollbildmodus fehlt oder etwas, was die Arbeit daran hindert.

In meiner langen Suche fand ich 1 andere Stelle, die auch in dieser Frage betrifft, aber keine Antwort, nur ein bisschen mehr Beweise für mein Problem PictureCallback not called unless using supportedsizes[0]

Dank

+0

Alter !! Ich habe das gleiche Problem hier. Habe zwei Tage damit verbracht, und ich weiß immer noch nicht, warum es ein gestrecktes Bild produziert. – pintaf

Antwort

0

Versuchen Sie die Größe Ihrer Einstellung Oberflächenansicht basierend auf dem Verhältnis der von Ihnen verwendeten Kameraparameter.

3

Diese Methode berechnet die beste (für mich) Bildschirmgröße für jedes Gerät. Aber ich habe das gleiche Problem wie du, als ich diesen Code im Nexus 4 ausprobierte. Meine Lösung ist also, am Ende dieser Methode einen speziellen Fall zu haben, der die Breite des Nexus 4 bekommt und die beste Höhe dafür berechnet Gerät.

Der letzte Fall könnte in allen Geräten verwendet werden. Sie könnten den ersten Teil der Methode löschen.

private void setAspectResolutionCamera(Parameters camParams, int screen_width, int screen_height) { 
    boolean chosen_one_resolution = false; 

    //Init screen sizes 
    width_video = ConstantsCamera.VIDEO_ASPECT_WIDTH; 
    height_video = ConstantsCamera.VIDEO_ASPECT_HEIGHT; 

    float aspect_ratio = 1f; 
    int aspect_width = 6000, aspect_height = 6000; 
    List<Size> supported_sizes_list = camParams.getSupportedPreviewSizes(); 
    for (int i = 0; i < supported_sizes_list.size(); i++) { 
     Size size = supported_sizes_list.get(i); 

     float aspect = (float) size.height/size.width; 
     if (ConstantsCamera.VIDEO_ASPECT_RATIO - aspect <= aspect_ratio && (aspect - ConstantsCamera.VIDEO_ASPECT_RATIO >= 0)) { 

      if (screen_width - size.height <= aspect_width && size.height - screen_width >= 0) { 

       if (screen_height - size.width < aspect_height) { 
        height_video = size.width; 
        width_video = size.height; 
        aspect_ratio = ConstantsCamera.VIDEO_ASPECT_RATIO - (float) size.height/size.width; 
        aspect_width = screen_width - size.height; 
        aspect_height = screen_height - size.width; 

        chosen_one_resolution = true; 


       } 
      } 
     } 
    } 

    //Special case 
    if (width_video != screen_width && !chosen_one_resolution) { 
     height_video = screen_width * height_video/width_video; 
     width_video = screen_width; 

    } 
} 
7

Auf dem Nexus 4, gibt es ein unglückliches Problem, wo das Vorschau-Seitenverhältnis und das Standbild-Seitenverhältnis sind miteinander verbunden, wenn Sie noch nie ein Bild machen. Wenn sie nicht übereinstimmen, wird einer der beiden verzerrt (normalerweise Vorschau, da es die niedrigere Auflösung ist).

Wenn Sie eine 4: 3-Vorschau verwenden möchten, konfigurieren Sie die Standbildgröße ebenfalls auf 4: 3, bevor Sie mit der Vorschau beginnen. Eine 640x480-Vorschau mit einer vollen 8-Megapixel-Bildgröße (3264 x 2448) auf N4 sollte beispielsweise für die Vorschau keine Dehnung verursachen.

Verwenden Sie Camera.Parameters.setPictureSize, um die Bildgröße auszuwählen; Die Liste der verfügbaren Größen kann von Camera.Parameters.getSupportedPictureSizes gelesen werden.

+0

Das scheint ein Problem bei allen Nexus-Modellen zu sein. –

+0

sowohl @Eddy Talvala als auch Beni haben mir geholfen, mein Problem zu lösen. Vielen Dank. Danke auch an Iain für diese Frage. –