2013-03-12 8 views
13

Nexus Urządzenie 4 Android ver: 4.2.2Nexus 4 Współczynnik podglądu kamery zawsze wymaga 16x9 widoku powierzchni? Dlaczego

nadzieję, że ktoś inny znalazł to i może wyjaśnić jak go rozwiązać ....

Nexus 4 obsługuje następujące rozmiary podglądu -

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() ustawia je, a gdy zadzwonię myCamera.getPreviewSize() otrzymam poprawny, który ustawiłem, ALE .... Jeśli ustawię mój widok powierzchni na taki sam rozmiar, jak mój podgląd kamery, to Dostaję rozciągnięty obraz. na przykład

Tylko jeśli ustawię widok powierzchni na 16x9 (1.77777), otrzymam idealny obraz.

Surface view (1280,720) -> Perfect image 

Jest to jedyne urządzenie, na którym mam ten problem. Proszę, czy ktoś może doradzić, jeśli brakuje mi ustawienia kamery dla trybu pełnoekranowego lub czegoś, co powstrzymuje to działanie.

W moim długich poszukiwaniach znalazłem 1 inny wpis, który odnosi się również do tej kwestii, ale nie odpowiedział, tylko nieco więcej dowodów mojego problemu PictureCallback not called unless using supportedsizes[0]

Thanks

+0

Koleś !! Mam ten sam problem tutaj. Spędziłem dwa dni na tym i nadal nie wiem, dlaczego tworzy rozciągnięty obraz. – pintaf

Odpowiedz

0

Spróbuj ustawić rozmiaru podgląd powierzchni w oparciu o stosunek parametrów kamery, z których korzystasz.

3

Ta metoda oblicza najlepszy (dla mnie) rozmiar ekranu dla każdego urządzenia. Ale mam taki sam problem jak ty, gdy próbowałem tego kodu w Nexusie 4. Więc, moim rozwiązaniem jest posiadanie specjalnego przypadku na końcu tej metody, który pobiera szerokość nexusa 4 i oblicza najlepszą wysokość dla tego urządzenie.

Ostatni przypadek może być używany na wszystkich urządzeniach. Możesz usunąć pierwszą część metody.

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

Na Nexusie 4, jest niefortunny błąd, gdzie stosunek podgląd aspekt i nadal proporcje obrazu są ze sobą powiązane, nawet jeśli nigdy nie zrobić zdjęcie. Jeśli nie pasują, jeden z nich zostaje zniekształcony (zazwyczaj podgląd, ponieważ jest to niższa rozdzielczość).

Jeśli chcesz korzystać z podglądu 4: 3, skonfiguruj również rozmiar obrazu nieruchomego na 4: 3, przed rozpoczęciem podglądu. Na przykład podgląd 640x480 z pełnym rozmiarem obrazu 8MP (3264 x 2448) na N4 nie powinien powodować rozciągania podglądu.

Użyj Camera.Parameters.setPictureSize, aby wybrać rozmiar obrazu; listę dostępnych rozmiarów można odczytać z Camera.Parameters.getSupportedPictureSizes.

+0

To wydaje się być problemem we wszystkich modelach nexus. –

+0

Obie sugestie @Eddy Talvala i beni pomogły mi rozwiązać mój problem. Dziękuję Ci. Również dzięki Iainowi za zadanie tego pytania. –

Powiązane problemy