在Java中读取图像文件的方法有什么区别?

时间:2013-01-03 09:54:40

标签: java image image-processing bufferedimage color-channel

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

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

2 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分:3)

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

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

您会在Graphics类中找到drawImage方法接受ImageObserver接口并且java.awt.Component实现此接口,这使组件能够自动更新自己一旦图像实际完成加载。

另一方面,

ImageIO在图像完全加载之前不会返回。它还可以更容易地引入新的读者/编写者,使API比原始API更灵活。 ImageIO还支持开箱即用的更广泛的图像。

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

现在,我个人更喜欢ImageIO。如果我知道我正在通过可能很慢的连接加载大图像或图像,我将创建自己的后台线程来加载它们。虽然稍微复杂一些,但是权衡很大程度上减轻了额外的工作量-IMHO

  

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

毫无疑问,{p> ImageIO。为了对使用ImageIcon内容加载的图片进行任何严格操作,您必须将该图片转换为BufferedImage