วิธีการแปลงไบต์อาร์เรย์เป็น Bitmap


123

ฉันต้องการเก็บภาพSQLite DataBaseไว้ ฉันพยายามจัดเก็บโดยใช้BLOBและStringในทั้งสองกรณีมันจัดเก็บภาพและสามารถเรียกคืนได้ แต่เมื่อฉันแปลงเป็นBitmapโดยใช้ BitmapFactory.decodeByteArray(...)มันกลับเป็นโมฆะ

ฉันใช้รหัสนี้แล้ว แต่กลับเป็นโมฆะ

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

4
โปรดอ่านลิงก์ 5-10 รายการแรกในส่วน "ที่เกี่ยวข้อง" ในหน้านี้
จ้า

2
คุณเข้ารหัสบิตแมปก่อนเขียนลงฐานข้อมูลหรือไม่?
Ronnie

คำตอบ:


284

ลองทำสิ่งนี้:

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();

ถ้าbitmapdataเป็นอาร์เรย์ไบต์การBitmapทำเช่นนี้:

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

ส่งคืนการถอดรหัสBitmapหรือnullหากไม่สามารถถอดรหัสภาพได้


2
ไม่สามารถถอดรหัสภาพได้หากอยู่ในรูปแบบอื่นที่คุณพยายามถอดรหัส
lxknvlk

2
จะเป็นอย่างไรหากต้องดำเนินการดังกล่าวหลายครั้งตามลำดับ การสร้างออบเจ็กต์ Bitmap ใหม่ทุกครั้งใช้ทรัพยากรไม่ใช่หรือ ฉันสามารถถอดรหัสอาร์เรย์ของฉันเป็นบิตแมปที่มีอยู่ได้หรือไม่
Alex Semeniuk

ฉันโพสต์คำตอบที่แตกต่างออกไปเมื่อคุณมีบัฟเฟอร์ของพิกเซลภาพ ฉันได้รับโมฆะเสมอเนื่องจากไม่มีความสูงและสีในบัฟเฟอร์ของฉัน หวังว่าจะช่วยได้!
Julian

31

คำตอบของอุตตมไม่ได้ผลสำหรับฉัน ฉันเพิ่งเป็นโมฆะเมื่อฉันทำ:

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

ในกรณีของฉันบิตแมปดาต้ามีบัฟเฟอร์ของพิกเซลเท่านั้นดังนั้นจึงเป็นไปไม่ได้ที่ฟังก์ชัน decodeByteArray จะคาดเดาความกว้างความสูงและบิตสีที่ใช้ ดังนั้นฉันจึงลองสิ่งนี้และได้ผล:

//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);

ตรวจสอบhttps://developer.android.com/reference/android/graphics/Bitmap.Config.htmlสำหรับตัวเลือกสีต่างๆ


2
mBitmaps คืออะไร?
user924
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.