Java ビットマップをバイト配列に変換できません
コード スニペットは、さらなる処理のために Java ビットマップをバイト配列に変換しようとします。ただし、ビットマップ ピクセルをバッファにコピーしようとすると、予期しないエラーが発生します。コピーされたデータは一貫してすべて 0 を返します。この問題は、カメラからビットマップが不変として返されたにもかかわらず発生します。
根本的な問題を理解するには、次の点を考慮してください。
bmp.copyPixelsToBuffer(b); byte[] bytes = new byte[size]; try { b.get(bytes, 0, bytes.length); } catch (BufferUnderflowException e) { // always happens }
copyPixelsToBuffer メソッドは、ビットマップからピクセル データをコピーします。提供されたバッファ。ただし、バッファ サイズが正しくないため、バッファ アンダーフロー例外が発生します。この問題を解決するには、size:
byte[] bytes = new byte[b.limit()];
の代わりに、b.limit() によって返されるバッファのサイズを使用します。また、バッファ アンダーフロー例外を処理するための条件付きロジックは必要ありません。バッファーのサイズが常に不足しているため、例外は条件に関係なく発生します。
代替アプローチ
問題のある copyPixelsToBuffer メソッドの代わりに、代替アプローチを使用して変換することを検討してください。ビットマップをバイト配列に変換します:
Bitmap bmp = intent.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); bmp.recycle();
このアプローチでは、ビットマップは PNG 形式のバイト配列に圧縮されます。このメソッドは、ビットマップの有効なバイト配列表現を保証します。
以上がJava コードがビットマップをバイト配列に変換できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。