Tôi muốn sử dụng xem trước máy ảnh để nhận dạng hình ảnh. Đối với mục đích của tôi, tôi cần độ phân giải xem trước càng cao càng tốt (và, đồng thời, hiển thị xem trước cho người dùng).Làm thế nào để có được dữ liệu xem trước máy ảnh Android 720p?
Tôi đã tạo lớp Xem trước, mở rộng SurfaceView và đặt PreviewSize thành 1280x720. Tôi đã thêm một PreviewCallBack để có được sống Ảnh:
camera = Camera.open();
parameters = camera.getParameters();
parameters.setPreviewSize(1280,720);
camera.setParameters(parameters);
byte[] b = new byte[camera.getParameters().getPreviewSize().width *
camera.getParameters().getPreviewSize().height *
ImageFormat.getBitsPerPixel(camera.getParameters().getPreviewFormat())/8];
camera.addCallbackBuffer(b);
camera.setPreviewCallbackWithBuffer(new CameraPreviewCallback());
try {
camera.setPreviewDisplay(this.getHolder());
camera.startPreview()
}
My Byte mảng b là 1.382.400 Byte và CameraPreviewCallback.onPreviewFrame() chức năng của tôi nhận được những 1.382.400 Bytes - nhưng chỉ có 497.664 Byte đầu tiên chứa dữ liệu (khớp a Độ phân giải 768x432 (HTC Desire)).
Tôi đã thử nghiệm điều này trên các thiết bị khác nhau, tất cả đều có độ phân giải màn hình 800x480 (HTC Desire, LG Optimus 3D, Samsung Galaxy S2, Samsung Galaxy Tab, ...). Thiết bị duy nhất mà Code của tôi hoạt động là HTC Desire HD.
Có ai biết cách nhận độ phân giải 720p đầy đủ dưới dạng Byte Array không? "Cái gì đó" dường như giảm độ phân giải xem trước để vừa với màn hình điện thoại thông minh.
Trân
Joern
Bạn có chắc chắn rằng điện thoại của mình hỗ trợ 720p không? Logcat có nói bất cứ điều gì (như "không thể thiết lập độ phân giải") không? – Lennart
Đúng, 720p được hỗ trợ trên tất cả các thiết bị dưới dạng kích thước xem trước. Logcat không nói bất cứ điều gì đặc biệt - có vẻ như "cái gì đó" làm giảm độ phân giải xem trước âm thầm. –
Liệu getPreviewSize() có trả lại kích thước chính xác không? – Lennart