【问题标题】:Paint method casting - performance油漆法铸造-性能
【发布时间】:2014-11-15 15:27:47
【问题描述】:

我看到很多人在他们的 Paint 方法中将 Graphics 类型转换为 Graphics2d 类型,以便在他们绘制的图像上拥有更多功能。是否不可能将图形类型转换为绘图函数之外的 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.
}

【问题讨论】:

  • 为什么投射会影响性能?

标签: java graphics2d


【解决方案1】:

你说:

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

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

不能将图形类型转换为绘图函数之外的 graphics2d 类型吗?

没有。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多