IM绘制一堆瓷片上的Canvas,这些瓦片由任一Images或BufferedImages表示。

我注意到,即时得到毫秒绘制与Images但我开始使用BufferedImages为瓦片帧时间天空火箭上面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 );
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top