2015-07-11 32 views
6

Tôi đã thử nghiệm API Camera2 mới trên Android Lollipop. Tôi muốn tìm nạp kích thước xem trước được hỗ trợ:Máy ảnh Android2 Kích thước đầu ra

StreamConfigurationMap streamConfigurationMap = cameraCharacteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); 
Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); 

và kích thước xem trước tối đa là 1440x1080px trên Samsung Galaxy Tab S có độ phân giải 2560x1600px. Vì vậy, chế độ xem trước của tôi là 1440x1080px và kích thước bề mặt TextureView là 2560x1600px nên hình ảnh bị méo.

Tôi đã thử nghiệm API máy ảnh cũ không được dùng nữa.

Camera.Parameters parameters = camera.getParameters(); 
List<Camera.Size> sizes = parameters.getSupportedPictureSizes(); 

Và mã trên trả về 32 kết hợp varius kích thước xem trước như: 2560x1920, 1920x1080, 1080x1920, 2560x2560 vv Trong trường hợp đó tôi có thể chọn kích thước tối ưu và hiển thị hình ảnh chính xác.

Tôi không biết cách buộc API mới có kích thước tối ưu. Tôi biết rằng giải pháp là thay đổi kích thước chế độ xem hiển thị xem trước, nhưng ứng dụng máy ảnh tích hợp hoạt động ở chế độ toàn màn hình chính xác. Cảm ơn trước cho tất cả các đề xuất!

+0

"Vậy previewSize của tôi là 1440x1080px và TextureView kích thước bề mặt là 2560x1600px nên hình ảnh bị bóp méo" - đó là bởi vì tỉ lệ màn hình của bạn là không giống nhau. Bạn cần phải thực hiện 'TextureView' có cùng tỷ lệ khung hình như hình ảnh xem trước của máy ảnh, chẳng hạn như sử dụng lề âm để kích thước lớn hơn màn hình của bạn trên một trục. – CommonsWare

+0

Tôi biết về điều đó, nhưng tại sao kích thước xem trước quá nhỏ? Trên kích thước xem trước Samsung Galaxy S4 là 1920 x 1080 (giống như độ phân giải) và không có vấn đề gì để hiển thị hình ảnh. – piotrek00

+1

"Tôi biết về điều đó, nhưng tại sao kích thước xem trước quá nhỏ?" - bạn sẽ phải hỏi Samsung, tôi nghi ngờ. – CommonsWare

Trả lời

1

thay

Size[] sizes = streamConfigurationMap.getOutputSizes(SurfaceTexture.class); 

để

Size[] sizes = streamConfigurationMap.getOutputSizes(ImageFormat.JPEG) 
+0

Tôi không chắc chắn 100%, nhưng điều này sẽ cung cấp cho bạn kích thước được hỗ trợ cho các ảnh tĩnh, không phải cho bản xem trước. –

+0

'Kích thước [] getOutputSizes (Lớp klass)' chỉ trả về kích thước cho [PRIVATE] (https://developer.android.com/reference/android/graphics/ImageFormat.html#PRIVATE) định dạng hình ảnh. Một số lớp được hỗ trợ có thể hỗ trợ các định dạng khác ngoài PRIVATE. Ví dụ, ImageReader cũng hỗ trợ YUV_420_888. SurfaceTexture cũng có thể chấp nhận YUV_420_888 hoặc NV21. –

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