游戏纹理流系统:无需加载整张图获取图片宽高(禁用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
相关产品推荐
相关产品推荐

