Pygame 官方文档 - pygame.transform

pygame.transform

用于改变surfaces形态的pygame模块
pygame.transform.flip - 垂直和水平翻转
pygame.transform.scale - 调整大小到新的分辨率
pygame.transform.rotate - 旋转图像
pygame.transform.rotozoom - 过滤的缩放和旋转
pygame.transform.scale2x - 专门的图像倍增器
pygame.transform.smoothscale - 平滑地将曲面缩放到任意大小
pygame.transform.get_smoothscale_backend - 返回正在使用的smoothscale过滤器版本:‘GENERIC’,‘MMX’或’SSE’
pygame.transform.set_smoothscale_backend - 将smoothscale过滤器版本设置为以下之一:‘GENERIC’,‘MMX’或’SSE’
pygame.transform.chop - 获取移除的内部区域的图像副本
pygame.transform.laplacian - 在surface中查找边
pygame.transform.average_surfaces - 从许多surface中找到平均surface。
pygame.transform.average_color - 查找surface的平均颜色
pygame.transform.threshold - 查找表面中的哪些像素以及多少像 在’search_color’或’search_surf’的阈值内。
 
        surface变换是移动像素或调整像素大小的操作。 所有这些函数都使用Surface进行操作并返回带有结果的新Surface。
        一些变换被认为是破坏性的。 这意味着每次执行它们都会丢失像素数据。 常见的例子是调整大小和旋转。 因此,重新转换原始surface比保持多次转换图像更好。 (例如,假设您正在为一个弹跳弹簧进行动画扩展和收缩。如果您将大小更改应用于前一个图像,则会丢失细节。相反,始终从原始图像开始并缩放到所需大小。)

pygame.transform.flip()

垂直和水平翻转
flip(Surface, xbool, ybool) -> Surface
这可以通过垂直,水平或两者一起来翻转Surface。 翻转Surface是非破坏性的,并返回具有相同尺寸的新曲面。
搜索pygame.transform.flip的示例

pygame.transform.scale()

调整大小到新的分辨率
scale(Surface, (width, height), DestSurface = None) -> Surface
将Surface的大小调整为新分辨率。 这是一种快速扩展操作,不会对结果进行采样。
可以使用可选的目标Surface,而不是创建新的目标Surface。 如果你想反复缩放某些东西,这会更快。 但是,目标必须与传入的(width, height)大小相同。目标Surface也必须是相同的格式。
搜索pygame.transform.scale的示例

pygame.transform.rotate()

旋转图像
rotate(Surface, angle) -> Surface
未经过滤的逆时针旋转。 angle参数表示角度,可以是任何浮点值。 负角度量将顺时针旋转。
除非以90度的增量旋转,否则图像将被填充得更大以保持新的尺寸。 如果图像具有像素alpha,则填充区域将是透明的。 否则,pygame将选择与Surface颜色键(colorkey)或左上角像素值匹配的颜色。
搜索pygame.transform.rotate的示例

pygame.transform.rotozoom()

过滤的缩放和旋转
rotozoom(Surface, angle, scale) -> Surface
这是组合的缩放和旋转变换。 生成的Surface将是一个过滤的32位Surface。 scale参数是一个浮点值,将乘以当前分辨率。 角度参数是一个浮点值,表示要旋转的逆时针度数。 负旋转角度将顺时针旋转。
搜索pygame.transform.rotozoom的示例

pygame.transform.scale2x()

专门的图像倍增器
scale2x(Surface, DestSurface = None) -> Surface
这将返回一个原始尺寸的两倍的新图像。 它使用AdvanceMAME Scale2X算法,该算法可以实现“无瑕疵”的位图图形缩放。
这实际上只对纯色的简单图像产生影响。 在摄影和抗锯齿图像上,它看起来像一个普通的未过滤的尺度。
可以使用可选的目标surface,而不是创建新的目标surface。 如果你想反复缩放某些东西,这会更快。 但是,目标必须是传入的源surface大小的两倍。目标surface也必须是相同的格式。
搜索pygame.transform.scale2x的示例

pygame.transform.smoothscale()

