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 - 获取移除的内部区域的图像副本
# 操作的结果就是在图像指定rect区域挖一个洞,然后四周往里挤填补这个洞,这样的操作很难达到我们预期的效果
# 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比保持多次转换图像更好。
# (例如,假设您正在为一个弹跳弹簧进行动画扩展和收缩。如果您将大小更改应用于前一个图像,则会丢失细节。相反,始终从原始图像开始并缩放到所需大小。)

 

混音器

# -*- coding: utf-8 -*-
# 预初始化声音
# pygame.mixer.pre_init(44100, -16, 2, 1024 * 4)
# 参数:
# 1 frequency – 声音文件的采样率,尽管高采样率可能会降低性能,但是再次的声卡都可以轻松对应44.1KHz的声音回放,所以就设这个值吧;
# 2 size – 量化精度, size参数表示每个音频样本使用的位数。如果值为负,则将使用带符号的样本值。正值表示将使用不带符号的音频样本。无效值会引发异常
# 3 声道
# 4 缓冲
import pygame,time
# pygame.mixer.pre_init(44100, -16, 2, 1024 * 4)
# pygame.init()
# sound=pygame.mixer.Sound('F:/082.mp3')
# print(sound)  # <Sound object at 0x0000022960E7C030>
# a= sound.play()
# print(a)  # <Channel object at 0x0000022960FD4050>
# print(pygame.mixer.get_num_channels())  # 8 说明最多可以同时播放8个声音
# pygame.mixer.set_num_channels(10)  # 可以修改需要的声音,量力而行
# time.sleep(5)
# sound.play() # 上一个声音没播放完,可以同时重复播放
# time.sleep(31)
# pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。
# 音乐(music)播放和声音(sound)播放的不同之处在于音乐是流式的,并且绝对不会在一开始就把一个音乐文件全部载入。
# 调音系统在工作刚开始时仅支持单音乐流
pygame.mixer.pre_init(44100, -16, 2, 1024 * 4)
pygame.init()  # 不初始化就无法完成下面的加载
pygame.mixer.music.load('F:/mp3/075.mp3')


pygame.mixer.music.play(2, 180, 400)


# def play(
#     loops: Optional[int] = 0, start: Optional[float] = 0.0, fade_ms: Optional[int] = 0
# ): ...
# 参数:1 循环次数(wmv 和 ogg有效,mp3无效) 2 开始时间(秒) 3 淡出(毫秒)
time.sleep(2)

pygame.mixer.music.play(4,100)  # 不可以同时播放多个声音,将覆盖前面的声音



pygame.mixer.music.fadeout(8000)  # 声音淡出,慢慢就没得了,然后就是停止播放


pygame.mixer.music.queue('F:/mp3/082.mp3')  # 加入队列
# while 1:
#     print(pygame.mixer.music.get_pos())  # 可以获取播放进度,单位:毫秒。-1时播放结束。
#     print(pygame.mixer.music.get_busy())  # 忙碌,1:正在播放,0:播放结束
#     print(pygame.mixer.music.get_endevent())  # ?? 0
#     if not pygame.mixer.music.get_busy():
#         pygame.mixer.music.play()



time.sleep(1000)
# pygame.mixer.music.load()  ——  载入一个音乐文件用于播放
# pygame.mixer.music.play()  ——  开始播放音乐流
# pygame.mixer.music.rewind()  ——  重新开始播放音乐
# pygame.mixer.music.stop()  ——  结束音乐播放
# pygame.mixer.music.pause()  ——  暂停音乐播放
# pygame.mixer.music.unpause()  ——  恢复音乐播放
# pygame.mixer.music.fadeout()  ——  淡出的效果结束音乐播放
# pygame.mixer.music.set_volume()  ——  设置音量
# pygame.mixer.music.get_volume()  ——  获取音量
# pygame.mixer.music.get_busy()  ——  检查是否正在播放音乐
# pygame.mixer.music.set_pos()  ——  设置播放的位置
# pygame.mixer.music.get_pos()  ——  获取播放的位置
# pygame.mixer.music.queue()  ——  将一个音乐文件放入队列中,并排在当前播放的音乐之后
# pygame.mixer.music.set_endevent()  ——  当播放结束时发出一个事件
# pygame.mixer.music.get_endevent()  ——  获取播放结束时发送的事件

 

posted @ 2020-11-30 04:44  老谭爱blog  阅读(328)  评论(0)    收藏  举报