compress array android bitmap bytearray base64

compress - Convertir bitmap a byteArray android



android bitmap to byte array (3)

Tengo un mapa de bits que deseo enviar al servidor codificándolo en base64 pero no quiero comprimir la imagen en png o jpeg.

Ahora lo que estaba haciendo anteriormente era

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);

Ahora simplemente no quiero usar ninguna compresión ni ningún formato simple byte simple [] de mapa de bits que pueda codificar y enviar al servidor.

¿Alguna sugerencia?


Puede usar copyPixelsToBuffer() para mover los datos de píxeles a un Buffer , o puede usar getPixels() y luego convertir los enteros en bytes con bit-shifting.

copyPixelsToBuffer() es probablemente lo que desea usar, así que aquí hay un ejemplo de cómo puede usarlo:

//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.


en lugar de la siguiente línea en la respuesta de @jave:

int bytes = b.getByteCount();

Use la siguiente línea y función:

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(); }


BitmapCompat.getAllocationByteCount(bitmap);

es útil para encontrar el tamaño requerido de ByteBuffer