请不要不喜欢这个"泛型问题",因为这确实是一个问题。我还搜索了其他问题,问题始终是人们想要实例化接口。那不是我的情况。
类ColorModel不是一个接口,并且有一个带int
的构造函数。为什么我得到一个"无法实例化类型ColorModel" -Error?
以下是代码:
package test;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class BufferedImageGetRGB {
public static void main(String...args) {
BufferedImage img = null;
try {
img = ImageIO.read(new File("C:\\Users\\xxxxx\\Desktop\\testbinary.png"));
} catch (IOException e) {}
for (int y=0; y<img.getHeight(); ++y) {
for (int x=0; x<img.getWidth(); ++x) {
System.out.println(img.getRGB(y, x));
ColorModel cm = new ColorModel(img.getRGB(y, x));
}
}
}
}
答案 0 :(得分:4)
您无法直接实例化ColorModel
类型的对象,因为此类型为抽象,因为ColorModel API会告诉您,并且与接口相同,抽象类型不能直接构造。 API还会告诉您可能的具体子类型。这里的教训是,您的问题与界面类型问题非常相似,解决方案类似 - 始终在您遇到此类问题时检查API。
请注意,您可以通过调用ColorModel
方法直接从BufferedImage
获取图片getColorModel()
。不确定为什么你要在for循环中重复创建一个新的。
即,
BufferedImage img = null;
try {
img = ImageIO.read(new File("C:\\Users\\xxxxx\\Desktop\\testbinary.png"));
} catch (IOException e) {
e.printStackTrace(); // never leave this block empty **********
// exit program here?
}
ColorModel cm = img.getColorModel();
for (int y=0; y<img.getHeight(); ++y) {
for (int x=0; x<img.getWidth(); ++x) {
System.out.println(img.getRGB(y, x));
// ColorModel cm = new ColorModel(img.getRGB(y, x));
}
}
在旁注中,catch (IOException e) {}
不是一种安全的做法,希望您的真实代码不会这样做。