6

我正在尝试将一个简单的 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 处理它,也许我可以为桌面实现考虑其他东西。

4

3 回答 3

1

这不是问题的确切解决方案,但我所做的是;

我决定在桌面实现中放置一个静态图像,并下载用于 Android 实现的配置文件图片。

首先,我得到图片并将其解码为位图。示例代码:

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 对象并加载图像。

于 2013-06-27T06:43:52.233 回答
0

使用gdx-image 扩展来处理渐进式 jpg

于 2014-03-05T23:30:08.967 回答
-3

检查这里你肯定会得到http://www.solutionoferror.com/java/cannot-load-progressive-jpeg-images-in-libgdx-82600.asp

于 2013-06-20T10:40:08.467 回答