„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > 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?

Veröffentlicht am 25.11.2024
Durchsuche:958

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:

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

In diesem verbesserten 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 in das zu schreiben ByteArrayOutputStream.
  • Abschließend konvertiert die toByteArray()-Methode den Inhalt des ByteArrayOutputStream in ein Byte-Array.

Mit diesem Ansatz können Sie ein Bitmap-Objekt effektiv in ein Byte-Array ohne konvertieren Es tritt ein Pufferunterlaufproblem auf.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3