首頁 > Java > java教程 > 主體

為什麼使用 copyPixelsToBuffer 轉換位圖後我的位元組數組包含零?

Patricia Arquette
發布: 2024-11-06 15:45:02
原創
279 人瀏覽過

Why Does My Byte Array Contain Zeros After Converting a Bitmap Using copyPixelsToBuffer?

透過位元組陣列轉換保留位圖資料

點陣圖操作是Android 開發中的常見任務,通常涉及將位圖轉換為位元組數組以進行資料儲存或傳輸。然而,一些開發人員在嘗試執行此轉換時遇到困難,導致出現以下問題:

問:為什麼使用 copyPixelsToBuffer 轉換位圖後複製的位元組數組用零填充?

提供的程式碼片段示範了使用 copyPixelsToBuffer 將點陣圖轉換為位元組數組的嘗試,但產生的緩衝區僅包含零。為了理解這個問題的原因,我們來分析一下程式碼:

  • 位圖是從 Intent 中取得的。
  • 它的大小是使用位圖的高度和行位元組來計算的。
  • 分配計算出的大小的 ByteBuffer。
  • 呼叫 copyPixelsToBuffer 將位元圖像素複製到緩衝區。
  • 建立相同大小的位元組數組。
  • 緩衝區被檢索到位元組數組。

經過進一步檢查,很明顯問題出在 copyPixelsToBuffer 方法本身。當使用不可變位圖時,它不會執行實際的像素複製,而是傳回重複的參考。因此,對位圖的任何後續修改都不會反映在複製的緩衝區中。

解:點陣圖轉換的替代方法

要有效地將點陣圖轉換為位元組數組,有一個替代方法必須受僱。一種可靠的方法是使用 PNG 或 JPEG 等格式壓縮位圖,並將壓縮資料儲存在位元組數組中。以下是範例:

Bitmap bmp = intent.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();
bmp.recycle();
登入後複製

此程式碼片段遵循以下步驟:

  • 使用 ByteArrayOutputStream 將點陣圖壓縮為 PNG 或 JPEG 格式。
  • 取得將資料壓縮為位元組數組。
  • 轉換完成後釋放原始位圖。

請記住,也可以使用 BitmapFactory 類別從位元組陣列中擷取點陣圖資料:

BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);
登入後複製

以上是為什麼使用 copyPixelsToBuffer 轉換位圖後我的位元組數組包含零?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板