无法实例化 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) {} 不是一种安全的做法,希望您的真实代码不会这样做。