Java-Bitmap in Byte-Array umwandeln

  Bitmap bmp   = intent.getExtras().get("data");
  int size     = bmp.getRowBytes() * bmp.getHeight();
  ByteBuffer b = ByteBuffer.allocate(size);

  bmp.copyPixelsToBuffer(b);

  byte[] bytes = new byte[size];

  try {
     b.get(bytes, 0, bytes.length);
  } catch (BufferUnderflowException e) {
     // always happens
  }
  // do something with byte[]

Wenn ich mir den Puffer nach dem Aufruf von copyPixelsToBuffer ansehe, sind die Bytes alle 0... Die von der Kamera zurückgegebene Bitmap ist unveränderlich... aber das sollte egal sein, da es sich um eine Kopie handelt.

Was könnte mit diesem Code falsch sein?

Lösung

Versuchen Sie so etwas:

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

Müssen Sie vielleicht den Puffer zurückspulen?

Dies könnte auch passieren, wenn die Schrittweite (in Bytes) der Bitmap größer ist als die Zeilenlänge in Pixeln * Bytes/Pixel. Machen Sie die Länge der Bytes b.remaining() anstelle von size.

Kommentare (1)

Ihr Byte-Array ist zu klein. Jedes Pixel nimmt 4 Bytes ein, nicht nur 1, also multiplizieren Sie Ihre Größe * 4, damit das Array groß genug ist.

Kommentare (1)