再议手机显示特效

 

最近一直在忙VANUS和C++编程,一直没顾上写博客。发现留言又有朋友问题我屏幕特效的算法了,其实之前我研究手机编程时已经写了很多手机显示特效方面的文章。我也曾经在一些文章中讲过一些线性函数如何应用在手机屏幕的变化中的文章,只不过文章都是点到即止,如果你有很好的MTK和图像处理基础,研究起来还是不会花太多工夫的。其实算法了,技巧了,原理了都是一句话就能说明白的东西,作为编程爱好者,在研究别人的编程技术和原理的过程中,如果别人写的太明白,可以让你很快吸收别人的经验成长成为一个编程老手,但很难让你成为一个高手。太容易学会的技巧让会让人变得懒于思考,既然直接能用,就不会去思考他的原理,这样别人的知识还是别人的,你自己由于没有经过思考的加工,记的也不牢靠。你把别人的经验拿来直接使用,是能解决不少编程中遇到的相类似的问题,但遇到新的问题,由于没有思考过为什么这样操作能解决这样的问题,就又容易不会解决了。

这里我不再复述代码,之前的文章里挺多的。其实手机窗口过渡特效的原理是十分简单的。我们知道,在处理数据上,从CPU缓存,内存到外设,处理速度的差异往往能达到好一个甚至好几个数量级。显示器和LCD的属于外设,频繁的访问外设会使程序效率低下,当访问的频率超过屏幕固有的刷新频率时,就会导致乱屏,闪屏等现象。在PC上,我们一般使用双缓冲或者DDARW,MTK上使用层,其他平台应该也有与之相对应的技术。这样我们就可以把屏幕数据在内存中处理完成后,再一次性的刷新到屏幕上。我们的特效和过渡效果了,一般都是恰当的运用这个机制实现的。

在MTK上,要制做特效,我们一般会创建一个到两个特效层,主要是根据特效要求。比如要做一个老的屏幕逐渐远去,新的屏幕逐渐出来的效果,那就需要两个层,一个层保存老的窗口数据,一个层保存新的窗口数据,移动两个层的位置就行了,每移动一次记得使用blt刷屏就行。如果要做一个新的层慢慢覆盖老的层,那就可以可以使用一个层,把新窗口数据拷贝到这个层上,然后把这个层内容渐刷新到窗口上。在MTK后来的项目中,可以使用gui_screen_switch_effect_resizer来实现一些屏幕切换特效,而在35之后的版本中,这些函数再一次得到封装,只要调用一些简单的接口,填充一些函数参数就能做出更丰富的屏幕切换,做为层特效的最辉煌的时代大概就在25和53上了,35之后为了给用户提供更丰富多彩视觉效果和触屏操作,人们常常使用vanus来实现,由于最近在研究vanus和C++,所以有好长一段时间没有更新博客。而在vanus中,我们很少对层直接操作和处理,因为通过一些封装的类,我们可以很轻松的一些更复杂的变化,只在特定的情况下和某些特效需要时我们才访问层和GDI。但特效的变化还是原理还是对老窗口和新窗口数据的处理。

有朋友在我博客中留言中说MTK不会成为主流,没必要研究。这种观点我不敢苟同,其实对于一个专注于编程技术的人来说,这种忧虑是不必要的。每一种技术,每一个公司都会有其生命周期,如何在这种技术和这个公司的生命周期内,借着这种技术,或者借着某个公司为平台,提升我们自己的编程能力,才能以不变应万变,在将来迎接各种各样平台和技术的挑战。所有编程语言最终都要翻译成机器语言给计算机执行的,而所有平台都是相通必的,具我所知,在MTK上实现的某些技巧和方法也能在展讯平台实现,而我本人也常常在设计某些效果时会先在WIN平台上写一个VC的DEMO,而在MTK我们也最常做的就是研究安卓和塞班的某些技术,以期在MTK实现高仿。许多技术都是不存在平台和编程语言这个疆界的,比如粒子特效,比如视频播放,再比如各种各样的窗口特效,了解了其算法,你就可以使用任何语言在任何需要的平台需要的地方使用他。我们有理由借着现在正在使用的平台把这些技术搞懂搞明白,不能因为这个平台很快就要被淘汰就觉得搞他是件吃亏的事,因为转战新平台,这些技术积累还是更容易帮你快速做出成绩的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值