×
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 04:41.
137 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×