有多种方法可以在java中读取图像文件,例如BufferedImage
和ImageIcon
。我想知道这些案件有什么区别?它们是否依赖于上下文,在特定情况下只能使用其中一个?
读取用户JFileChooser
选择的图像并分离图像颜色通道的最佳方法是什么?
答案 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
毫无疑问,{p>用户阅读JFileChooser选择的图像并分离图像的颜色通道的最佳方法是什么?
ImageIO
。为了对使用ImageIcon
内容加载的图片进行任何严格操作,您必须将该图片转换为BufferedImage