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 个图像要绘制。那可能会解决问题。

4

4 回答 4

0

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

除非您注意到这是一个瓶颈,否则我不会担心这一点。

于 2011-03-03T16:17:14.857 回答
0

好的,所以我引入了上层和下层缓存,现在我得到了相当不错的性能。我可以添加内存可以处理的尽可能多的层,而不会影响渲染时间。

于 2011-03-04T02:51:21.200 回答
0

也许你可以使用 JAI:

ParameterBlock pb = new ParameterBlock();
pb.add(bufImage1);
pb.add(bufImage2);
pb.add(....
RenderedImage ri = JAI.create("xor",pb);
于 2011-03-03T23:10:20.837 回答
0

如果您将它们分别blit(绘制)到图像缓冲区上,您可能正在使用图形卡加速。

如果您遍历各个缓冲区并手动合并它们(我假设这就是您所说的“在数据级别执行”的意思),您将使用 CPU。

所以实际上,手工操作会比 blitting慢得多。


因此,您的原始解决方案是最好的。让显卡发挥它的作用,它非常擅长。

于 2011-03-03T23:17:21.860 回答