2010-07-23 30 views
6

Tôi hỏi nếu có một cách đơn giản vì có một báo cáo vấn đề google nói rằng việc sử dụng decodeByteArray là không thể. Nhưng báo cáo đó bắt nguồn từ năm 2008 và tôi đã hy vọng có một giải pháp không được đăng trên đó. Phương pháp được liệt kê trong báo cáo vấn đề là tự giải mã định dạng, nhưng tôi không muốn đặt nó vào và làm chậm chương trình. Bất kì sự giúp đỡ nào cũng được hoan nghênh.Có cách nào đơn giản để biến mảng byte từ onPreviewFrame của máy ảnh thành hình ảnh trong Android?

Trả lời

3

Cách đơn giản nhất là tạo ra một BufferedImage theo cách sau:

Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0. data.length); 

dữ liệu là mảng byte.

+0

Bạn có chắc chắn hoạt động trong Android không? Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào cho BufferedImage hoặc ImageIO. Nó được liệt kê trong tài liệu tham khảo ngôn ngữ Java nhưng không phải của Android – RyoxSinfar

+0

Có tôi đã sao chép mã sai. Tôi đã sửa đổi câu trả lời của mình. Lấy làm tiếc. – RoflcoptrException

+0

Đó là những gì tôi nghĩ ban đầu câu trả lời là, nhưng nó mang lại cho tôi một bitmap null trở lại. – RyoxSinfar

8

Tôi giả sử mảng byte của bạn là từ bản xem trước máy ảnh? Nếu vậy bạn phải giải mã nó nhưng với 2.2 nó khá dễ dàng bây giờ.

Tạo một hình ảnh YUV từ mảng byte như là dữ liệu sẽ chỉ có trong ImageFormat.NV21(int code 17)

img = new YuvImage(imgData, ImageFormat.NV21, width, height, null); 

Tạo một hình chữ nhật kích thước tương tự như hình ảnh.

Tạo ByteArrayOutputStream và chuyển giá trị này, hình chữ nhật và giá trị nén tới compressToJpeg().

Sau đó, bạn có thể sử dụng

Bitmap mBitmap = BitmapFactory.decodeByteArray(outputStream.toByteArry(),0,outputStream.size()); 

tôi sử dụng này cho mỗi khung trong callback và nó hoạt động tốt. Hi vọng điêu nay co ich.

+0

Bạn có thể hiển thị mã của mình đúng cách không – Nepster

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