2

我正在开发 j2me 并使用画布绘制一些图像。

现在,我的问题是:下面的示例代码在绘图速度上有什么区别?

裁剪区域矩形后绘制:

g.clipRect(x, y, myImage.getWidth(), myImage.getHeight());

g.drawImage(myImage, x , y, Graphics.TOP | Graphics.LEFT);

g.setClip(0, 0, screenWidth, screenHeight);

无夹绘图:

g.drawImage(myImage, x, y, Graphics.TOP | Graphics.LEFT);

第一个更快吗?我经常在屏幕上画画。

4

3 回答 3

2

好吧,恐怕你的问题的直接答案是穆- 因为你似乎从错误的方向来解决这个问题。

问题是,裁剪 API并非用于性能考虑/优化。您可以在 API 文档(在线提供)中找到其用途的完整介绍,它没有说明与性能影响相关的任何内容:

剪裁

剪辑是图形对象目标中的一组像素,可以通过图形渲染操作进行修改。

Graphics每个对象有一个剪辑。由图形操作修改的唯一像素是位于剪辑内的像素。剪辑之外的像素不会被任何图形操作修改。

提供了用于将当前剪辑与给定矩形相交以及完全设置当前剪辑的操作...

尝试使用裁剪 API 来考虑想象中的性能问题将使您的代码成为未来维护者理解的噩梦。请注意,这个未来的维护者可能就是你自己,就在几周/几个月/几年之后——我曾经对我自己的代码感到头疼别人写的。


不要误会我的意思——在特定设备上的某些特定情况下,剪辑可能会对性能产生重大影响——为什么不呢,鉴于 MIDP 实现的多样性,一切皆有可能。知道什么?它甚至有可能对其他设备产生相反的影响,为什么不呢。

如果(如果)发生这种情况,如果(如果)你会以某种方式得到一个明确、可靠、经过测试和证明的特定性能影响的理由——那么(那么),继续实施任何必要的技巧来达到所需的性能,无论如何他们可能是反常的(BTDTGTTS)。不过,在那之前,请放弃您可能想到的任何毫无根据的假设。

在那之前……只是。降低。它。

开发人员喜欢优化代码并且有充分的理由。它是如此令人满意和有趣。但知道何时优化更为重要。不幸的是,开发人员通常对应用程序中的性能问题实际上会出现在哪里有可怕的直觉……大多数性能调整让我想起了一个老笑话,关于一个人在厨房里寻找他的钥匙,即使他在街上丢了钥匙,因为厨房里的光线更好……(布赖恩·戈茨

于 2012-07-17T19:55:47.703 回答
1

这几乎肯定会因平台而异,并且取决于您实际绘制的数量。

我建议您通过记录每秒绘制的次数或绘制方法的平均持续时间来衡量性能,然后在屏幕上绘制它。

于 2012-07-17T11:03:15.990 回答
0

没有剪辑的绘图在任何平台上都应该更快,原因很简单,因为您没有调用两个剪辑方法。但我可能会问,你为什么要使用剪辑开始?

当您在同一文件中有动画精灵或图标变体时,通常会使用剪辑。在这种情况下,您可以为每个框架/图标创建一个文件。它会增加你的 jar 文件大小,并会使用更多的堆空间来将这些图像保存在内存中,但绘制速度会更快。

于 2012-07-17T12:10:21.220 回答