pygame (三)

pygame.transform

# pygame.transform
#
# 用于改变surfaces形态的pygame模块
# 注意:下面操作的结果都将返回一个新的Surface????不要将返回结果覆盖原来的图像,如:
# 图像 = pygame.transform.操作(图像..)
# 应该这样:
# 新图像 = pygame.transform.操作(图像..)
# pygame.transform.flip - 垂直和水平翻转
# 垂直和水平翻转
# flip(Surface, xbool, ybool) -> Surface
# 这可以通过垂直,水平或两者一起来翻转Surface。 翻转Surface是非破坏性的,并返回具有相同尺寸的新曲面。
# sur1 = pygame.transform.flip(sur, True, True)  # 参数,X轴 和Y轴是否翻转

# pygame.transform.scale - 调整大小到新的分辨率
# 调整大小到新的分辨率
# scale(Surface, (width, height), DestSurface = None) -> Surface
# 将Surface的大小调整为新分辨率。 这是一种快速扩展操作,不会对结果进行采样。
# 可以使用可选的目标Surface,而不是创建新的目标Surface。 如果你想反复缩放某些东西,这会更快。 但是,
# 目标必须与传入的(width, height)大小相同。目标Surface也必须是相同的格式。
# sur1 = pygame.transform.scale(sur,(100,50),sur1)  # 参数:1 要缩放的源,2 绽放后的大小 3 绽放到目标(可以省略,如果要绽放到目标的话
# 目标大小必须设置为绽放后的大小


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

# 参数是角度而不是弧度,
# 说明:所有的surface都是一个横平竖直的矩形,旋转以后还是一个横平竖直的矩形,只是长、宽变了
# 所以,旋转后会出现位置偏移,怎么解决:
# sur2 = pygame.transform.rotate(sur, rot)
# x = 500 - sur2.get_size()[0] / 2
# y = 500 - sur2.get_size()[1] / 2
# screen.blit(sur2, (x, y))

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

# 参数: 45是旋转的角度,0.5是绽放比例。
# sur1 = pygame.transform.rotozoom(sur, 45, 0.5)
# x = 500 - sur1.get_size()[0] / 2
# y = 400 - sur1.get_size()[1] / 2
# screen.blit(sur1, (x, y))

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

# pygame.transform.smoothscale - 平滑地将曲面缩放到任意大小
# smoothscale(Surface, (width, height), DestSurface = None) -> Surface
# 使用两种不同算法中的一种来根据需要缩放输入surface的每个维度。 对于收缩,输出像素是它们覆盖的颜色的面积平均值。 对于扩展,使用双线性滤波器。
# 对于x86-64和i686架构,包含优化的MMX程序,运行速度比其他机器类型快得多。 大小是(width, height)的2个数字序列。
# 此函数仅适用于24位或32位surface。 如果输入表面位深度小于24,则抛出异常。
# 参数跟scale一样,就是放大后没有马赛克,马赛克被周围的像素填充了,但并没改变图像的清晰度,所以,没多大用,

# pygame.transform.get_smoothscale_backend - 返回正在使用的smoothscale过滤器版本:‘GENERIC’,‘MMX’或’SSE’
# pygame.transform.set_smoothscale_backend - 将smoothscale过滤器版本设置为以下之一:‘GENERIC’,‘MMX’或’SSE’

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

# pygame.transform.laplacian - 在surface中查找边
# 在surface中查找边
# laplacian(Surface, DestSurface = None) -> Surface
# 使用拉普拉斯算法查找曲面中的边。
# 注意,只能查找24位通道的图像,不能查找32位alpha的图像,所以,需要:.convert(),不能.convert_alpha()

# pygame.transform.average_surfaces - 从许多surface中找到平均surface。
# sur = pygame.transform.scale(sur, (500,300))
# sur2 = pygame.transform.scale(sur2, (500, 300))
# sur1 = pygame.transform.average_surfaces((sur,sur2))
# 把多个图像混合在一起,小心,多个图片的大小要一样,否则崩溃

# pygame.transform.average_color - 查找surface的平均颜色
# 计算图像的平均颜色,注意了,返回的是一个list(),记录颜色信息。

# pygame.transform.threshold - 查找表面中的哪些像素以及多少像
# 在’search_color’或’search_surf’的阈值内。
# https://blog.csdn.net/enderman_xiaohei/article/details/88282456
#
# surface变换是移动像素或调整像素大小的操作。 所有这些函数都使用Surface进行操作并返回带有结果的新Surface。
# 一些变换被认为是破坏性的。 这意味着每次执行它们都会丢失像素数据。 常见的例子是调整大小和旋转。 因此,重新转换原始surface比保持多次转换图像更好。
# (例如,假设您正在为一个弹跳弹簧进行动画扩展和收缩。如果您将大小更改应用于前一个图像,则会丢失细节。相反,始终从原始图像开始并缩放到所需大小。)

 

上一篇:Android Camera2 教程 · 第三章 · 预览


下一篇:Android应用中如何创建并使用Surface