×
Namespaces

Variants
Actions

关于Symbian中的位图操作

From Nokia Developer Wiki
Jump to: navigation, search
Article Metadata

文章
huwell 在 06 Jul 2007 创建
最后由 hamishwillee 在 30 May 2013 编辑

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


Bitmap graphics context

由CBitmapContext类提供了一个Graphics context(CGraphicsContext)的位图graphics的实现.它提供了以下特性:

  • 清除和拷贝矩形区域;
  • 位图的块传输(block transfer);
  • 设置pen色彩和灰度;
  • 设置shadow mode;
  • 将GC的设置reset到缺省值

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


参见下图

GraphicsContext.gif


Bitmap graphics device

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

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


参见下图

GraphicsDevice.gif


位图的操作维系在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错误了,很头疼:)

This page was last modified on 30 May 2013, at 07:41.
58 page views in the last 30 days.