無法將Java 位圖轉換為位元組數組
此程式碼片段致力於將Java 位圖轉換為位元組數組以進行進一步處理。但是,嘗試將位元圖像素複製到緩衝區時會發生意外錯誤。複製的資料始終傳回全零。儘管從相機返回的點陣圖是不可變的,但還是會出現此問題。
要了解根本問題,請考慮以下事項:
bmp.copyPixelsToBuffer(b); byte[] bytes = new byte[size]; try { b.get(bytes, 0, bytes.length); } catch (BufferUnderflowException e) { // always happens }
copyPixelsToBuffer 方法將像素資料從點陣圖複製到提供的緩衝區。但緩衝區大小不正確,導致緩衝區下溢異常。要解決此問題,請使用 b.limit() 傳回的緩衝區大小而不是 size:
byte[] bytes = new byte[b.limit()];
此外,處理緩衝區下溢異常的條件邏輯不是必需的。無論條件如何,都會發生異常,因為緩衝區始終尺寸不足。
替代方法
不要使用有問題的copyPixelsToBuffer 方法,請考慮使用替代方法進行轉換位圖轉換為位元組數組:
Bitmap bmp = intent.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); bmp.recycle();
在此方法中,位圖被壓縮為PNG 格式的位元組數組。此方法保證位圖的有效位元組數組表示。
以上是為什麼我的 Java 程式碼無法將點陣圖轉換為位元組數組?的詳細內容。更多資訊請關注PHP中文網其他相關文章!