¿La forma más rápida de cargar y mostrar un archivo JPEG en SurfaceView?

Este es un seguimiento de mi última pregunta: Canvas está dibujando demasiado lento

Ahora que puedo dibujar imágenes más rápidamente, el problema que enfrento es que la carga real de las imágenes lleva demasiado tiempo.

En la aplicación en la que estoy trabajando, el usuario puede reproducir cuadros de video (jpegs) sucesivamente, como si estuviera viendo el video en tiempo real. he estado usandoBitmapFactory.decodeFile() para cargar cada JPEG en un mapa de bits. No puedo cargar todas las imágenes a la vez, ya que hay aproximadamente 240 de ellas, y eso usaría todo mi espacio de almacenamiento dinámico. Lo que he estado haciendo es precargar hasta 6 a la vez en una matriz por medio de un hilo separado para reducir el tiempo que tarda cada imagen en mostrarse.

Desafortunadamente, se tarda entre 50 y 90 ms en cargar una imagen, y necesito mostrar una imagen cada 42 ms. ¿Existe alguna forma más rápida de cargar imágenes posiblemente?

Para aclarar, estas imágenes están en una carpeta en la tarjeta SD, y son todas jpegs de 720x480. Los estoy muestreando a la mitad de ese tamaño para reducir el uso de memoria.

Respuesta 1

Terminé haciendo esto un poco diferente de lo que había imaginado originalmente. Hubo bastante, pero aquí está la esencia de cómo logré mi objetivo:

  1. Todas las imágenes se almacenan en la tarjeta SD y se escriben en un archivo (cada imagen ocupa X bytes en el archivo)
  2. Use código nativo para leer y escribir en el archivo de imagen
  3. Cuando solicito una imagen, paso el índice de la imagen en la lista y un objeto de mapa de bits (RGB_565) al código nativo usando un contenedor JNI
  4. El código nativo bloquea la superficie del mapa de bits, escribe datos de píxeles (como un uint8_t **) directamente en el mapa de bits, luego lo desbloquea
  5. La imagen se muestra en la pantalla.

Al hacerlo de esta manera, solo necesitaba almacenar una imagen en la memoria a la vez, y pude evitar la recolección de basura (ya que el mapa de bits solo se creó una vez y luego se repobló de forma nativa). Espero que alguien más pueda encontrar útil esta estrategia.

Respuesta: 2

Quiero filtrar una JTable exactamente por una cadena. Mi filtro es así: Pattern.quote (textfield.getText ()); Pero, cuando filtro en "G", obtengo también todas las líneas de la JTable con la entrada "KG". Yo solo ...

Estoy tratando de implementar la unión cruzada usando hadoop en java. Ambos lados de la unión son lo suficientemente grandes como para que no pueda guardar ninguno de ellos en la memoria. He intentado varias cosas y aunque me doy cuenta de que PIG / ...

¿Existe alguna herramienta o marco capaz de facilitar la prueba de software distribuido escrito en Java? Mi sistema bajo prueba es un software peer-to-peer, y me gustaría realizar pruebas usando algo ...

Quiero usar el analizador stanford dentro del coreNLP. Ya tengo este ejemplo funcionando: http://stanfordnlp.github.io/CoreNLP/simple.html PERO: Necesito el modelo alemán. Así que descargué "stanford-german -...