Heim  >  Artikel  >  Java  >  Warum enthält mein Byte-Array nach der Konvertierung einer Bitmap mit copyPixelsToBuffer Nullen?

Warum enthält mein Byte-Array nach der Konvertierung einer Bitmap mit copyPixelsToBuffer Nullen?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-06 15:45:02211Durchsuche

Why Does My Byte Array Contain Zeros After Converting a Bitmap Using copyPixelsToBuffer?

Bewahrung von Bitmap-Daten mit Byte-Array-Konvertierungen

Bitmap-Manipulation ist eine häufige Aufgabe in der Android-Entwicklung und umfasst häufig die Konvertierung von Bitmaps in Byte-Arrays zur Datenspeicherung oder -übertragung. Allerdings stoßen einige Entwickler beim Versuch, diese Konvertierung durchzuführen, auf Schwierigkeiten, was zu der folgenden Frage führt:

F: Warum wird das kopierte Byte-Array nach der Konvertierung einer Bitmap mit copyPixelsToBuffer mit Nullen gefüllt?

Das bereitgestellte Code-Snippet zeigt einen Versuch, eine Bitmap mit copyPixelsToBuffer in ein Byte-Array zu konvertieren, aber der resultierende Puffer enthält nur Nullen. Um die Ursache dieses Problems zu verstehen, analysieren wir den Code:

  • Die Bitmap wird von einer Absicht abgerufen.
  • Seine Größe wird anhand der Höhe und der Zeilenbytes der Bitmap berechnet.
  • Ein ByteBuffer wird mit der berechneten Größe zugewiesen.
  • copyPixelsToBuffer wird aufgerufen, um die Bitmap-Pixel in den Puffer zu kopieren.
  • Ein Byte-Array derselben Größe wird erstellt.
  • Der Puffer wird in das Byte-Array abgerufen.

Bei weiterer Untersuchung wird deutlich, dass das Problem in der Methode copyPixelsToBuffer selbst liegt. Bei Verwendung einer unveränderlichen Bitmap wird keine tatsächliche Pixelkopie durchgeführt, sondern eine doppelte Referenz zurückgegeben. Daher werden alle nachfolgenden Änderungen an der Bitmap nicht im kopierten Puffer widergespiegelt.

Lösung: Alternative Methode zur Bitmap-Konvertierung

Um eine Bitmap effektiv in ein Byte-Array zu konvertieren, eine alternative Methode müssen beschäftigt werden. Ein zuverlässiger Ansatz besteht darin, die Bitmap mit einem Format wie PNG oder JPEG zu komprimieren und die komprimierten Daten in einem Byte-Array zu speichern. Hier ist ein Beispiel:

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

Dieser Codeausschnitt folgt diesen Schritten:

  • Komprimiert die Bitmap mithilfe des ByteArrayOutputStream in ein PNG- oder JPEG-Format.
  • Erhält die komprimierte Daten als Byte-Array.
  • Gibt die ursprüngliche Bitmap frei, nachdem die Konvertierung abgeschlossen ist.

Beachten Sie, dass Bitmap-Daten auch aus einem Byte-Array mithilfe der BitmapFactory-Klasse abgerufen werden können:

BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

Das obige ist der detaillierte Inhalt vonWarum enthält mein Byte-Array nach der Konvertierung einer Bitmap mit copyPixelsToBuffer Nullen?. 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