Convertir mapa de bits en byteArray android
Tengo un mapa de bits que quiero enviar al servidor por la codificación a base64, pero no quiero comprimir la imagen en png o jpeg.
Ahora lo que estaba haciendo anteriormente era.
- Mapa de bits a gran error se queja de dos veces el tamaño de la imagen
- Lona: intentando usar un mapa de bits reciclado de Android
- Dibujo punteado (...) camino en lugar de una línea (________)
- Cómo dibujar Bitmap rápido en el método onDraw () en el lienzo android
- Android Carga de mapa de bits de error de memoria Galaxy S3 WXGA
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 solo no quiero usar ninguna compresión ni ningún formato de simple byte [] de bitmap que puedo codificar y enviar al servidor.
¿Algún puntero?
- Extraños resultados al comprimir lote de imágenes con libjpegturbo
- Canvas.drawBitmap () tarda más tiempo en dibujar el mapa de bits por primera vez mientras que el mosaico del mapa de bits
- ¿Hay alguna forma de obtener el Rect en el que Bitmap se dibuja en Android?
- Disminuye el tamaño de la imagen sin perder su calidad en Android
- La imagen no está creando usando el BitmapFactory.decodeByteArray
- GoogleMaps GroundOverlay parpadea mis imágenes
- Cómo convertir Bitmap a Base64 String
- Combinar imágenes en android
Puede utilizar copyPixelsToBuffer()
para mover los datos de píxeles a un Buffer
, o puede utilizar getPixels()
y convertir los enteros en bytes con desplazamiento de bit.
copyPixelsToBuffer()
es probablemente lo que querrás usar, así que aquí hay un ejemplo de cómo puedes 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 @jave:
int bytes = b.getByteCount();
Utilice la línea y la función siguientes:
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
- Android Spinner con diferentes diseños para "drop down state" y "closed state"?
- Reemplazar la actividad actual