为何使用ImageIcon读取BMP字节数组时获取宽高返回-1,JPG格式正常
BMP格式字节数组用ImageIcon读取宽高返回-1的问题原因
- 核心原因是
ImageIcon类的底层解码逻辑没有复用ImageIO的全格式解码能力,其依赖的AWT原生解码器默认仅支持JPG、PNG、GIF三种格式的字节流解析,对BMP格式不识别,解析失败后就会返回宽高为-1。 - 你代码中通过
ImageIO.write写出的BMP字节数组本身是合法可用的,ImageIO.write返回true已经验证了写出操作成功,问题完全出在ImageIcon的解析环节,和上传接口、BMP字节数组本身的正确性无关。
修复方案
如果要兼容多种格式的图像字节数组读取宽高,直接使用ImageIO读取字节数组输入流即可,修改对应代码段:
// 替换原有ImageIcon相关逻辑 ByteArrayInputStream bais = new ByteArrayInputStream(bytes); BufferedImage bufferedImage = ImageIO.read(bais); System.out.format( "%s, %s \n", bufferedImage.getWidth(), bufferedImage.getHeight());
内容的提问来源于stack exchange,提问作者Hawk
相关产品推荐
相关产品推荐

