【问题标题】:Handling progressive jpeg images in Libgdx在 Libgdx 中处理渐进式 jpeg 图像
【发布时间】:2013-06-19 10:54:30
【问题描述】:

我正在尝试在使用 Libgdx 引擎开发的游戏中实现一个简单的 Facebook 个人资料图片请求功能。我想获取请求的图片并最终将其显示在屏幕上。最好,我希望它可以在我的桌面和 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 上处理它,也许我可以为桌面实现考虑其他东西。

【问题讨论】:

    标签: java android facebook libgdx


    【解决方案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 对象并加载图像。

    【讨论】:

      【解决方案2】:

      使用gdx-image extension 处理渐进式jpg

      【讨论】:

        【解决方案3】:
        猜你喜欢
        • 2013-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-24
        • 2017-01-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多