Android byte array to Bitmap Cómo
¿Cómo puedo convertir matriz de bytes recibida utilizando socket.
-
El cliente de C ++ envía los datos de la imagen que es del tipo uchar.
-
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….
- Crear Bitmap de byteArray en android
- Canvas.drawBitmap () tarda más tiempo en dibujar el mapa de bits por primera vez mientras que el mosaico del mapa de bits
- ¿Necesita hacer un cierre adicional en un FileOutputStream al utilizar Bitmap.compress ()?
- ¿Hay una manera de cargar y dibujar parcialmente un mapa de bits de archivo en Android?
- BitmapFactory.Options.inBitmap causa desgarro al cambiar mapa de imagen de ImageView a menudo
- Bitmap crear fuera de la memoria
- Cómo convertir vistas a mapas de bits?
- Android tratando de redondear las esquinas de mapa de bits
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 );