You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

游戏纹理流系统:无需加载整张图获取图片宽高(禁用AWT,基于STB-Image)

利用STB-Image Java绑定获取图片宽高(无需加载整张图)

你可以直接使用STB-Image提供的stbi_info方法读取图片元数据,这个方法仅解析文件头信息,不会加载完整像素数据,完美适配你的需求,且完全避开AWT相关依赖。

核心实现代码

import org.lwjgl.stb.STBImage;
import java.nio.IntBuffer;
import org.lwjgl.system.MemoryStack;

public int[] getImageSize(String filePath) {
    try (MemoryStack stack = MemoryStack.stackPush()) {
        // 分配内存用于存储宽、高、通道数
        IntBuffer widthBuf = stack.mallocInt(1);
        IntBuffer heightBuf = stack.mallocInt(1);
        IntBuffer channelsBuf = stack.mallocInt(1);

        // 读取图片元信息,不加载像素数据
        boolean readSuccess = STBImage.stbi_info(filePath, widthBuf, heightBuf, channelsBuf);

        if (readSuccess) {
            return new int[]{widthBuf.get(0), heightBuf.get(0)};
        } else {
            // 读取失败时返回默认占位值,同时输出错误原因
            System.err.println("Failed to read image metadata: " + STBImage.stbi_failure_reason());
            return new int[]{1, 1};
        }
    }
}

关键说明

  • stbi_info是STB-Image原生提供的轻量级元数据读取接口,性能开销极小,刚好解决你纹理流系统第一帧宽高占位的问题。
  • 主流的STB-Image Java绑定(比如LWJGL中的实现)都包含这个方法,无需额外依赖。
  • 调用stbi_failure_reason()可以快速定位元数据读取失败的原因(比如文件损坏、不支持的格式)。

内容的提问来源于stack exchange,提问作者Anonymous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:31:09