使用python创建允许图像缩放和在其上绘制线条的应用程序的最佳方法是什么
我一直在使用pygame来实现这一点,通过在非常大的表面(大小约15000)上绘制图像,并使用pygame.transform.scale(),它允许我进行缩放。此外,将使用convert_alpha()创建一个用于线条绘制的额外曲面,并将其设置为0 alpha
这种方法的问题是,如果需要创建大尺寸的pygame.surface,则需要花费大量的时间和内存。此外,transform.scale()花费了很多时间。除直线外,还为图形类型创建了许多额外的曲面
那么,有没有更好的方法用pygame做同样的事情呢?还是另一种做同样事情的方式?多谢各位
缩放图像可以通过复制“基础图像”的一部分,然后仅将较小的部分缩放到与窗口相同的大小来实现。这样,代码只保存基本图像、背景和子图像。您永远不会将整个图像缩放到缩放级别
在下面的示例代码中,我使用“平移框”的概念实现了这一点,平移框是定义缩放部分大小和位置的PyGame rectangle(
Rect
)。实际上,它是一个长方形的“放大镜”代码的核心在该框的坐标和大小范围内复制背景,然后将其缩放为与窗口相同的大小,复制到“背景”图像:
这是手术的关键。这样做效果很好,因为它只是在框所在的任何位置捕获原始图像的内容,并将其缩放以适应窗口。四处平移或缩放只是移动平移框或使其变大/变小的问题
然而,为了保持核心代码的简单性,示例中还有更多的代码主要用于将平移框保留在图像中。事实上,大多数示例都是简单的检查,以确保我们不会越界
图像复制和缩放是相对CPU昂贵的操作。因此,您将在代码中看到一些测试点,以确定是否需要执行某些操作。例如,如果平移框没有更改,我们不需要创建新的背景图像。我们也不需要制定新的
zoom_image
如果平移框的大小没有更改。像这样的小检查可以大大提高代码的速度参考代码:
相关问题 更多 >
编程相关推荐