2013-03-12 7 views
13

Nexus dispositivo 4 ver Android: 4.2.2Nexus 4 Aspetto dell'anteprima della fotocamera Il rapporto richiede sempre 16x9 surfaceview? Perché

speranza che qualcun altro ha trovato questo e può spiegare come risolverlo ....

Nexus 4 supporta i seguenti formati di anteprima: -

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() li imposta, e quando chiamo myCamera.getPreviewSize() ottengo quello corretto che ho impostato, MA .... Se ho impostato la mia vista di superficie alla stessa dimensione della mia anteprima della fotocamera allora Ho un'immagine allungata. per esempio.

Solo se si imposta la vista Superficie su 16x9 (1.77777) ottengo un'immagine perfetta.

Surface view (1280,720) -> Perfect image 

Questo è l'unico dispositivo con cui ho questo problema. Si prega di qualcuno può consigliare se c'è un impostazione della fotocamera mi manca per la modalità a schermo intero o qualcosa che sta fermando questo dal lavoro.

Nella mia lunga ricerca ho trovato 1 altro post che si riferisce anche a questo problema, ma non è una risposta, solo un po 'di più la prova del mio problema PictureCallback not called unless using supportedsizes[0]

Grazie

+0

Amico !! Ho lo stesso problema qui. Ho trascorso due giorni su questo, e ancora non so perché sta producendo un'immagine allungata – pintaf

risposta

0

provare a impostare la dimensione della vostra surfaceview in base al rapporto tra i parametri della fotocamera che stai utilizzando.

3

Questo metodo calcola la migliore (per me) dimensione dello schermo per ciascun dispositivo. Ma, ho lo stesso problema come te quando ho provato questo codice nel Nexus 4. Quindi, la mia soluzione è di avere un caso speciale alla fine di questo metodo che ottiene la larghezza del nexus 4 e calcola l'altezza migliore per questo dispositivo.

L'ultimo caso potrebbe essere utilizzato in tutti i dispositivi. Potresti cancellare la prima parte del metodo.

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

sul Nexus 4, c'è un problema sfortunato in cui il rapporto di aspetto di anteprima e il formato dell'immagine ancora sono legate insieme, anche se non si scatta una foto. Se non corrispondono, uno dei due viene distorto (in genere in anteprima, poiché è la risoluzione più bassa).

Se si desidera utilizzare un'anteprima 4: 3, configurare le dimensioni dell'immagine fissa anche su 4: 3, prima di avviare l'anteprima. Ad esempio, l'anteprima 640x480 con una dimensione di immagine 8 MP completa (3264 x 2448) su N4 non dovrebbe causare alcun allungamento per l'anteprima.

Utilizzare Camera.Parameters.setPictureSize per selezionare la dimensione dell'immagine; l'elenco delle taglie disponibili può essere letto da Camera.Parameters.getSupportedPictureSizes.

+0

Questo sembra essere un problema su tutti i modelli nexus. –

+0

entrambi i suggerimenti di @Eddy Talvala e beni mi hanno aiutato a risolvere il mio problema. Grazie. Anche grazie a Iain per aver fatto questa domanda. –

Problemi correlati