6

在 java 中有多种读取图像文件的方法,BufferedImage仅举ImageIcon几例。我想知道这些案例有什么区别?它们是否依赖于上下文,在特定情况下只能使用其中一个?

读取JFileChooser用户选择的图像并分离图像的颜色通道的最佳方法是什么?

4

2 回答 2

6

一个好方法是使用不同的 ImageIO.read 方法,这些方法返回 BufferedImage 对象。

Image 是一个抽象类,所以我认为真正的问题是哪个子类对您的程序更有效。如果您需要硬件加速,请使用 VolatileImage。更多关于这里

于 2013-01-03T09:57:52.923 回答
3

ImageIcon(和Toolkit#createImage/ Toolkit#getImage)使用后台加载过程。也就是说,在您调用这些方法后,它们将立即返回,并创建了一个后台线程来实际加载图像数据。

这些在通过慢速连接加载大图像时使用过,例如旧的 28k 调制解调器(啊,我记得那些日子)。这意味着您的应用程序可以在下载图像时继续运行。

您会在Graphics类中发现drawImage方法接受一个ImageObserver接口并java.awt.Component实现该接口,这使组件能够在图像实际完成加载后自动更新自身。

ImageIO另一方面,在图像完全加载之前不会返回。它还可以更轻松地引入新的读取器/写入器,使 API 比原始 API 更加灵活。 ImageIO还支持开箱即用的更广泛的图像。

BufferedImage也是一个更加灵活的图像类,尤其是在对图像应用效果时。

现在,我个人更喜欢ImageIO. 如果我知道我正在通过可能很慢的连接加载大图像或图像,我将创建自己的后台线程来加载它们。虽然有点复杂,但权衡大大超过了少量额外工作的重量 - 恕我直言

读取用户由 JFileChooser 选择的图像并分离图像的颜色通道的最佳方法是什么?

ImageIO毫无疑问。为了对使用 something 加载的图像进行任何认真的操作ImageIcon,您必须将该图像转换BufferedImage

于 2013-01-03T11:07:22.533 回答