【问题标题】:Cannot instantiate the type ColorModel无法实例化类型 ColorModel
【发布时间】:2015-04-30 11:16:46
【问题描述】:

请不要不喜欢这个“通用问题”,因为它确实是个问题。我还搜索了其他问题,问题总是人们想要实例化接口。那不是我的情况。

ColorModel 类不是接口,它有一个采用int 的构造函数。为什么会出现“无法实例化类型 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));
            }
        }
    }
}

【问题讨论】:

    标签: java awt bufferedimage


    【解决方案1】:

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

    【讨论】:

    • 天哪,我没看出它是抽象的。这解决了问题。我检查了 API,但标题是“Class ColorModel”。没想到会这么抽象。谢谢+1
    猜你喜欢
    • 2011-08-14
    • 1970-01-01
    • 2014-12-30
    • 2019-07-26
    • 2013-09-27
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多