2013-03-12 34 views
13

Nexus Device 4 ver Android: 4.2.2Khía cạnh xem trước Nexus 4 Máy ảnh Tỷ lệ luôn yêu cầu truy cập bằng sóng quang 16x9? Tại sao

Hy vọng ai đó đã thấy điều này và có thể giải thích làm thế nào để giải quyết nó ....

Nexus 4 hỗ trợ các kích thước xem trước sau: -

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() đặt chúng, và khi tôi gọi myCamera.getPreviewSize() Tôi nhận được đúng bộ tôi đã đặt, NHƯNG .... Nếu tôi đặt chế độ xem bề mặt của mình với cùng kích thước như xem trước máy ảnh thì Tôi nhận được một hình ảnh kéo dài. ví dụ.

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

Chỉ khi tôi đặt chế độ xem Bề mặt thành 16x9 (1,77777) để tôi có được hình ảnh hoàn hảo.

Surface view (1280,720) -> Perfect image 

Đây là thiết bị duy nhất mà tôi gặp sự cố này. Xin vui lòng ai đó có thể tư vấn nếu có một thiết lập máy ảnh tôi đang thiếu cho chế độ toàn màn hình hoặc một cái gì đó mà ngăn chặn điều này làm việc.

Trong cuộc tìm kiếm dài của tôi, tôi tìm thấy 1 bài khác cũng liên quan đến vấn đề này, nhưng không phải là một câu trả lời, chỉ cần thêm bằng chứng một chút vấn đề của tôi PictureCallback not called unless using supportedsizes[0]

Cảm ơn

+0

Dude !! Tôi có cùng một vấn đề ở đây. Đã trải qua hai ngày về điều này, và tôi vẫn không biết tại sao nó tạo ra một hình ảnh kéo dài – pintaf

Trả lời

0

Hãy thử thiết lập kích thước của bạn surfaceview dựa trên tỷ lệ của các thông số máy ảnh mà bạn đang sử dụng.

3

Phương pháp này tính toán kích thước màn hình tốt nhất (cho tôi) cho từng thiết bị. Nhưng, tôi có cùng một vấn đề giống như bạn khi tôi thử mã này trong Nexus 4. Vì vậy, giải pháp của tôi là có một trường hợp đặc biệt ở cuối phương thức này có chiều rộng của nexus 4 và tính toán chiều cao tốt nhất cho điều này thiết bị.

Trường hợp cuối cùng có thể được sử dụng trong tất cả các thiết bị. Bạn có thể xóa phần đầu tiên của phương thức.

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

Trên Nexus 4, có một vấn đề không may khi tỉ lệ khung hình xem trước và tỷ lệ hình ảnh tĩnh được gắn với nhau, ngay cả khi bạn không chụp ảnh. Nếu chúng không khớp, một trong hai bị bóp méo (thường là xem trước, vì nó là độ phân giải thấp hơn).

Nếu bạn muốn sử dụng bản xem trước 4: 3, hãy định cấu hình kích thước ảnh tĩnh là 4: 3, trước khi bắt đầu xem trước. Ví dụ: bản xem trước 640x480 có kích thước hình ảnh 8MP đầy đủ (3264 x 2448) trên N4 sẽ không bị kéo giãn để xem trước.

Sử dụng Camera.Parameters.setPictureSize để chọn kích thước hình ảnh; danh sách các kích thước có sẵn có thể được đọc từ Camera.Parameters.getSupportedPictureSizes.

+0

Điều này có vẻ là một vấn đề trên tất cả các mô hình nexus. –

+0

cả gợi ý của @Eddy Talvala và beni đã giúp tôi khắc phục sự cố của mình. Cảm ơn bạn. Cũng nhờ Iain đã đặt câu hỏi này. –