Java 使用哪个图像

Java 使用哪个图像,java,image,bufferedimage,imageicon,Java,Image,Bufferedimage,Imageicon,我已经阅读了java api,但我仍然不理解以下两者之间的主要区别: 1) 图像图标 2) 缓冲图像 3) 挥发年龄 4) 形象 有人能告诉我什么时候使用每种图像类型吗?我不会把这种解释称为使用Java图像类型的绝对标准,但我遵循以下经验法则: 1。图像图标 这通常在您有要添加到按钮或用作窗口图标的小图像时使用。这些可以直接从实现图像接口的任何东西创建 2。缓冲区图像 通常在需要操纵图像中的单个像素时使用,或者在需要对自定义绘制(Graphics g)方法进行双缓冲时使用。映像驻留在RAM中,因

我已经阅读了java api,但我仍然不理解以下两者之间的主要区别:

1) 图像图标 2) 缓冲图像 3) 挥发年龄 4) 形象


有人能告诉我什么时候使用每种图像类型吗?

我不会把这种解释称为使用Java图像类型的绝对标准,但我遵循以下经验法则:

1。图像图标

这通常在您有要添加到按钮或用作窗口图标的小图像时使用。这些可以直接从实现
图像
接口的任何东西创建

2。缓冲区图像

通常在需要操纵图像中的单个像素时使用,或者在需要对自定义
绘制(Graphics g)
方法进行双缓冲时使用。映像驻留在RAM中,因此可能会占用大量空间,对
buffereImage
实例的修改通常不会进行硬件加速

3。挥发年龄

硬件加速的映像,所以速度很快,但在完成绘制之前,硬件备份的缓冲区有被覆盖的风险(尽管这种情况很少发生,而且根据Oracle的说法,这只是基于Windows的机器的问题)。对于双缓冲自定义
paint(Graphics g)
方法,使用它比使用
BufferedImage
稍微困难一些,但是如果您发现自己在渲染到屏幕之前做了大量的预处理,那么它是非常值得的

4。图像
这基本上只是一个接口,它定义了每个
图像
都应该具备的一些基本功能。当您不需要修改图像的内容和/或希望使处理只读图像数据的方法最灵活时,应该使用此选项。

此外,ImageIcon实现了可序列化,因此您可以通过java套接字发送它。如果您有图像对象,则必须将其转换为ImageIcon并发送。当客户端获取图像图标时,它可以再次将其转换为图像