首頁 >Java >java教程 >為什麼我的 Java 程式碼無法將點陣圖轉換為位元組數組?

為什麼我的 Java 程式碼無法將點陣圖轉換為位元組數組?

Linda Hamilton
Linda Hamilton原創
2024-11-05 14:53:02490瀏覽

Why Does My Java Code Fail to Convert a Bitmap to a Byte Array?

無法將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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn