我试图从我的渲染管道中挤出更多的性能。(到目前为止)最慢的部分是在大图像上执行 java.awt.imaging.LookupOp。
图像大小约为 2048x2048。
我发现在绘图操作中完成过滤器比调用过滤器方法要快得多。然而,这仍然给我们留下了大约 250 毫秒(或 4 fps)的查找操作。有人有任何渲染技巧吗?
这基本上是我们正在做的事情:
public void paint(Graphics g)
{
if(recalcLUT)
{
Graphics2D g2d = (Graphics2D) displayImage.getGraphics();
g2d.drawImage(srcImage, lut, 0, 0);
}
Graphics2D g2d = (Graphics2D) g;
g2d.clearRect(0, 0, this.getWidth(), this.getHeight());
AffineTransform at = new AffineTransform();
at.setToIdentity();
at.scale(scale, scale);
g2d.drawImage(displayImage, at, null);
}
lut 变量是 LookupOp 通常是 ShortLookupOp,图像是 16 位灰度图像
谢谢
我知道还有一些其他明显的性能优化可以在这里完成。但主要问题只是进行 LookupOp 操作,所以我正在寻找这方面的建议。
Lookup Ops 本质上是创建数组的地方,而不是将图像的每个像素渲染为其颜色,而是将颜色用作数组的索引并将颜色渲染为索引中的值。在这个特定的例子中,我用它来做一些简单的亮度/对比度操作。您也可以使用 rescaleOp 来实现这一点,这本质上是一种将线性函数应用于所有像素值的方法。但事实证明这会更慢。