2011-03-03 90 views
0

我想实现一个绘图工具与图层的支持。为每个图层创建一个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代替WritableRasters对于之前的每一层,也没有延迟明显。

我的下一步是缓存顶层和底层,所以只会绘制3张图片。这可能会解决问题。

回答

0

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

我不会担心这件事,除非你注意到它是一个瓶颈。

0

也许你可以使用JAI:

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

如果你的blit(画),他们每个人到图像缓冲区,你可能正在使用的显卡加速。如果你通过单独的缓冲区循环并手动合并它们(我认为这是你的意思是“在数据层面上执行”),你将使用CPU。

所以实际上,这样做会比blitting更加慢


因此,您的原始解决方案是最好的。让图形卡完成它的工作,它非常好。

0

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