首頁  >  文章  >  Java  >  為什麼在點陣圖上呼叫 copyPixelsToBuffer() 後緩衝區中的所有位元組都為 0?

為什麼在點陣圖上呼叫 copyPixelsToBuffer() 後緩衝區中的所有位元組都為 0?

Linda Hamilton
Linda Hamilton原創
2024-11-05 10:18:02418瀏覽

Why are all bytes in my buffer 0 after calling copyPixelsToBuffer() on a Bitmap?

Java:將位圖轉換為位元組數組

嘗試使用提供的程式碼將點陣圖物件轉換為位元組數組時,使用者可能會遇到呼叫copyPixelsToBuffer() 後緩衝區中的所有位元組仍為0 的問題。儘管從相機返回的點陣圖是不變的,但它不應該影響複製過程。

潛在的根本原因:

程式碼片段使用 ByteBuffer 類別來分配記憶體並複製位圖的像素進入緩衝區。但是,它直接存取底層緩衝區而沒有正確設定其偏移量。這可能會導致 get() 方法僅傳回 0 個值。

解決方案:

要修正此問題,請考慮使用以下方法:

<code class="java">Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();</code>

在此改進的程式碼:

  • 建立了ByteArrayOutputStream 流,可用於擷取要轉換為位元組數組的資料。
  • 在 Bitmap 物件上呼叫 compress() 方法將其像素轉換為 PNG 格式並將其寫入 ByteArrayOutputStream。
  • 最後,toByteArray() 方法將 ByteArrayOutputStream 的內容轉換為位元組陣列。

透過使用此方法,您可以有效地將 Bitmap 物件轉換為位元組數組,而不會遇到緩衝區下溢問題。

以上是為什麼在點陣圖上呼叫 copyPixelsToBuffer() 後緩衝區中的所有位元組都為 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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