Intereting Posts
Невозможно установить NuGet-пакеты (проект Xamarin Android) Способы принести Android-приложение в фоновом режиме на передний план Как добавить источник «Частных библиотек Android» в ADT eclipse? ListSelector для RecyclerView на сенсорном устройстве (с использованием onKey Listener) AlarmManager не работает, как ожидалось, в режиме ожидания на S5 Neo Как отключить просмотры позади всплывающего всплывающего окна – андроид RecyclerView и привязка данных не работают ScrollView: как воспроизводить snapToInterval и snapToAlignment для Android? Правильный способ подключения USB-аксессуаров Просмотреть содержимое файла apk Как вернуться к стилю по умолчанию в EditText, если применить фон? IncompatibleClassChangeError: интерфейс не реализован Почему затмение заполняет мою текстуру цветом? Android.view.WindowManager $ Исключение исключений BadTokenException. Любой указатель? Исключение SQLite Cursor вне пределов исключения в SELECT count (*) FROM table

Обработка прогрессивных jpeg-изображений в Libgdx

Я пытаюсь реализовать простую функцию запроса профиля профиля Facebook в игру, которая разрабатывается с помощью механизма Libgdx. Я хотел бы получить запрошенное изображение и в конечном итоге отобразить его на экране. Желательно, чтобы это работало как на моем рабочем столе, так и на Android.

Проблема возникает, когда я пытаюсь создать объект Pixmap, используя изображение профиля, поскольку изображение профиля является прогрессивным jpeg, которое 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); 

Поскольку изображение загружено, у меня нет возможности конвертировать изображение в обычный формат jpeg или png с помощью программного обеспечения. Я попытался использовать пакет ImageIO (среди некоторых других) для декодирования изображения, но он также не может обрабатывать прогрессивный jpeg. Я не смог найти решение, которое будет работать на обеих платформах.

Любые предложения по преодолению этой проблемы? По крайней мере, если бы я мог справиться с этим для Android, возможно, я мог бы придумать что-то еще для реализации на рабочем столе.

Это не точное решение проблемы, но я сделал это;

Я решил поместить статическое изображение в реализацию Desktop и загрузить изображения профиля для реализации Android.

Во-первых, я получаю изображение и декодирую его как Bitmap. Образец кода:

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

Затем я создаю массив байтов из объекта Bitmap следующим образом:

 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(); 

Теперь можно использовать массив байтов для создания объекта Pixmap и загрузки изображения.

Используйте расширение gdx-image для обработки прогрессивного jpg