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.
- Tiempo vs fecha vs calendario java
- ¿Hay alguna manera de establecer un parámetro de petición base que se incluirá en cada solicitud hecha con la biblioteca de Retrofit de Square?
- Mensaje firmado usando OpenSSL; No se puede verificar con Android Java
- Interceptación de clics desde subview en Android
- ¿Deshabilitar la validación del certificado SSL de la conexión HTTPS?
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
- ¿La forma más simple de probar una unidad de una aplicación de la biblioteca de Android?
- ¿Cómo buscar el contenido del sitio web y ponerlo en la forma en que queremos en el diseño de la aplicación para Android?
- Plugin de servicio de fondo de Android en el teléfono
- Lea desde InputStream usando lectura contra IOUtils.copy
- Cómo convertir jpg a pdf en Android java
- Convertir enum enumerado a Ennotación enumerada en android
- Almacene, convierta a vídeo una pantalla de Android de la corriente
- ¿Cómo leer el contenido de la ventana (usando accessibilityService) y evocando la interfaz de usuario mediante el uso de permiso de otra aplicación en Android?
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?