在 java 中有多种读取图像文件的方法,BufferedImage
仅举ImageIcon
几例。我想知道这些案例有什么区别?它们是否依赖于上下文,在特定情况下只能使用其中一个?
读取JFileChooser
用户选择的图像并分离图像的颜色通道的最佳方法是什么?
在 java 中有多种读取图像文件的方法,BufferedImage
仅举ImageIcon
几例。我想知道这些案例有什么区别?它们是否依赖于上下文,在特定情况下只能使用其中一个?
读取JFileChooser
用户选择的图像并分离图像的颜色通道的最佳方法是什么?
一个好方法是使用不同的 ImageIO.read 方法,这些方法返回 BufferedImage 对象。
Image 是一个抽象类,所以我认为真正的问题是哪个子类对您的程序更有效。如果您需要硬件加速,请使用 VolatileImage。更多关于这里。
ImageIcon
(和Toolkit#createImage
/ Toolkit#getImage
)使用后台加载过程。也就是说,在您调用这些方法后,它们将立即返回,并创建了一个后台线程来实际加载图像数据。
这些在通过慢速连接加载大图像时使用过,例如旧的 28k 调制解调器(啊,我记得那些日子)。这意味着您的应用程序可以在下载图像时继续运行。
您会在Graphics
类中发现drawImage
方法接受一个ImageObserver
接口并java.awt.Component
实现该接口,这使组件能够在图像实际完成加载后自动更新自身。
ImageIO
另一方面,在图像完全加载之前不会返回。它还可以更轻松地引入新的读取器/写入器,使 API 比原始 API 更加灵活。 ImageIO
还支持开箱即用的更广泛的图像。
BufferedImage
也是一个更加灵活的图像类,尤其是在对图像应用效果时。
现在,我个人更喜欢ImageIO
. 如果我知道我正在通过可能很慢的连接加载大图像或图像,我将创建自己的后台线程来加载它们。虽然有点复杂,但权衡大大超过了少量额外工作的重量 - 恕我直言
读取用户由 JFileChooser 选择的图像并分离图像的颜色通道的最佳方法是什么?
ImageIO
毫无疑问。为了对使用 something 加载的图像进行任何认真的操作ImageIcon
,您必须将该图像转换BufferedImage
为