wake-up-neo.com

Konvertieren von Bitmaps nach byteArray android

Ich habe eine Bitmap, die ich an den Server senden möchte, indem ich sie in base64 codiere, aber ich möchte das Bild weder in png noch in jpeg komprimieren.

Was ich vorher tat, war jetzt.

ByteArrayOutputStream byteArrayBitmapStream = new ByteArrayOutputStream();
bitmapPicture.compress(Bitmap.CompressFormat.PNG, COMPRESSION_QUALITY, byteArrayBitmapStream);
byte[] b = byteArrayBitmapStream.toByteArray();
//then simple encoding to base64 and off to server
encodedImage = Base64.encodeToString(b, Base64.NO_WRAP);

Jetzt möchte ich einfach keine Komprimierung und kein einfaches Byte-Format [] aus der Bitmap verwenden, das ich codieren und an den Server senden kann.

Irgendwelche Hinweise?

48
Asad Khan

Sie können copyPixelsToBuffer() verwenden, um die Pixeldaten in ein Buffer zu verschieben, oder Sie können getPixels() und verwenden Konvertieren Sie dann die Ganzzahlen in Bytes mit Bitverschiebung.

copyPixelsToBuffer() ist wahrscheinlich das, was Sie verwenden möchten. Hier ist ein Beispiel, wie Sie es verwenden können:

//b is the Bitmap

//calculate how many bytes our image consists of.
int bytes = b.getByteCount();
//or we can calculate bytes this way. Use a different value than 4 if you don't use 32bit images.
//int bytes = b.getWidth()*b.getHeight()*4; 

ByteBuffer buffer = ByteBuffer.allocate(bytes); //Create a new buffer
b.copyPixelsToBuffer(buffer); //Move the byte data to the buffer

byte[] array = buffer.array(); //Get the underlying array containing the data.
132
Jave

anstelle der folgenden Zeile in @jave antworte:

int bytes = b.getByteCount();

Verwenden Sie die folgende Zeile und Funktion:

int bytes = byteSizeOf(b);

protected int byteSizeOf(Bitmap data) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB_MR1) {
    return data.getRowBytes() * data.getHeight();
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KitKat) {
    return data.getByteCount();
} else {
      return data.getAllocationByteCount();
}
7
BitmapCompat.getAllocationByteCount(bitmap);

ist hilfreich, um die erforderliche Größe des ByteBuffers zu ermitteln

4