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!