Heim >Java >javaLernprogramm >Warum sind alle Bytes in meinem Puffer 0, nachdem ich copyPixelsToBuffer() für eine Bitmap aufgerufen habe?

Warum sind alle Bytes in meinem Puffer 0, nachdem ich copyPixelsToBuffer() für eine Bitmap aufgerufen habe?

Linda Hamilton
Linda HamiltonOriginal
2024-11-05 10:18:02468Durchsuche

Why are all bytes in my buffer 0 after calling copyPixelsToBuffer() on a Bitmap?

Java: Bitmap in Byte-Array konvertieren

Beim Versuch, ein Bitmap-Objekt mit dem bereitgestellten Code in ein Byte-Array zu konvertieren, kann es zu Problemen kommen Ein Problem, bei dem alle Bytes im Puffer nach dem Aufruf von copyPixelsToBuffer() auf 0 bleiben. Trotz der Unveränderlichkeit der von der Kamera zurückgegebenen Bitmap sollte dies keine Auswirkungen auf den Kopiervorgang haben.

Mögliche Grundursache:

Das Code-Snippet verwendet die ByteBuffer-Klasse, um Speicher zuzuweisen und die Bitmaps zu kopieren Pixel in den Puffer. Es greift jedoch direkt auf einen zugrunde liegenden Puffer zu, ohne dessen Offset korrekt festzulegen. Dies kann dazu führen, dass die get()-Methode nur 0 Werte zurückgibt.

Lösung:

Um dieses Problem zu beheben, sollten Sie den folgenden Ansatz in Betracht ziehen:

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

Hier verbesserter Code:

  • Ein ByteArrayOutputStream-Stream wird erstellt, der zum Erfassen von Daten verwendet werden kann, die in ein Byte-Array konvertiert werden sollen.
  • Die Methode compress() wird für das Bitmap-Objekt aufgerufen um seine Pixel in das PNG-Format zu konvertieren und sie in den ByteArrayOutputStream zu schreiben.
  • Schließlich konvertiert die toByteArray()-Methode den Inhalt des ByteArrayOutputStream in ein Byte-Array.

Mit diesem Ansatz Sie können ein Bitmap-Objekt effektiv in ein Byte-Array konvertieren, ohne dass das Problem des Pufferunterlaufs auftritt.

Das obige ist der detaillierte Inhalt vonWarum sind alle Bytes in meinem Puffer 0, nachdem ich copyPixelsToBuffer() für eine Bitmap aufgerufen habe?. 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