2012-06-30 43 views
5

Tôi đang sử dụng DroidX để phát triển ứng dụng sử dụng hình ảnh xem trước của máy ảnh. Mã tôi đang sử dụng được tìm thấy ở nhiều nơi trên web nhưng tôi nhận thấy rằng phương pháp phổ biến "getBestPreviewSize (chiều rộng, chiều cao, camera.parameters)" đang trở về kích thước nhỏ như vậy mà phương thức decodeYUV420SP tiêu chuẩn không có ngoại lệ con trỏ null.GetSupportedPreviewSize trả về chiều rộng và chiều cao ngược

Một số lỗi tiết lộ supportedPreviewSizes cho DroidX của tôi là:

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

Lưu ý rằng các giá trị của chiều cao và chiều rộng cho phối cảnh ngang. Điều này không thay đổi theo hướng camera. Chiều rộng và chiều cao của bề mặt được chuyển đến getBestSupportedPreviewSizes là 480w x 778h.

Khi tôi chuyển máy ảnh.parameters đến getBestSupportedPreviewSizes() nó trả về kích thước 288 x 352. Đây là mã gọi - Tôi xin lỗi nếu định dạng là tắt nhưng ở đây là đi:

 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; 
     } 
    } 

pwidthpheight là từ chiều rộng và chiều cao thông số các surfaceChanged callback của. Tôi đã thử camera.setDisplayOrientation (90); trong onResume(). Tôi cũng đã đặt định hướng ("Chân dung") trong tệp kê khai - không có trong số 4 kết hợp của những lần thử này dường như thay đổi hành vi này.

Suy nghĩ của tôi chỉ đơn giản là đảo ngược chúng, nhưng nó cảm thấy sai trên rất nhiều cấp độ. Kể từ khi mã tự do này có vẻ như đã chứng minh bản thân trong rất nhiều ví dụ khác, tôi rõ ràng là tiếp cận nó sai. Bất cứ ai có thể cung cấp một số cái nhìn sâu sắc cho hành vi này?

Xin cảm ơn trước.

Trả lời

3

Cách thích hợp để suy nghĩ về máy ảnh ở chế độ nằm ngang, điều này có nghĩa là khi bạn đang nghĩ về nó ở chế độ dọc, chiều rộng và chiều cao cảm thấy "lộn xộn".

Chức năng getBestPreviewSize(w, h, p) chỉ đơn giản là trình bao bọc xung quanh chức năng getSupportedPreviewSizes() của Camera.Parameters, vì vậy chiều rộng và chiều cao được truyền sẽ không làm thay đổi kết quả của hàm bestPreviewSize.

+0

Cảm ơn Daniel. Tôi là một chút bối rối mặc dù. Khi tôi hiểu nó, chúng tôi vượt qua kích thước bề mặt để getBestPreviewSizes() và nó trả về chiều rộng và chiều cao phù hợp nhất để đặt xem trước với. Vì vậy, nếu chiều rộng nhỏ hơn chiều cao (như ở chế độ dọc), thì chiều rộng được trả lại sẽ nhỏ hơn chiều cao của máy ảnh hoặc chiều cao được trả về sẽ nhỏ hơn chiều rộng của máy ảnh. Vì vậy, tôi không hiểu làm thế nào nó không ảnh hưởng đến kết quả của hàm getBestPreviewSize. Tôi đang thiếu gì trong suy nghĩ của mình? – bob

+0

Hầu hết các getBestPreviewSizes() fns tôi đã thấy trực tuyến chỉ sử dụng chiều rộng và chiều cao để tìm kích thước xem trước có tỷ lệ khung hình tốt. Tỷ lệ khung hình là như nhau bất kể có hay không chiều cao và chiều rộng được lật. –

+0

đã làm điều này trả lời câu hỏi của bạn? –

Các vấn đề liên quan