在做Symbian Camera应用的时候,我们发现, 在某些特殊的手机上. Preview以后拿到的那些Frame也就是位图CFbsBitmap是旋转过的. 比方说N75上, 比方说我在N96的一个原型机上也看到. 碰到这种情况. 我们只能手动的进行旋转. 旋转完成后再画就基本上可以了. 但是旋转有很多种, 如何旋转呢?
从Symbian OS v7.0开始就有了CBitmapRotator这样一个类专门来做这个事情. 函数的原型很简单:
从这函数的原型就可以看出需要一个AO来发起这个异步的调用, 可见这个过程的效率不会高到什么地方去. 现实也是, 确实不快, 尤其如果又再camera view finder这里不是很合适的.所以放弃.
转而头像了DataAddress, 从这里可以直接拿到raw data. 这样就好像很和谐了. 说干就干, debug了一下, 发现这里bitmap的displaymode是EColor16MU, 就比较 好办了
就这么写了一个直接旋转90度的函数.从实际的效果看要比CBitmapRotator来的快一些, 明显画面更流畅一些!当然还搜索了些旁的方案, 比如TBitmapUtil来操纵IncXPos, IncYPos做遍历, 用GetPixel来改写rgb值, 不过这种办法颇有舍近求远的嫌疑, 料想效率也高不到什么地方去, 不管如何, 现在直接操作内存想来是不错的主意了吧.