无法实例化 ColorModel 类型
Cannot instantiate the type ColorModel
请不要不喜欢这个"generic question",因为它确实是个问题。我还搜索了其他问题,问题总是人们想要实例化接口。那不是我的情况。
class ColorModel 不是一个接口,它有一个采用 int
的构造函数。为什么我会收到 "Cannot instantiate the type ColorModel"-错误?
代码如下:
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));
}
}
}
}
您不能直接实例化 ColorModel
类型的对象,因为此类型是 抽象的 ,正如 ColorModel API 会告诉您的那样,并且与接口,抽象类型不能直接构造。 API 还会告诉您可能可用的具体子类型。这里的教训是你的问题与接口类型的问题非常相似,解决方案也相似——总是当你运行进入时检查API这样的问题。
请注意,您可以通过调用其 getColorModel()
方法直接从 BufferedImage
获取图像的 ColorModel
。不确定您为什么要在 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) {}
不是一种安全的做法,希望您的真实代码不会这样做。
请不要不喜欢这个"generic question",因为它确实是个问题。我还搜索了其他问题,问题总是人们想要实例化接口。那不是我的情况。
class ColorModel 不是一个接口,它有一个采用 int
的构造函数。为什么我会收到 "Cannot instantiate the type ColorModel"-错误?
代码如下:
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));
}
}
}
}
您不能直接实例化 ColorModel
类型的对象,因为此类型是 抽象的 ,正如 ColorModel API 会告诉您的那样,并且与接口,抽象类型不能直接构造。 API 还会告诉您可能可用的具体子类型。这里的教训是你的问题与接口类型的问题非常相似,解决方案也相似——总是当你运行进入时检查API这样的问题。
请注意,您可以通过调用其 getColorModel()
方法直接从 BufferedImage
获取图像的 ColorModel
。不确定您为什么要在 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) {}
不是一种安全的做法,希望您的真实代码不会这样做。