我正在尝试使用图层支持实现绘画工具。对于每一层,我创建一个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个图像。这可能会解决问题。
答案 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)
好的,所以我介绍了一个上层和下层缓存,现在我的性能非常好。我可以添加尽可能多的层,因为我的内存可以处理,而不会影响渲染时间。