Heim > Java > javaLernprogramm > Hauptteil

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

Patricia Arquette
Freigeben: 2024-11-06 15:45:02
Original
228 Leute haben es durchsucht

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();
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!