设为首页 收藏本站
查看: 1120|回复: 0

[经验分享] 玩转树莓派《二》——用python实现动画与多媒体

[复制链接]

尚未签到

发表于 2015-12-2 07:39:51 | 显示全部楼层 |阅读模式
  环境:树莓派,系统raspbian,系统自带两个版本的python以及pygame。
  1、画板
  程序如下:



1 !/home/pi/game_1.py
2 import pygame
3
4 width = 640
5 height = 480
6 radius = 100
7 fill = 1
8
9 pygame.init()  #初始化pygame
10
11 window = pygame.display.set_mode((window, height))
12 window.fill(pygame.Color(255, 255, 255))  # 用白色填充画板
13 while True:
14     pygame.draw.circle(window, pygame.Color(255, 0, 0),
15     (width / 2, height / 2), radius, fill)  # 红色画圆
16     pygame.display.update()     # 更新图像
  输入命令:python game_1.py
  运行程序,结果如下:
DSC0000.jpg
  键盘输入:ctrl + c
  终止程序。
  然而,由于树莓派图形界面的卡爆,返回到命令窗口再ctrl + c有时候会卡掉,不如直接在pygame窗口上操作来的爽快,其实pygame窗口就是用gui编程的,类似于tkinter模块做成的gui,那么关掉窗口就需要事件输入反应,在原来的game_1.py文件后面加入代码:
  



1 while True:
2     if pygame.QUIT in [e.type for e in pygame.event.get()]:
3         break
  我发现树莓派连接网络这方面真是慢,插上电源启动网络若干分钟才能SSH连接到树莓派ip,至于访问外网,时有时无,有时候由于某种故障,例如长时间不动树莓派或者重启wifi就会导致网络连接失败,putty成为inactive,这个时候只有重新拔插电源才能正常,否则直接SSH会显示time out,只能说没有HDMI线就是麻烦,一重启网络或者重启电脑就会出错。
  2、Surface
  Surface可想象成一个矩形的图像,可以由多个图像帧组成,用于实现游戏或动画中一个场景,接下来要做的就是合并两张图片。
  tips:由于这里需要图片,因此在购买了HDMI转换器后,使用网络还是很方便的,首先方便传图,下载了scrot,下载后直接在命令行输入:scrot即可截取当前屏幕图片,也可以通过输入:scrot -h命令查看帮助文档,比如选择截图范围就可以输入:scrot -s就可以截取想要的图片范围了,保存的图片放在当前路径下,可以使用pi里面自带的picture viewer查看图片。
  程序如下:
  



1 import pygame
2
3 pygame.init()
4 #设置黑色背景surface大小
5 screen = pygame.display.set_mode((450,450))  
6 #加载第一张图片,并将其转换为与当前模式相匹配的模式
7 background = pygame.image.load("banboo.jpg").convert_alpha()  
8 theremin = pygame.image.load("panda.jpg").convert_alpha()
9 #将第一张图片与surface合并,并通过参数设置图片合并的位置
10 screen.blit(background, (0,0))
11 screen.blit(theremin, (135, 150))
12 while True:
13         pygame.display.update()
  结果显示如下:
DSC0001.jpg
  分析:由上图可以看出,大熊猫并没有被完全显示,因为大熊猫“panda.jpg”这个图片的分辨率大于竹子“banboo.jpg”这个图片,因此才不能显示完整的熊猫图片,因此可以尝试调节大熊猫的像素来适应竹子的像素。
  3、在Surface上绘图
  如果要绘制一段文字,就需要加载字体,需要用到font模块来加载字体文件并渲染文本。可以先通过pygame.font.get_fonts()函数可以获取pi上的字体列表:



1 import pygame
2
3 pygame.init()
4 for fontname in pygame.font.get_fonts():
5     print fontname
  输出结果如下图:
DSC0002.jpg
  下面将使用代码加载freemono这个字体来渲染文本:



1 import pygame
2
3 pygame.init()
4 screen  = pygame.display.set_mode((725, 92))
5 #设置字体类型为“freemono”,大小为72号
6 font = pygame.font.SysFont("freemono", 72, bold = 1)
7 textSurface = font.render("I love my pi!", 1,
8                           pygame.Color(255, 255, 255))
9 screen.blit(textSurface, (10, 10))
10 while True:
11         pygame.display.update()
  输出结果如下:
DSC0003.jpg
  4、处理事件与输入
  在pygame中,用户触发的事件会被捕获并以Event的对象形式放入消息队列,而pygame.event模块提供从消息队列中获取未被处理的事件对象并能够对事件进行进一步的处理。接下来将会扩展pygame_1程序来通过捕捉鼠标事件来绘制不同的圆形,原理是越靠近窗口边缘,圆的半径越大。
  程序如下图所示:  
   DSC0004.jpg
  结果图很漂亮:
DSC0005.jpg
  5、播放声音
  tips:这里,树莓派屏幕右上方出现一个彩色方块的原因时供电不足,建议截usb插口的话,用供电的多接口usb,因为严重供电不足,否则的话播放音乐插耳机的时候各种故障,然后系统崩溃,树莓派发热发烫。
  5.1在命令行中输入以下命令打开工具界面:
  sudo raspi-config
  5.2选择Advanced-option回车后,选择Audio再回车
  5.3由于默认的声音输出口试HDMI输出,如果你的HDMI连接的显示屏是没有声音播放口的话建议转为模拟信号输出,也就是耳机输出,选择Forced audio即可
  好的,现在你可以百度一个在线音乐,在耳机插孔插上耳机就可以听到音乐了。
  6、播放视频
  为了不让我的树莓派早夭,我决定去拿供电usb,果然那可恶的小方块不见了,但是不稳定,用电多的时候,还是会随着电源的红色信号灯一闪一闪,小方块也会一闪一闪,可能是供电的电源仍然不够,或者是因为我插上的东西太多了,或许无线鼠标和键盘会比较好。;
  pygame.movie模块可以播放视频,前提是视频必须是MPEG1格式的,也就是类似于“.mpg”结尾的视频。当然可以通过安装ffmpeg将其他格式的视频转换为mpg格式。
  代码如下:



1 import pygame
2 from time import sleep
3
4 pygame.init()
5
6 screen = pygame.display.set_mode((320, 240))
7 movie = pygame.movie.Movie("foo.mpg")
8 movie.play()
9 while True:
10     if not(movie.get_play):
11         print("rewind")
12         movie.rewind()  # 倒带
13     movie.play()  #重新播放
14     if pygame.QUIT in [event.type for event in pygame.event.get()]:
15         break
  温馨提示:在pygame.examples模块中有很多完整的实例程序,可以在/usr/share/pyshared/pygame/exalmpes目录中找到源代码。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-146036-1-1.html 上篇帖子: 在Sublime Text 3下为Houdini 13 配置Vex 和Python 语言环境 下篇帖子: python setuptools工具打包
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表