平滑地将曲面缩放到任意大小
smoothscale(Surface, (width, height), DestSurface = None) -> Surface
使用两种不同算法中的一种来根据需要缩放输入surface的每个维度。 对于收缩,输出像素是它们覆盖的颜色的面积平均值。 对于扩展,使用双线性滤波器。 对于x86-64和i686架构,包含优化的MMX程序,运行速度比其他机器类型快得多。 大小是(width, height)的2个数字序列。 此函数仅适用于24位或32位surface。 如果输入表面位深度小于24,则抛出异常。
pygame 1.8的新特性
搜索pygame.transform.smoothscale的示例

pygame.transform.get_smoothscale_backend()

返回正在使用的smoothscale过滤器版本:‘GENERIC’,‘MMX’或’SSE’
get_smoothscale_backend() -> String
显示smoothscale是否使用MMX或SSE加速。 如果没有可用的加速,则返回“GENERIC”。 对于x86处理器,要使用的加速级别在运行时确定。
该函数用于pygame测试和调试。
搜索pygame.transform.get_smoothscale_backend的示例

pygame.transform.set_smoothscale_backend()

将smoothscale过滤器版本设置为以下之一:‘GENERIC’,‘MMX’或’SSE’
set_smoothscale_backend(type) -> None
设置smoothscale加速。 采用字符串参数。 'GENERIC’的值会关闭加速。 'MMX’仅使用MMX指令。 'SSE’也允许SSE扩展。 如果当前处理器无法识别或不支持类型,则会引发值错误。
该函数用于pygame测试和调试。 如果smoothscale导致无效的指令错误,那么应该报告pygame / SDL错误。 仅将此函数用作临时修复。
搜索pygame.transform.set_smoothscale_backend的示例

pygame.transform.chop()

获取移除的内部区域的图像副本
chop(Surface, rect) -> Surface
提取图像的一部分。 围绕给定矩形区域的所有垂直和水平像素都被移除。 然后将角落区域(与矩形对角线)放在一起。 (此操作不会更改原始图像。)
注意:如果您想要一个“crop(裁剪)”返回矩形内图像的一部分,您可以使用矩形blit到新surface或复制子surface。
搜索pygame.transform.chop的示例

pygame.transform.laplacian()

在surface中查找边
laplacian(Surface, DestSurface = None) -> Surface
使用拉普拉斯算法查找曲面中的边。
pygame 1.8的新特性
搜索pygame.transform.laplacian的示例

pygame.transform.average_surfaces()

从许多surface中找到平均surface。
average_surfaces(Surfaces, DestSurface = None, palette_colors = 1) -> Surface
采用一系列surfaces并返回具有每个surface的平均颜色的曲面。

palette_colors - 如果为true,我们将平均调色板中的颜色,否则我们平均像素值。 如果surfacec是灰度颜色而不是调色板颜色,则此选项非常有用。
注意,此函数目前不能正确使用surface处理调色板。
新的pygame 1.8 palette_colors参数在pygame 1.9中新增了
搜索pygame.transform.average_surfaces的示例

pygame.transform.average_color()

查找surface的平均颜色
average_color(Surface, Rect = None) -> Color
查找surface的平均颜色或由Rect指定的曲面区域,并将其作为颜色返回。
搜索pygame.transform.average_color的示例

pygame.transform.threshold()

查找表面中的哪些像素以及多少像素在’search_color’或’search_surf’的阈值内。
threshold(dest_surf, surf, search_color, threshold=(0,0,0,0), set_color=(0,0,0,0), set_behavior=1, search_surf=None, inverse_set=False) -> num_threshold_pixels
       这种多功能的函数可用于在’search_color’附近的’surf’中查找颜色,或在单独的’search_surf’中接近颜色。
       它还可用于将像素传输到匹配或不匹配的“dest_surf”。
       默认情况下,它会在’dest_surf’中设置像素,其中所有不在阈值范围内的像素都会更改为set_color。 如果inverse_set可选地设置为True,则阈值内的像素将更改为set_color。
       如果给出了可选的’search_surf’表面,则它用于阈值而不是指定的’set_color’。 也就是说,它将在“search_surf”的同一坐标下,在像素的“threshold”内找到“surf”中的每个像素。
