题
IM绘制一堆瓷片上的Canvas
,这些瓦片由任一Image
s或BufferedImage
s表示。
我注意到,即时得到毫秒绘制与Image
s但我开始使用BufferedImage
s为瓦片帧时间天空火箭上面20毫秒。
BufferedImage buffered = ImageIO.read(new File(fileName));
Image image = Toolkit.getDefaultToolkit().createImage(fileName);
这两个图像的支持Alpha通道。我想开始使用alpha能够Image
对中介缓冲区。但是我还没有发现在JDK的地方,可以生成它们除了这个工具包调用创建一个从文件。
基本上没有人知道如何从头创建空白图像(未BufferedImage的),其可以支持alpha?
解决方案
要直接回答你的问题:
// Create a empty BufferedImage which supports alpha
// It will be just as fast a Toolkit image
BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
一些背景资料:
这一切都归结到BufferedImage的类型,你正在使用。 BufferedImage中提供了一个构造函数中,你可以指定地址类型(INT_ARGB,4BYTE_ARGB等)。当使用ImageIO的,你没有在那个被在建设BufferedImage的使用的控制类型。 ImageIO的使用类型的“0”,这是自定义。的类型决定的图像数据是如何被存储/在存储器中起着严重到图像如何绘制/复制/位块传输到屏幕(或其它图像)进行访问。
我创建了一个基于你的代码和BufferedImage中始终呈现非常缓慢的简单测试。我创建TYPE_INT_ARGB第二BufferedImage的和复制的第一BufferedImage的(从ImageIO的)到它。这TYPE_INT_ARGB的BufferedImage使得以相同的速度作为工具包的形象。
其他提示
您可以使用旧的ImageConsumer / ImageProducer的API,以你想要的任何内容创建图像对象。
这将在pix
阵列具有给定的宽度和高度在从创建ARGB像素的图像对象
public static Image createImage( int width, int height, int[] pix )
{
return createImage( width, height, pix, 0, width );
}
public static Image createImage( int width, int height, int[] pix, int offs, int scan )
{
Toolkit toolkit = Toolkit.getDefaultToolkit();
ImageProducer source = new MemoryImageSource( width, height, pix, offs, scan );
return toolkit.createImage( source );
}
不隶属于 StackOverflow