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:
- Aplicar transformaciones de matriz a BoundingBox
- ¿Cómo escalar sprites en libgdx según las resoluciones de pantalla?
- Libgdx ClassNotFoundException al iniciar Desktop main - Mac, IntelliJ
- LibGDX dentro de la actividad de Android
- Obtener un actor por nombre en libgdx
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.
- NoOptions no se puede resolver con un tipo
- Fondo de libgdx Cambio de imagen
- Libgdx y Leadbolt
- 'SourceSets' no se puede aplicar a la advertencia de 'groovy.lang.closure' en Android Studio
- Error de Gradle después de actualizar Android Studio a 1.5
- Evento no entregado al oyente
- Servicios de juegos de Google Play Configuración del proyecto LibGDX con los últimos juegos de BaseGameUtils
- Android libgdx gran pantalla de resolución
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
Compruebe aquí usted conseguirá definitivamente http://www.solutionoferror.com/java/cannot-load-progressive-jpeg-images-in-libgdx-82600.asp
- WebView height = wrap_content con cambiar el tamaño de fuente no funciona
- Cómo cenralizar última fila desigual en GridView en android?