- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
osd基础知识概要1
* 讲师:杨坚 图片 OSD简介 画字 Filp 重要控件介绍 你们买机顶盒的时候主要考虑什么方面? 现在两款功能一样,价格一样,品牌知名度差不多的机顶盒,UI会不会左右你们的决定? 两问: 1、DirectFB 2、QT 3、Android 背景 概述 开发工具 在竞争日趋激烈的数字机顶盒的市场中,操作简便又美观大方的用户界面是十分重要的。而OSD菜单因为直接面向用户,其质量直接关系机顶盒产品的市场前景,地位十分重要。由于数字机顶盒信息资源更加丰富,用户与各种资源间的交互更加密切,OSD菜单也就更加需要顺应时代潮流。 OSD(On?Screen?Display)提供一种在电视节目图像上叠加输出图形及文字的一种操作,通过软件编程可以提供一套图形函数接口。OSD系统主要是提供给终端用户一个机顶盒功能的清单和节目的信息,让用户知道这台机顶盒到底能做什么,然后根据自己的需求调整和改变一些数据或功能。 OSD简介: 两问: 画上图到机顶盒中?(假如大小为1M) 目前用的基本上用的都是可以携带透明效果的PNG的图片, 大部分方案都是先将图片在PC机上面解码成BGRA的数据形式然后压缩之后放到STB的储存介质Flash中。 调用画图片的函数Draw(),传入坐标然后画出来就可以了。 我们的机顶盒flash只有4M,怎么办? BGRA( B:蓝 G:绿 R:红 A:透明度)一个像素点包含这四个元素。比如绿色:0x00FF00FF OSD简介: 由于受到Flash空间大小的限制,所以使用的图片大小有一定的限制。有一些方案直接将图片文件储存到Flash中,在需要使用的时候才进行解码和显示。 纯色填充 对于非纯色的图片使用平铺的方式:取一列或者一行现有的图像数据,然后进行水平或者垂直方向的平铺。 为了节省图片的空间对于纯色的图片会直接使用系统的填充函数进行填充。这样做还可以用来刷新背景:比如音量显示百分比在变化的时候,每次画新的百分比时都需要将原来的百分比显示清除掉来重置文字背景。 填充函数: 现在需要画三角形,线条,矩形,圆。不用图片,怎么办? 上图进度条漂亮吗?能用填充的方式实现吗? 如果要清除一小块区域,或者更大的,整个屏幕呢? 利用填充函数,如果填充的矩形高度为1就是一条线;用循环控制填充一根一根的线就能画出其他的各种图形。 循环填充一个像素点宽度,每次填充将颜色值改变一点点 把颜色值的透明度改成00,是不是填充就变成了清除 FillRectangle(iLeft, iTop, iWidth, iHeight,COLOR); OSD动画如何实现: 画字函数: 一般使用DrawText(iCol, iRow, acBuf, iTxtColor); 画字 画字 画字 画字 画字 如果一个很长的字符串不能完全显示,如何实现字体的滚动?如下图: 选一个起始值,截取源字符串一定长度的子字符串,显示;然后增加起始值,再截取一定源字符串,显示;以此类推。 DrawTextAmplify(iCol, iRow, acBuf, uiColor, iXTimes, iYTimes); 相比DrawText多出两个缩放比例的参数。 Filp函数:只有调用了Filp函数才能显示出我们画的内容 怎么画图能快过眼睛的反应速度? 利用双缓冲:有两个Buffer,有一个buffer我们直接能看到,还有另一个我们看不到, 我们画图片是画在那个看不到的buffer上面的,调用flip之后会把隐形Buffer的数据拷贝到另一个能够直接被看到的buffer上面,这样图片就会显示了。 这样做有什么好处呢? 其最大的作用就是防止闪烁:假如没有flip ,一个界面上需要画五张图,如果我们按照顺序一个一个的画出来,就会有那些图片是一张一张的跳出来的感觉,如果有flip,那么我们先把图画好,然后调用flip进行显示,这些图片就是一下子整体出现的。 Flip有全屏和部分区域两个函数,一定要在确定需要使用全屏flip的时候才调用全屏的函数,不要为了偷懒不算坐标直接调用全屏的函数 图像层 视频层 机顶盒显示层 显示OSD 显示LOGO LOGO显示: 截取区域:GetRegion()和PetRegion() 如何实现左边的卫星列表弹框?弹框之后如何处理不闪烁? 现有一个界面存在,新画一个界面,部分或者全部覆盖原界面,为了避免在新的界面退出之后需要重新画旧的界面,那么就会先把覆盖的部分或者全部旧界面保存下来,新界面退出之后再将旧的界面贴上 *
文档评论(0)