Java-Bitmap kann nicht in Byte-Array konvertiert werden
Das Code-Snippet versucht, eine Java-Bitmap zur weiteren Verarbeitung in ein Byte-Array zu konvertieren. Beim Versuch, die Bitmap-Pixel in den Puffer zu kopieren, tritt jedoch ein unerwarteter Fehler auf. Die kopierten Daten geben durchweg ausschließlich Nullen zurück. Dieses Problem tritt auf, obwohl die Bitmap von der Kamera als unveränderlich zurückgegeben wird.
Um das zugrunde liegende Problem zu verstehen, beachten Sie Folgendes:
bmp.copyPixelsToBuffer(b); byte[] bytes = new byte[size]; try { b.get(bytes, 0, bytes.length); } catch (BufferUnderflowException e) { // always happens }
Die Methode copyPixelsToBuffer kopiert die Pixeldaten aus der Bitmap in den bereitgestellten Puffer. Die Puffergröße ist jedoch falsch, was zu einer Pufferunterlaufausnahme führt. Um dieses Problem zu beheben, verwenden Sie die Größe des von b.limit() zurückgegebenen Puffers anstelle von size:
byte[] bytes = new byte[b.limit()];
Außerdem ist die bedingte Logik zur Behandlung der Pufferunterlaufausnahme nicht erforderlich. Die Ausnahme tritt unabhängig von der Bedingung auf, da der Puffer immer zu klein ist.
Alternativer Ansatz
Anstelle der problematischen copyPixelsToBuffer-Methode sollten Sie einen alternativen Ansatz zum Konvertieren in Betracht ziehen die Bitmap in ein Byte-Array:
Bitmap bmp = intent.getExtras().get("data"); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); byte[] byteArray = stream.toByteArray(); bmp.recycle();
Bei diesem Ansatz wird die Bitmap in ein PNG-formatiertes Byte-Array komprimiert. Diese Methode garantiert eine gültige Byte-Array-Darstellung der Bitmap.
Das obige ist der detaillierte Inhalt vonWarum kann mein Java-Code eine Bitmap nicht in ein Byte-Array konvertieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!