Rumah >Java >javaTutorial >Mengapakah semua bait dalam penimbal saya 0 selepas memanggil copyPixelsToBuffer() pada Bitmap?

Mengapakah semua bait dalam penimbal saya 0 selepas memanggil copyPixelsToBuffer() pada Bitmap?

Linda Hamilton
Linda Hamiltonasal
2024-11-05 10:18:02458semak imbas

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

Java: Menukar Bitmap kepada Array Byte

Apabila cuba menukar objek Bitmap kepada tatasusunan bait menggunakan kod yang disediakan, pengguna mungkin menghadapi isu di mana semua bait dalam penimbal kekal pada 0 selepas memanggil copyPixelsToBuffer(). Walaupun kebolehubahan Bitmap yang dikembalikan daripada kamera, ia tidak sepatutnya menjejaskan proses penyalinan.

Punca Punca Potensi:

Coretan kod menggunakan kelas ByteBuffer untuk memperuntukkan memori dan menyalin Bitmap piksel ke dalam penimbal. Walau bagaimanapun, ia terus mengakses penimbal asas tanpa menetapkan offsetnya dengan betul. Ini mungkin menyebabkan kaedah get() hanya mengembalikan 0 nilai.

Penyelesaian:

Untuk membetulkan isu ini, pertimbangkan untuk menggunakan pendekatan berikut:

<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>

Dalam ini kod yang dipertingkatkan:

  • Strim ByteArrayOutputStream dicipta, yang boleh digunakan untuk menangkap data untuk ditukar kepada tatasusunan bait.
  • Kaedah compress() digunakan pada objek Bitmap untuk menukar pikselnya kepada format PNG dan menulisnya ke dalam ByteArrayOutputStream.
  • Akhir sekali, kaedah toByteArray() menukarkan kandungan ByteArrayOutputStream kepada tatasusunan bait.

Dengan menggunakan pendekatan ini, anda boleh menukar objek Bitmap kepada tatasusunan bait dengan berkesan tanpa menghadapi isu aliran bawah penimbal.

Atas ialah kandungan terperinci Mengapakah semua bait dalam penimbal saya 0 selepas memanggil copyPixelsToBuffer() pada Bitmap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn