抱歉标题有点模糊,我不知道这里的关键词是什么。设置非常简单,我用
打开一张图片ImageIO.read(new File(filename));
这适用于大多数文件,但是对于一个文件,我得到一个 IllegalArgumentException 的详细信息:“源栅格波段的数量和源颜色空间组件不匹配”
。这张图片是通过wget在有效的Flickr URL上获取的,我也使用过其他通过这种方式获取的图片,所以获取图片的方法在原理上似乎是合理的。我不确定是什么导致了异常。
变通办法是可以接受的 - 我对使用 ImageIO
并不特别在意,而且图像在视觉上看起来不错。我只需要让 Java 不慌乱地读取它!
这是有问题的图片,以防它有任何用处:
最佳答案
所以我遇到了同样的问题,发现图像是灰度的,默认的 ImageIO.read 实现没有解决这个问题,因为图像元数据与预期的不完全一样。我写了一个解决方法,如果主加载失败,则重试加载为“BufferedImage.TYPE_BYTE_GRAY”。
Iterator<ImageReader> iter = ImageIO.getImageReaders(stream);
Exception lastException = null;
while (iter.hasNext()) {
ImageReader reader = null;
try {
reader = (ImageReader)iter.next();
ImageReadParam param = reader.getDefaultReadParam();
reader.setInput(stream, true, true);
Iterator<ImageTypeSpecifier> imageTypes = reader.getImageTypes(0);
while (imageTypes.hasNext()) {
ImageTypeSpecifier imageTypeSpecifier = imageTypes.next();
int bufferedImageType = imageTypeSpecifier.getBufferedImageType();
if (bufferedImageType == BufferedImage.TYPE_BYTE_GRAY) {
param.setDestinationType(imageTypeSpecifier);
break;
}
}
bufferedImage = reader.read(0, param);
if (null != bufferedImage) break;
} catch (Exception e) {
lastException = e;
} finally {
if (null != reader) reader.dispose();
}
}
// If you don't have an image at the end of all readers
if (null == bufferedImage) {
if (null != lastException) {
throw lastException;
}
}
关于java - ImageIO.read 非法参数异常 - 光栅带/颜色空间组件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10416378/