参数:(这里还有一些复杂的东西,查看原网址
(1)dest_surf(pygame.Surface对象或None) - 正在改变的surface。请参阅’set_behavior’。如果正在计数(set_behavior为0),则应为None。
(2)surf(pygame.Surface对象) - 正在看的表面。
(3)search_color(pygame.Color对象) - 正在搜索的颜色。
(4)threshold(pygame.Color对象) - 距离search_color(或search_surf)这一距离。您可以使用阈值(r,g,b,a),其中r,g,b可以具有不同的阈值。因此,如果您愿意,可以使用r阈值40和蓝色阈值2。
(5)set_color(pygame.Color对象或None) - 我们在dest_surf中设置的颜色。
(6)set_behavior(int) -
                set_behavior = 1(默认值)。 dest_surface中的像素将更改为“set_color”。
                set_behavior = 0我们不改变’dest_surf’,仅仅计算。使dest_surf = None。
                set_behavior =2 ‘dest_surf’中设置的像素将来自’surf’。
(7)search_surf(pygame.Surface对象或None) -
                search_surf =None(默认)。搜索“search_color”取而代之。
                search_surf =Surface。查看’search_surf’中的颜色,而不是使用’search_color’。
(8)inverse_set(bool) - 默认是False。超出阈值的像素被改变。True,阈值内的像素会发生变化。

return int
类型:
返回:与’search_color’或search_surf相比,'surf’中’threshold’内的像素数。

例子:
有关完整示例,请参阅阈值测试:
https://github.com/pygame/pygame/blob/master/test/transform_test.py

 def test_threshold_dest_surf_not_change(self):
        """ 阈值里的像素

        不在阈值范围内的所有像素都更改为set_color。
		所以在这个测试中应该没有变化。
        """
        (w, h) = size = (32, 32)
        threshold = (20, 20, 20, 20)
        original_color = (25, 25, 25, 25)
        original_dest_color = (65, 65, 65, 55)
        threshold_color = (10, 10, 10, 10)
        set_color = (255, 10, 10, 10)

        surf = pygame.Surface(size, pygame.SRCALPHA, 32)
        dest_surf = pygame.Surface(size, pygame.SRCALPHA, 32)
        search_surf = pygame.Surface(size, pygame.SRCALPHA, 32)

        surf.fill(original_color)
        search_surf.fill(threshold_color)
        dest_surf.fill(original_dest_color)

		#set_behavior = 1,从set_color设置dest_surface。
         #all all在third_surface的阈值内,因此没有设置颜色。

        THRESHOLD_BEHAVIOR_FROM_SEARCH_COLOR = 1
        pixels_within_threshold = pygame.transform.threshold(
            dest_surf=dest_surf,
            surf=surf,
            search_color=None,
            threshold=threshold,
            set_color=set_color,
            set_behavior=THRESHOLD_BEHAVIOR_FROM_SEARCH_COLOR,
            search_surf=search_surf,
        )

        # # 返回阈值内的像素是正确的
        self.assertEqual(w*h, pixels_within_threshold)

        # # dest surface 的大小是正确的
        dest_rect = dest_surf.get_rect()
        dest_size = dest_rect.size
        self.assertEqual(size, dest_size)

		#颜色不是为每个像素指定的change_color
        #像素在阈值范围内
        for pt in test_utils.rect_area_pts(dest_rect):
            self.assertNotEqual(dest_surf.get_at(pt), set_color)
            self.assertEqual(dest_surf.get_at(pt), original_dest_color)

pygame 1.8的新特性 1.9.4修复了很多错误并添加了关键字参数。 请测试你的代码。
搜索pygame.transform.threshold的示例
 

以上文档,自己翻译,可能有误,可参考:pygame.transform

点我回顶部

 
 
 
 
 
 
Fin.

猜你喜欢

转载自blog.csdn.net/Enderman_xiaohei/article/details/88282456