http://www.paper.edu.cn
- 1 -
基于 Symbian 的图形图像操作
温达,徐惠民
北京邮电大学计算机系,北京 (100876)
E-mail:coldmeal729@gmail.com
摘 要:Symbian成立于1998年,是以NOKIA为首的各手机厂商合伙开发的一个操作系统,
代表全球智能手机行业标准的操作系统,主要用于高端的智能手机。 其开发语言为C++。
Carbide.c++是Nokia和Eclipse基金会合作的 产物,主要用于Symbian平台开发。把Carbide理
解成Eclipse+CDT+Nokia plug-in也是可以的。只是Nokia把这几个组合进行了打包,免去了
一些繁琐的安装配置过程。Symbian API 已经集成了大量己定义好的图形操作方法。本文
就以Carbide.c++作为系统开发平台,来实现一个位图处理程序。该程序实现了图形绘制,
图形操作,图形存储、文字编辑等功能。
关键词:图形绘制;图形操作;Carbide C++ 1.3
1. 引 言
Font and Bitmap Server 是 Symbian OS 比较重要的服务,它主要是用来管理字体和位
图,使用高度优化的汇编代码编写的,可以提供良好快速的图形绘制能力,可以在系统中
所有的线程之间共享,通 过 RFbsSession 类来访问 FBS。它是由 window server 生成的,通
过 CFbsFont 和 CFbsBitmap 类来操作,CFbsBitmap 和 CFbsFont 都是 FBS 的一个 Client 句
柄,它们提供了管理字体和位图的方法,实际的数据是存放在 FBS 上,数据仅仅保留一
份,而 Client 句柄可以有多个引用
[1]
。
位于 ROM 的 Bitmap 是可以直接使用,基于文件的 Bitmap 需要加载到 RAM 后才能使
用,在 RAM 里面的 Bitmap 和 Font 都仅有一个实例,它 通过引用计数器而被多个 Client 引
用。对于大部分的应用程序来说 Font and Bitmap Server 是被隐藏在 Window Server 里面,
Server 默认已经完成了对 FBS Server 的初始化操作。对于 Exe 程序或者其他工作线程用户
可以通过 RFbsSession::Connect 来连接 server。
服务最常见的应用就是贴图,而贴图和画图等操作都是通过 CFbsBitmap 这个 FBS 的
Client 对象来实现的,有点类似于 Windows 上的 HBITMAP。一般都通过 CFbsBitmap::
DataAddress 来获取内存地址,通过 GetScanLine 获取一个指定的 scan line。位图也根据他
们的大小以 4kb 为界限在 FBS 上分为两个不同的堆。位于 LargeBitmap 的 heap 可以进行自
动的磁盘碎片整理(在某些特 殊的系统事件发生时候其他线程可能会进行 Heap 的整理,
从而导致数据错位),因此这个堆是需要被 lock/unlock 的,在低版本的 S60 SDK 中提供了
TBitmapUtil 来进行堆的锁定和解锁,有位图的内容被编辑时,我们需要锁定堆。高版本的
SDK 提供了 LockHeap 和 UnlockHeap 完成这个操作,CFbsBitmap 的 drawing 和拷贝等内部
操作都提供了自动锁定的功能。
目前比较常用的位图操作类有以下几种:CFbsBitmapDevice,CFbsBitGc,
CFbsBitmap,CFbsFont
。为了在设备上下文中使用CFbsBitmap对象,必须先将CFbsBitmap
对象选入设备CFbsBitmapDevice,再用CFbsBitmapDevice对象初始化CFbsBitGc。这样开始
的 CFbsBitmap对象就可以被CFbsBitGc对象操作了。在CFbsBitmapDevice对象选入
CFbsBitmap的过程中,CFbsBitmap会把逻辑空间的对象映射到设备空间的对象。CFbsFont
用于设置字体。在进行文字绘制前,必须设置好字体才能使用,否则编译虽然不会报错,
但是在程序执行的时候文字不会正常显示。
评论0
最新资源