【问题标题】:Difference between the Image and BufferedImage in JavaJava中Image和BufferedImage的区别
【发布时间】:2010-10-15 18:03:32
【问题描述】:

Image 和 BufferedImage 有什么区别?

我可以直接从图像源“image.png”创建一个 BufferedImage 吗?

【问题讨论】:

    标签: java image bufferedimage


    【解决方案1】:

    如果你熟悉Java的util.List,Image和BufferedImage的区别就和List和LinkedList的区别一样。

    Image是一个泛型概念,BufferedImage是泛型概念的具体实现;有点像宝马是汽车制造的。

    【讨论】:

      【解决方案2】:

      Image 是一个抽象类。您不能直接实例化 Image 。 BufferedImage 是一个后代,您可以实例化那个。因此,如果您了解抽象类和继承,您就会明白何时使用它们。

      例如,如果您使用多个 Image 后代,它们将共享一些从 Image 继承的公共属性。

      如果您想编写一个将任何一种后代作为参数的函数,您可以执行以下操作:

      function myFunction(Image myImage) {
        int i = myImage.getHeight();
        ...
      }
      

      然后您可以通过将 BufferedImage 或 VolatileImage 传递给该函数来调用该函数。

      BufferedImage myBufferedImage;
      VolatileImage myVolatileImage;
      ...
      myFunction(myVolatileImage);
      myFunction(myBufferedImage);
      

      您不会将 Image 转换为 BufferedImage,因为您永远不会拥有 Image。

      【讨论】:

        【解决方案3】:

        ImageBufferedImage 有什么区别?

        如使用图像的 Oracle Java 教程中所述

        • java.awt.Image 类是将图形图像表示为矩形像素数组的超类。
        • java.awt.image.BufferedImage 类,它扩展了 Image 类以允许应用程序直接操作图像数据(例如,检索或设置像素颜色)。应用程序可以直接构造此类的实例。

        BufferedImage 类是 Java 2D 即时模式成像 API 的基石。它管理内存中的图像,并提供存储、解释和获取像素数据的方法。由于 BufferedImage 是 Image 的子类,因此可以通过接受 Image 参数的 Graphics 和 Graphics2D 方法进行渲染。

        BufferedImage 本质上是具有可访问数据缓冲区的图像。因此,直接使用 BufferedImage 会更有效。 BufferedImage 有一个 ColorModel 和一个 Raster 图像数据。 ColorModel 提供图像像素数据的颜色解释。


        我可以直接从图像源“image.png”创建BufferedImage 吗?

        当然。

        BufferedImage img = ImageIO.read(getClass().getResource("/path/to/image"));
        

        【讨论】:

          猜你喜欢
          • 2012-11-16
          • 2015-12-19
          • 2012-09-06
          • 1970-01-01
          • 1970-01-01
          • 2011-01-06
          • 2022-07-21
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多