Symbian

Symbian手机开发BLOG

My Links

存档

Blog Stats

Symbian中关于位图的操作

symbian 开发中的位图操作有点和Windows SDK的相似,有Context有Device,下面具体说说:

Bitmap graphics context
由CBitmapContext类提供了一个Graphics context(CGraphicsContext)的位图graphics的实现.它提供了以下特性:
1、清除和拷贝矩形区域;
2、位图的块传输(block transfer);
3、设置pen色彩和灰度;
4、设置shadow mode;
5、将GC的设置reset到缺省值

Window Server Client端的API提供了一个实现:CWindowGc,这主要是用于屏幕绘图的,另一个实现是CFbsBitGc,这主要是用于in-memory位图的绘制,这些都各有用处:)

参见下图


Bitmap graphics device
由CBitmapDevice类提供了一个Graphics device(CGraphicsDevice)的位图graphics实现。

这里Window Server Client端的API提供了一个实现,CWsScreenDevie,用于屏幕绘制。另一个实现是CFbsBitmapDevice,用于绘制一个in-memory位图,还有一个是CFbsScreenDevice,主要是用来(很少用)直接访问屏幕,跳过了window server的中介。

参见下图



位图的操作维系在CFbsBitmap,它可以表示一个被font和bitmap server所管理的位图。 它提供位图的生成,加载和存储。相关的还有一个TBitmapUtil类,这个类提供
给用户很多函数来操作位图的bits(!),呵呵,是不是很实用啊。

位图一般根据其大小被存储在两个不同的堆中,大尺寸位图(这里有个限度值,为4KB)的存储位置和小尺寸位图是不同的,存储大尺寸位图的堆可以自动进行碎片整理以优化其空间:)

每个位图都有寸有两个尺度单位,一个是twip大小,这是所见即所得的真实世界大小尺寸,还有一个是象素尺寸。

如果要要更直接的操作位图,可以使用CFbsBitmap::DataAddress(), 它可以获得位图加载到内存中的地址,以次来操作位图bit,恐怕是最快的方法了,不过很烦,呵呵,注意了,这里如对RGB进行操作,要注意到色彩的差别,一般概念上的是0xXXXXXX,用6位来表示RGB值,这成为24-bit色彩,但3650/7650的是4094色,即12bit色彩(4KColor),因此操作时,我们要在两者之间转换,我们可以使用TRgb::Color4K进行转换,注意了,其参数是TInt值,不要写*Address样式,否则在模拟器上能通过,手机上就会报告Kern-Exec 3错误了,很头疼:)

原文链接: http://www.j2mehome.com/symbian/2009/0526/8724.html


 

posted on Tuesday, May 26, 2009 11:58 AM

Feedback

No comments posted yet.
Title  
Name  
Url
Comments   
Protected by Clearscreen.SharpHIPEnter the code you see: