Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用文件作为参数创建新的BuffereImage类_Java_Constructor_Bufferedimage - Fatal编程技术网

Java 如何使用文件作为参数创建新的BuffereImage类

Java 如何使用文件作为参数创建新的BuffereImage类,java,constructor,bufferedimage,Java,Constructor,Bufferedimage,我想创建一个新类,因为我想创建一些新方法,扩展BuffereImage并将一个文件(bmp图片)作为参数。 就像这里发生的那样: BufferedImage image = ImageIO.read(new File(dir + "coffeecup.png")); 通过查看文档,我发现BuffereImage类有两个构造函数: 公共缓冲区图像(ColorModel cm、可写光栅、, 布尔预乘, 哈希表属性) 公共缓冲区图像(整数宽度, 整数高度, int图像类型) 查看所有参数的文档时,我

我想创建一个新类,因为我想创建一些新方法,扩展BuffereImage并将一个文件(bmp图片)作为参数。 就像这里发生的那样:

BufferedImage image = ImageIO.read(new File(dir + "coffeecup.png"));
通过查看文档,我发现BuffereImage类有两个构造函数:

  • 公共缓冲区图像(ColorModel cm、可写光栅、, 布尔预乘, 哈希表属性)
  • 公共缓冲区图像(整数宽度, 整数高度, int图像类型)
  • 查看所有参数的文档时,我没有注意到哪个参数引用了文件(如果有的话)。
    那么,我需要如何创建一个新的BuffereImage类,但将文件作为参数之一?

    不要尝试复杂的问题。除非您试图覆盖某些实现(我建议您不要这样做),否则请遵循基本规则组合而不是继承。只需创建一个包装类,而不是尝试不必要地扩展BuffereImage。你正试图将各种顾虑结合起来,这是一个可怕的想法。无法使用文件构造BuffereImage,因为这与映像无关。如关于BuffereImage所述

    它管理内存中的图像,并提供存储、解释和获取像素数据的方法

    这就是它应该关注的全部。因此,创建一个包装器类,您可以添加方法来执行任何操作

    public class BufferedImageWrapper {
        private BufferedImage bufferredImage;
    
        public BufferedImageWrapper(File file) {
            try {
                bufferedImage = ImageIO.read(file);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
        // your methods here
    }
    

    不要尝试复杂的事情。除非您试图覆盖某些实现(我建议您不要这样做),否则请遵循基本规则组合而不是继承。只需创建一个包装类,而不是尝试不必要地扩展BuffereImage。你正试图将各种顾虑结合起来,这是一个可怕的想法。无法使用文件构造BuffereImage,因为这与映像无关。如关于BuffereImage所述

    它管理内存中的图像,并提供存储、解释和获取像素数据的方法

    这就是它应该关注的全部。因此,创建一个包装器类,您可以添加方法来执行任何操作

    public class BufferedImageWrapper {
        private BufferedImage bufferredImage;
    
        public BufferedImageWrapper(File file) {
            try {
                bufferedImage = ImageIO.read(file);
            } catch (IOException ex) {
                ex.printStackTrace();
            }
        }
    
        // your methods here
    }
    

    我可能应该声明我完全同意@peeskillet,并且不建议使用我在下面建议的内容。:-)

    但是,如果您真的想扩展
    buffereImage
    ,您可以这样做(受我的旧类启发,它在沙盒中是有原因的…):


    我可能应该声明我完全同意@peeskillet,并且不建议使用我在下面建议的内容。:-)

    但是,如果您真的想扩展
    buffereImage
    ,您可以这样做(受我的旧类启发,它在沙盒中是有原因的…):


    为什么不能使用buffereImage=ImageIO.read(新文件(dir+“coffeecup.bmp”)???因为我想创建一些附加方法。好的。。。什么样的方法,为什么?什么阻止了你?就目前而言,很难猜测你真正想要什么,或者你想做的事情是否可能。
    BufferedImage
    类没有任何从文件读取的方法…为什么不能使用
    BufferedImage image=ImageIO.read(新文件(dir+“coffecup.bmp”)???因为我想创建一些附加方法。好的。。。什么样的方法,为什么?什么阻止了你?就目前而言,很难猜测你真正想要什么,或者你想做的事情是否可能。
    BufferedImage
    类没有任何从文件中读取的方法……我将听取peeskillet的回答并使用他的想法,但是对于您的回复,thx也非常有用。:)我不会理会皮斯基勒的回答,也不会使用他的想法,但谢谢你的回复,它也非常有用。:)