Làm thế nào để chuyển đổi mảng byte thành Bitmap


123

Tôi muốn lưu trữ hình ảnh trong SQLite DataBase. Tôi đã cố gắng lưu trữ nó bằng cách sử dụng BLOBString, trong cả hai trường hợp, nó lưu trữ hình ảnh và có thể truy xuất nó nhưng khi tôi chuyển đổi nó sang Bitmapsử dụng BitmapFactory.decodeByteArray(...)nó thì trả về null.

Tôi đã sử dụng mã này, nhưng nó trả về null

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

4
Vui lòng đọc 5-10 liên kết đầu tiên trong phần "Liên quan" trên trang này.
Mat

2
Bạn đã mã hóa bitmap trước khi ghi vào cơ sở dữ liệu?
Ronnie

Câu trả lời:


284

Chỉ cần thử điều này:

Bitmap bitmap = BitmapFactory.decodeFile("/path/images/image.jpg");
ByteArrayOutputStream blob = new ByteArrayOutputStream();
bitmap.compress(CompressFormat.PNG, 0 /* Ignored for PNGs */, blob);
byte[] bitmapdata = blob.toByteArray();

Nếu bitmapdatalà mảng byte thì việc nhận Bitmapđược thực hiện như sau:

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

Trả về hình ảnh đã được giải mã Bitmaphoặc nullnếu hình ảnh không thể được giải mã.


2
hình ảnh không thể được giải mã nếu nó là ở định dạng khác mà bạn đang cố gắng để giải mã từ
lxknvlk

2
Điều gì sẽ xảy ra nếu tôi cần thực hiện một thao tác như vậy nhiều lần theo trình tự? Mỗi lần tạo đối tượng Bitmap mới có tốn tài nguyên không? Tôi có thể bằng cách nào đó giải mã mảng của mình thành bitmap hiện có không?
Alex Semeniuk,

Tôi đăng một câu trả lời khác khi bạn chỉ có bộ đệm của pixel hình ảnh. Tôi luôn nhận được vô hiệu vì thiếu với, chiều cao và màu sắc trong bộ đệm của tôi. Hy vọng nó giúp!
Julian

31

Câu trả lời của Uttam không phù hợp với tôi. Tôi chỉ nhận được null khi tôi làm:

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

Trong trường hợp của tôi, bitmapdata chỉ có vùng đệm của các pixel, vì vậy hàm decodeByteArray không thể đoán được chiều rộng, chiều cao và các bit màu sử dụng. Vì vậy, tôi đã thử điều này và nó hoạt động:

//Create bitmap with width, height, and 4 bytes color (RGBA)    
Bitmap bmp = Bitmap.createBitmap(imageWidth, imageHeight, Bitmap.Config.ARGB_8888);
ByteBuffer buffer = ByteBuffer.wrap(bitmapdata);
bmp.copyPixelsFromBuffer(buffer);

Kiểm tra https://developer.android.com/reference/android/graphics/Bitmap.Config.html để biết các tùy chọn màu khác nhau


2
mBitmaps là gì?
user924
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.