Manipulación de imágenes JPEG progresivas en Libgdx

Estoy intentando implementar una simple funcionalidad de solicitud de imagen de perfil de Facebook en un juego que se está desarrollando con el motor Libgdx. Me gustaría obtener la imagen solicitada y eventualmente mostrarla en la pantalla. Preferentemente, quiero que esto funcione tanto en mi escritorio como en la implementación de Android.

El problema se produce cuando intento crear un objeto Pixmap utilizando la imagen de perfil, ya que la imagen de perfil es un JPEG progresivo, que libgdx no puede cargar. Código de muestra:

inStream = new URL(url).openStream(); byte[] buffer = new byte[1024 * 200]; int readBytes = 0; while (true) { int length = inStream.read(buffer, readBytes, buffer.length - readBytes); if (length == -1) break; readBytes += length; } Pixmap pixmap = new Pixmap(buffer, 0, readBytes); 

Dado que la imagen es una descarga, no tengo la opción de convertir la imagen a un formato normal jpeg o png con un software. He intentado usar el paquete ImageIO (entre otros) para decodificar la imagen, pero tampoco es capaz de manejar el JPEG progresivo. No pude encontrar una solución que funcionara para ambas plataformas.

¿Alguna sugerencia para superar este problema? Al menos, si pudiera manejarlo para Android, tal vez podría pensar en otra cosa para la implementación de escritorio.

No es la solución exacta al problema, pero lo que hice fue;

He decidido poner una imagen estática en la implementación de Desktop, y descargar las imágenes de perfil para la implementación de Android.

En primer lugar, obtener la imagen y decodificarlo como Bitmap. Código de muestra:

 URL url = new URL(src); HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setDoInput(true); connection.connect(); InputStream input = connection.getInputStream(); Bitmap myBitmap = BitmapFactory.decodeStream(input); 

A continuación, crear una matriz de bytes desde el objeto de mapa de bits de la siguiente manera:

 ByteArrayOutputStream outStream; int size = myBitmap.getWidth() * myBitmap.getHeight() * 2; while (true) { outStream = new ByteArrayOutputStream(size); if (myBitmap.compress(Bitmap.CompressFormat.PNG, 0, outStream)) break; size = size * 3 / 2; } byte[] buffer = outStream.toByteArray(); 

Ahora se puede usar la matriz de bytes para crear un objeto Pixmap y cargar la imagen.

Utilice la extensión gdx-image para manejar el jpg progresivo

  • Creando una cuerda lisa con un motor de la física del androide
  • Libgdx-android: Interceptar la tecla de retroceso y confirmar la salida
  • Cómo ajustar el tamaño de los desplegables de azulejos
  • Libgdx Android en la aplicación sencilla tutorial
  • Tomar la captura de pantalla en libgdx
  • ¿Cuándo usar actores en libgdx? ¿Cuáles son contras y pros?
  • Cómo renderizar la imagen de la cámara YUV-NV21 de Android en el fondo en libgdx con OpenGLES 2.0 en tiempo real?
  • Resolución de pantalla completa en Android para juegos libgdx
  • "No ha especificado una vista para utilizarla como contenido para ventanas emergentes"
  • Libgdx textura imagen transparente hacer
  • Gradle se cuelga en tareas de ejecución: [: android: generateDebugSources
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.