首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android BitmapFactory.decodeByteArray 回傳 null:位元組陣列非標準圖片格式

     編輯:程式設計綜合問答

問題原因

stra.getBytes("UTF-8") 將字串編碼為 UTF-8 位元組,**並非**圖片檔案的二進位內容(JPEG/PNG/WEBP 標頭)。BitmapFactory 只能解碼標準圖片格式的位元組流。

正確流程:Base64 → 位元組 → Bitmap

若伺服器回傳 Base64 字串:

String base64 = d.getResult().getImage(); // 假設為 Base64
byte[] decoded = Base64.decode(base64, Base64.DEFAULT);
Bitmap bitmap = BitmapFactory.decodeByteArray(decoded, 0, decoded.length);
imageView.setImageBitmap(bitmap);

若為 YUV/原始資料(如相機預覽幀)

YuvImage yuv = new YuvImage(data, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
yuv.compressToJpeg(new Rect(0, 0, width, height), 80, out);
byte[] jpeg = out.toByteArray();
Bitmap bmp = BitmapFactory.decodeByteArray(jpeg, 0, jpeg.length);

關鍵檢查點

  1. Log 印出 data.length 與前 16 位元組 Arrays.toString(Arrays.copyOf(data, 16)),確認是否為 FF D8 FF (JPEG) 或 89 50 4E 47 (PNG)。
  2. 若為加密/壓縮資料,需先解密/解壓再餵給 BitmapFactory。
  3. 大圖解碼加入 BitmapFactory.Options.inSampleSize 避免 OOM。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved