【问题标题】:Is Graphics2D.draw performed if the Shape is offscreen?如果 Shape 不在屏幕上,是否执行 Graphics2D.draw?
【发布时间】:2016-06-01 19:34:11
【问题描述】:

我目前正在编写一些渲染代码,我想知道 Graphics2D.draw(Shape) 在屏幕上的执行方式是否与屏幕外完全相同。 如果是,有没有办法检查我的形状(Line2D)是否在屏幕上?

【问题讨论】:

    标签: java draw graphics2d off-screen


    【解决方案1】:

    取决于您所说的“完全相同”。

    就您的代码中对 draw-something() 的调用而言,它们正常进行。不同的是,在渲染链的某处,会检测到形状实际上没有落入实际渲染区域的情况,并且实际上没有为形状输出任何像素。

    至于检测是否“在屏幕上”,这取决于您将屏幕定义为什么。您可以合理地将其定义为 Graphics 对象所描述的区域(很可能只是屏幕的一部分,或者完全不在屏幕上,它可能是一台打印机!)。

    如果您没有更改 Graphics 实例的剪辑区域,getClipBounds() 会为您提供实际渲染图形的矩形。如果您的图形来自 Swing 组件,您也可以将组件尺寸替换为渲染区域。

    一旦你有了实际的 Rectangle,你就可以利用 Shape 提供的方法来检测碰撞(contains()、intersects() 等)。

    【讨论】:

    • 通过“完全相同的方式”我的意思是在渲染屏幕外形状时,性能方面没有区别
    • @RoiEX 会有性能差异,可能相当大。在实际绘制任何东西之前,必须检查它实际上是否在渲染区域内,毕竟为图形分配的所有内存缓冲区的大小都是有限的。在外面绘图会使程序崩溃:)所以检查总是在那里,并且有条件地跳过全部或部分繁重的工作。
    猜你喜欢
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-17
    • 2016-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多