Rumah  >  Artikel  >  Java  >  Mengapa Kod Java Saya Gagal Menukar Bitmap kepada Tatasusunan Byte?

Mengapa Kod Java Saya Gagal Menukar Bitmap kepada Tatasusunan Byte?

Linda Hamilton
Linda Hamiltonasal
2024-11-05 14:53:02404semak imbas

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

Tidak Dapat Menukar Peta Bit Java kepada Tatasusunan Byte

Coretan kod berusaha untuk menukar peta bit Java kepada tatasusunan bait untuk pemprosesan selanjutnya. Walau bagaimanapun, ralat yang tidak dijangka berlaku apabila cuba menyalin piksel peta bit ke penimbal. Data yang disalin secara konsisten mengembalikan semua sifar. Isu ini timbul walaupun peta bit dikembalikan daripada kamera sebagai tidak boleh diubah.

Untuk memahami masalah asas, pertimbangkan perkara berikut:

  bmp.copyPixelsToBuffer(b);

  byte[] bytes = new byte[size];

  try {
     b.get(bytes, 0, bytes.length);
  } catch (BufferUnderflowException e) {
     // always happens
  }

Kaedah copyPixelsToBuffer menyalin data piksel daripada peta bit ke dalam penimbal yang disediakan. Walau bagaimanapun, saiz penimbal adalah tidak betul, yang membawa kepada pengecualian aliran bawah penimbal. Untuk menyelesaikan isu ini, gunakan saiz penimbal yang dikembalikan oleh b.limit() dan bukannya saiz:

byte[] bytes = new byte[b.limit()];

Selain itu, logik bersyarat untuk mengendalikan pengecualian aliran bawah penimbal tidak diperlukan. Pengecualian akan berlaku tanpa mengira keadaan, kerana penimbal sentiasa bersaiz kecil.

Pendekatan Alternatif

Daripada kaedah copyPixelsToBuffer yang bermasalah, pertimbangkan untuk menggunakan pendekatan alternatif untuk menukar peta bit kepada tatasusunan bait:

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

Dalam pendekatan ini, peta bit dimampatkan ke dalam tatasusunan bait berformat PNG. Kaedah ini menjamin perwakilan tatasusunan bait yang sah bagi peta bit.

Atas ialah kandungan terperinci Mengapa Kod Java Saya Gagal Menukar Bitmap kepada Tatasusunan Byte?. 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