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?
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();
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.