Java:在 Graphics 中使用 setClip 会更有效吗?

Posted

技术标签:

【中文标题】Java:在 Graphics 中使用 setClip 会更有效吗?【英文标题】:Java: Would using setClip in Graphics be more efficient? 【发布时间】:2012-04-05 17:57:54 【问题描述】:

我有一个屏幕外的BufferedImage,太大而无法一次显示。所以我使用getSubimage 来绘制整个图像的一部分。我想知道在Graphics 上使用setClip 是否会使用更少的资源。文档说“渲染操作在剪切区域之外没有影响”。如果我使用剪辑与不使用剪辑会有多大区别?

【问题讨论】:

【参考方案1】:

当您在Graphics 对象上设置剪辑时——例如Rectangle(0, 0, 100, 100)—— 然后用相同的Graphics 对象绘制图像 – 例如,尺寸为 300x300 的图像 – 位于剪辑之外的图像部分被省略。只会绘制示例的左上角 100x100 角。

这样做的主要优点是,它大大加快了绘图过程。我不太确定 如何 它让它更快;事实上,我现在正在查找这个。

无论如何,我发现这在设计全屏游戏时非常方便。您制作的剪辑绘制到屏幕上的效率越高,您的游戏运行就越流畅。当一段时间内没有更新屏幕组件时,剪辑将保持空白,不绘制任何内容,并为游戏逻辑留下资源。

【讨论】:

还有一个提示:Area 对象也可以用作剪辑。可以添加、减去、相交等区域。这样您就可以按照自己喜欢的方式构建剪辑。 有谁知道加速是剪辑面积还是边界框面积的函数? (考虑 drawImage(..)。)

以上是关于Java:在 Graphics 中使用 setClip 会更有效吗?的主要内容,如果未能解决你的问题,请参考以下文章

Java AWT 图形界面编程Canvas 组件中使用 Graphics 绘图 ② ( AWT 绘图步骤 | Graphics 绘图常用 API )

Java AWT 图形界面编程Canvas 组件中使用 Graphics 绘图 ② ( AWT 绘图步骤 | Graphics 绘图常用 API )

Java入门:绘制简单图形

使用Swing和Graphics2D在Java中旋转滚轮?

tomcat启动出现hibernate close

使用Java的Graphics类进行绘图的方法详解