Lotes de array byte Android
Estoy enviando la imagen a través de Bluetooth pro-gramaticalmente. Cuando envío la imagen como matriz del byte en el lado que envía la longitud del arsenal del byte es = 83402 y en el lado receptor estoy consiguiendo los bactes del byte de 1024.
Quiero combinar estos 1024 lotes en una sola matriz de bytes para que vuelva a convertirlo como una imagen.
- ¿Cómo clasificar las fechas de la fecha actual a la antigua en Android o Java?
- Cómo analizar valores float de cadena utilizando REGEX en java
- Cómo deshabilitar el botón de nuevo presionado en la clase de fragmento de Android
- ¿Cómo puedo implementar un AsyncTaskLoader simple?
- Android - Definir el fondo de la aplicación
Aquí en el msg.obj i obtener 1024 bacth de matriz de bytes.
Case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj; Bitmap bmp=BitmapFactory.decodeByteArray(readBuf,0,readBuf.length);
Después de que también estoy recibiendo esta advertencia ..
"Tamaño del búfer predeterminado utilizado en el constructor BufferedOutputStream. Sería mejor ser explícito si se requiere un búfer de 8 k"
Cualquier ayuda sería apreciada.
Gracias
- No se puede convertir el objeto Subclase en cuerpo de solicitud json en Retrofit 2.0 con GsonConverterFactory
- NullPointerException al configurar la barra de herramientas
- ¿Hay alguna forma de crear beans dinámicos en android?
- Alcance y subcomponentes de Dagger 2
- Establecer el agente de usuario en httpclient de Java y permitir redireccionamientos a true
- Rutinas de cifrado y descifrado de PHP y JAVA
- Cómo configurar el fondo de Android PopupMenu a Blanco
- ¿Cómo implementar PdfRenderer Zoom y Scroll apoyo?
Debe ser más o menos algo como esto:
byte[] readBuf = new byte[83402]; // this array will hold the bytes for the image, this value better be not hardcoded in your code int start = 0; while(/*read 1024 byte packets...*/) { readBuf.copyOfRange((byte[]) msg.obj, start, start + 1024); // copy received 1024 bytes start += 1024; //increment so that we don't overwrite previous bytes } /*After everything is read...*/ Bitmap bmp=BitmapFactory.decodeByteArray(readBuf,0,readBuf.length);
Voy a salir en una extremidad aquí y asumir que está utilizando el ejemplo de BluetoothChat de la sdk para construir su imagen remitente (todos sus ejemplos coinciden con él). Aquí está una conversión rápida que lanzé junto – puede no ser el mejor pero trabaja.
Los está recibiendo en lotes de 1024 porque en la función de ejecución de BluetoothChatService.java crea un tamaño de matriz de búfer 1024 que va y obtiene información de la secuencia de entrada. Si crea otro búfer que se ajuste a la imagen allí (he establecido un máximo de 1 MB), entonces su función de ejecución tendría:
byte[] buffer = new byte[1024]; byte[] imgBuffer = new byte[1024*1024]; int pos = 0;
Con su variable de posición manteniendo un seguimiento de dónde se encuentra en su imgBuffer.
Entonces usted acaba de copiarlo mientras que usted está consiguiendo pedazos en el lazo del tiempo (verdadero) de la imagen como esto (mmInStream es un InputStream):
int bytes = mmInStream.read(buffer); System.arraycopy(buffer,0,imgBuffer,pos,bytes); pos += bytes;
Envío un mensaje para hacerle saber que la imagen se hace enviando y en ese punto lanzar el imgBuff encima al otro hilo de rosca (pos tiene el tamaño del imgBuffer en este punto):
mHandler.obtainMessage(BluetoothChat.IMAGE_READ, pos, -1, imgBuffer) .sendToTarget();
Había definido IMAGE_READ para decodificar la matriz como lo hiciste en tu MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj; BitmapFactory.decodeByteArray(readBuf, 0, msg.arg1);
- Android ADB Logcat: muestra logcat completo
- ¿Por qué la facturación de Google en la aplicación devuelve el orden adecuado en caso de compra de prueba?