Heim  >  Artikel  >  Java  >  Warum kann mein Java-Code eine Bitmap nicht in ein Byte-Array konvertieren?

Warum kann mein Java-Code eine Bitmap nicht in ein Byte-Array konvertieren?

Linda Hamilton
Linda HamiltonOriginal
2024-11-05 14:53:02403Durchsuche

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

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn