油漆方法铸造 - 性能

时间:2014-11-15 15:27:47

标签: java graphics2d

我看到很多人在他们的Paint方法中将Graphics类型转换为Graphics2d类型,以便在他们绘制的图像上具有更多功能。是否不可能将图形类型转换为paint函数之外的graphics2d类型?对我来说,这会引起性能问题,因为每次调用paint方法(即每一帧)时,每次都会不必要地转换为Graphics2D类型。

此外,只要调用paint方法并再次绘制相同的屏幕,Java是否会进行任何优化?例如,如果您只是在屏幕上移动一个元素,那么通常只需要更新该元素。每次调用paint方法时,java都会重绘并重新处理整个屏幕。对我来说,这一切似乎都是不必要的加工过程。

示例代码:

public void paint(Graphics g) {
    AffineTransform transformer = new AffineTransform();
    transformer.translate(5,5);
    transformer.scale(2,2);
    Graphics2D g2d = (Graphics2D)g;
    g2d.setTransform(transformer);
    // draw to g2d.
}

1 个答案:

答案 0 :(得分:1)

你说:

  

对我来说,这会引起性能问题,因为每次调用paint方法(即每一帧)时,每次都会不必要地转换为Graphics2D类型。

这个成本最低,所以我不担心。而是对您的程序进行分析,并专注于分析器显示您重要的瓶颈。

  

是否无法将图形类型转换为绘制函数之外的graphics2d类型?

没有

  

此外,只要调用paint方法并再次绘制相同的屏幕,Java是否会进行任何优化?例如,如果您只是在屏幕上移动一个元素,那么通常只需要更新该元素。每次调用paint方法时,java都会重绘并重新处理整个屏幕。对我来说,这一切似乎都是不必要的处理密集型

我不这么认为。我所做的是1)创建一个BufferedImage来显示我的静态图像,然后直接绘制我的动态图像,2)如果需要,使用接受的repaint(...)方法重载限制绘制的区域一个矩形。