Tôi có ứng dụng C++ giao tiếp với máy ảnh và tìm nạp dữ liệu hình ảnh thô. Tôi sau đó có một Byte [] trong C++, mà tôi muốn gửi đến Java với JNI.Cách tạo tệp BMP từ byte thô [] trong Java
Tuy nhiên, tôi cần chuyển đổi Byte thô [] thành định dạng tệp thực (.bmp là lựa chọn đầu tiên của tôi). Tôi có thể dễ dàng làm điều này nếu tôi viết nó từ C++ vào một tập tin trên ổ đĩa cứng, bằng cách sử dụng BITMAPFILEINFO và BITMAPHEADERINFO, nhưng tôi không biết làm thế nào người ta sẽ gửi về toàn bộ định dạng cho Java. Sau đó tôi nghĩ về việc gửi dữ liệu byte thô [] bằng cách sử dụng JNI và sau đó chuyển đổi nó thành .bmp, nhưng tôi dường như không thể tìm thấy bất kỳ thư viện nào tốt để làm điều này trong Java.
Điều gì sẽ là lựa chọn tốt nhất của tôi? Chuyển đổi hình ảnh trong C++ và sau đó gửi nó bằng cách sử dụng JNI hoặc gửi dữ liệu RAW sang Java và sau đó chuyển đổi nó sang .bmp? Làm thế nào tôi sẽ đạt được điều này dễ dàng nhất?
Giải pháp này không hiệu quả đối với tôi. hình ảnh luôn được trả về dưới dạng null. Vì vậy, ImageIO.write ném ngoại lệ. Mảng byte của tôi là dữ liệu hình ảnh Y thô. Bạn có thể xây dựng thêm? –
Bạn có chắc chắn rằng byteArray của bạn là một hình ảnh hợp lệ không? Tôi nghĩ cách duy nhất để có được 'image == null' là nếu không có đăng ký ImageReader nào có thể giải mã luồng của bạn. Vì vậy, tôi đoán là đó là một loại tệp không được hỗ trợ hoặc dữ liệu bị hỏng. – Stroboskop
Dữ liệu hình ảnh YUV của nó với tỷ lệ 4: 0: 0. –