gpt4 book ai didi

java - 扩展 BufferedImage 类

转载 作者:行者123 更新时间:2023-11-30 04:37:12 25 4
gpt4 key购买 nike

我正在扩展 BufferedImage 类,添加一些方法,如 getRed、getBlue、getGreen 来获取像素颜色。问题是我的原始图像是 BufferedImage 对象而不是我的扩展对象。当我尝试转换为扩展数据类型时,它不起作用。对不起我的英语

我收到此错误

Exception in thread "main" java.lang.ClassCastException: java.awt.image.BufferedImage cannot be cast to asciiart.EBufferedImage

我尝试从父类进行转换的代码

EBufferedImage character = (EBufferedImage)ImageClass.charToImage(letter, this.matrix_x, this.matrix_y);

我的扩展课

public class EBufferedImage extends BufferedImage 
{
public EBufferedImage(int width, int height, int imageType)
{
super(width,height,imageType);
}

/**
* Returns the red component in the range 0-255 in the default sRGB
* space.
* @return the red component.
*/
public int getRed(int x, int y) {
return (getRGB(x, y) >> 16) & 0xFF;
}

/**
* Returns the green component in the range 0-255 in the default sRGB
* space.
* @return the green component.
*/
public int getGreen(int x, int y) {
return (getRGB(x, y) >> 8) & 0xFF;
}

/**
* Returns the blue component in the range 0-255 in the default sRGB
* space.
* @return the blue component.
*/
public int getBlue(int x, int y) {
return (getRGB(x, y) >> 0) & 0xFF;
}
}

最佳答案

您有几个选择:

  1. 向扩展类添加一个构造函数,该构造函数接受 BufferedImage 并适当设置所有内容。

    public class ExtendedBufferedImage extends BufferedImage{

    public ExtendedBufferedImage(BufferedImage image){
    //set all the values here
    }

    //add your methods below
    }

    这似乎需要大量工作并且可能会出现问题。如果您忘记设置某些变量,您可能会引入一些奇怪的错误,或者丢失您需要的信息。

  2. 创建一个包含 BufferedImage 实例的包装类,然后添加您的方法。

    public class ExtendedBufferedImage{
    private BufferedImage image;

    public ExtendedBufferedImage(BufferedImage image){
    this.image = image;
    }

    //add your methods below
    }

    这很合理,而且并不困难。将 BufferedImage 公开或添加 getter 方法,如果需要,您可以从中获取实际的 BufferedImage

  3. 创建一个实用程序类,将您的方法设为静态,并传入 BufferedImage 作为参数。

    public class BufferedImageUtil{

    public static int getRed(BufferedImage image, int x, int y) {
    return (image.getRGB(x, y) >> 16) & 0xFF;
    }

    //add your other methods
    }

    有些人不喜欢实用程序类,但我有点喜欢它们这样的东西。如果您打算在各处使用这些方法,我认为这是一个不错的选择。

就我个人而言,我会选择实用程序类路线,但如果您不喜欢这些路线,那么按照选项 2 中的方式包装它也同样有效。

关于java - 扩展 BufferedImage 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com