【问题标题】:Merging rasters合并栅格
【发布时间】:2011-03-03 16:16:01
【问题描述】:

我正在尝试实现一个支持图层的绘画工具。我为每一层创建一个 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 张图像。这样应该就能解决问题了。

【问题讨论】:

    标签: java image-processing raster-graphics


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      也许你可以使用 JAI:

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

      【讨论】:

        【解决方案3】:

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

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

        所以实际上,手动操作会比 blitting 明显


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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2018-08-25
            • 2013-03-30
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多