Android byte array to Bitmap Cómo

¿Cómo puedo convertir matriz de bytes recibida utilizando socket.

  1. El cliente de C ++ envía los datos de la imagen que es del tipo uchar.

  2. En el lado androide estoy recibiendo este array uchar como byte [], que va desde -128 a +127.

Lo que quería hacer es que reciba estos datos y lo muestre. Para eso estaba tratando de convertir a Bitmap utilizando BitmapFactory.decodeByteArray() , pero no hay suerte que estoy recibiendo nulo Bitmap. ¿Estoy haciendo bien o cualquier otro método disponible.

Gracias por adelantado….

Lo he estado usando como abajo en uno de mis proyectos y hasta ahora ha sido bastante sólido. No estoy seguro de lo exigente que es en la medida en que no se comprime como un PNG sin embargo.

 byte[] bytesImage; Bitmap bmpOld; // Contains original Bitmap Bitmap bmpNew; ByteArrayOutputStream baoStream = new ByteArrayOutputStream(); bmpOld.compress(Bitmap.CompressFormat.PNG, 100, baoStream); bytesImage = baoStream.toByteArray(); bmpNew = BitmapFactory.decodeByteArray(bytesImage, 0, bytesImage.length); 

Editar: He adaptado el código de esta publicación para utilizar RGB, por lo que el código de abajo debe funcionar para usted. No he tenido la oportunidad de probarlo aún así puede que necesite algún ajuste.

 Byte[] bytesImage = {0,1,2, 0,1,2, 0,1,2, 0,1,2}; int intByteCount = bytesImage.length; int[] intColors = new int[intByteCount / 3]; int intWidth = 2; int intHeight = 2; final int intAlpha = 255; if ((intByteCount / 3) != (intWidth * intHeight)) { throw new ArrayStoreException(); } for (int intIndex = 0; intIndex < intByteCount - 2; intIndex = intIndex + 3) { intColors[intIndex / 3] = (intAlpha << 24) | (bytesImage[intIndex] << 16) | (bytesImage[intIndex + 1] << 8) | bytesImage[intIndex + 2]; } Bitmap bmpImage = Bitmap.createBitmap(intColors, intWidth, intHeight, Bitmap.Config.ARGB_8888); 

De los comentarios a las respuestas anteriores, parece que desea crear un objeto Bitmap desde una secuencia de valores RGB, no desde cualquier formato de imagen como PNG o JPEG.

Esto probablemente significa que ya conoce el tamaño de la imagen. En este caso, podría hacer algo como esto:

 byte[] rgbData = ... // From your server int nrOfPixels = rgbData.length / 3; // Three bytes per pixel. int pixels[] = new int[nrOfPixels]; for(int i = 0; i < nrOfPixels; i++) { int r = data[3*i]; int g = data[3*i + 1]; int b = data[3*i + 2]; pixels[i] = Color.rgb(r,g,b); } Bitmap bitmap = Bitmap.createBitmap(pixels, width, height, Bitmap.Config.ARGB_8888); 
 InputStream is = new java.net.URL(urldisplay).openStream(); byte[] colors = IOUtils.toByteArray(is); int nrOfPixels = colors.length / 3; // Three bytes per pixel. int pixels[] = new int[nrOfPixels]; for(int i = 0; i < nrOfPixels; i++) { int r = (int)(0xFF & colors[3*i]); int g = (int)(0xFF & colors[3*i+1]); int b = (int)(0xFF & colors[3*i+2]); pixels[i] = Color.rgb(r,g,b); } imageBitmap = Bitmap.createBitmap(pixels, width, height,Bitmap.Config.ARGB_4444); bmImage.setImageBitmap(imageBitmap ); 
  • Cambiar el tamaño de un mapa de bits
  • Lienzo androide eliminar la ruta anterior que se está dibujando
  • ¿Cuándo reciclar mapa de bits en el proyecto android?
  • Cómo obtener el mapa de bits que proporciona un URI, java.io.FileNotFoundException: No hay proveedor de contenido: /sdcard/Hello/1310610722879.jpg
  • Rendimiento de mapa de bits escala android
  • ¿Puedo crear Bitmaps con el Android NDK en C ++ y pasarlos a Java muy rápido?
  • Android usando Renderscript para efectos de desenfoque falla causas A / libc: Fatal señal 7 (SIGBUS), código 2, error addr 0x9e6fa000 en tid 482 (AsyncTask # 1)
  • Cambiar el tamaño de la imagen del archivo
  • Cargar mapa de bits con Picasso
  • Cambiar el tamaño del mapa de bits después de cargarlo con Universal Image Loader
  • Convertir mapa de bits en byteArray android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.