合并栅格

时间:2011-03-03 16:16:02

标签: java image-processing raster-graphics

我正在尝试使用图层支持实现绘画工具。对于每一层,我创建一个WritableRaster。要显示画布,必须合并图层。最有效的方法是什么?我可以使用bufferedImage,设置栅格并使用alpha合成将每个图层绘制到Graphics上下文。但是,在数据级别合并然后绘制单个图像不是更好/更快吗?

编辑: 我做了一些分析。这就是我目前的做法:

//tmp.getRaster().setRect(layer.getRaster()); // VERY slow
tmp.getRaster().setDataElements(0, 0, layer.getRaster()); //slow
g2.drawImage(tmp, 0, 0, scaledDim.width, scaledDim.height, null);

我之前为每一层使用过BufferedImages而不是WritableRaster,并且没有明显的延迟。

我的下一步是缓存顶层和底层,因此只能绘制3个图像。这可能会解决问题。

4 个答案:

答案 0 :(得分:0)

我的感觉是绘制栅格大致等同于“在数据级别合并”。

除非你注意到它是一个瓶颈,否则我不担心这个。

答案 1 :(得分:0)

也许你可以使用JAI:

ParameterBlock pb = new ParameterBlock();
pb.add(bufImage1);
pb.add(bufImage2);
pb.add(....
RenderedImage ri = JAI.create("xor",pb);

答案 2 :(得分:0)

如果你将它们各自blit(画出)到图像缓冲区上,你可能正在使用图形卡加速。

如果你遍历不同的缓冲区并手动合并它们(我假设你的意思是“在数据级别上做”),你将使用CPU。

实际上,手工操作会比blitting显着


因此,您最初的解决方案是最好的。让显卡完成它的工作,它非常擅长。

答案 3 :(得分:0)

好的,所以我介绍了一个上层和下层缓存,现在我的性能非常好。我可以添加尽可能多的层,因为我的内存可以处理,而不会影响渲染时间。