4个基于|基于Nokia S60的游戏开发之三

更新时间:2017-11-01 来源:操作系统 点击:

【www.hzclsc.cn--操作系统】

  Symbian OS可以被理解为一个面向位图的操作系统。Symbian OS中所有的应用程序都可以使用位图,尤其是游戏程序。虽然使用基本绘图方法(例如DrawLine和DrawEllipse)能够画出更加小型的图形,但是位图能够更有效地画屏,而且输出的图形更加细腻。


  Symbian OS有自己的位图文件格式MBM,这是一种多位图文件。 窗口位图使用一个位图转化工具bmconv来创建MBM。 由于一个MBM文件可能包含多个位图,所以bmconv还产生一个位图头文件MBG,这个头文件提供了一个访问位图的ID。当从MBM文件加载一张位图的时候,应该包括相应的头文件,同时应当使用恰当的标识符作为加载位图的方法的参数。 位图可以在项目文件中定义:


START BITMAP [target-file]
HEADER
TARGETPATH [targetpath]
SOURCEPATH [sourcepath]
SOURCE [colour-depth] [source-bitmap]
END 


  bmconv可以创建两种不同类型的Symbian OS位图:只读存储位图和非只读存储位图。非只读存储位图,亦称文件存储位图,使用编码RLE压缩,它们在使用之前需要被装载到RAM中。为了提高描画速度,一般不压缩只读存储位图,并且可以直接从ROM中使用它们。默认情况下是bmconv建立文件存储位图(即非只读存储位图)。


  Symbian OS提供对蒙版(mask)的支持。蒙版是黑白位图,白色描画透明区--只有蒙版中的黑色区域上的像素是从原始位图上根据想要的图形描画来的。因为蒙版只需要两种颜色,所以它们应该被转化为1bit的位图以节省存储空间。图1说明了使用蒙版的示例。



图1 使用蒙版来描画透明位图的示例


  Series 60提供了一个名为makemask的命令行工具,用来从8 bit位图中创建1 bit的蒙版。 makemask使用原位图中的最后一个调色板索引作为透明色。


  虽然Symbian OS提供了设置位图调色板的应用程序编程接口,但是这些接口并没有实现。一旦补充这些应用程序编程接口,系统就支持彩色显示。当添加支持的时候,Symbian OS判定只支持Netscape调色板色彩立方校正。 Series 60提供它自己的8 bit位图调色板。Bmvconv被修改来把8 bit位图转换为使用Series 60调色板(提供216种颜色和10种灰色调)。 这能防止第三方开发者使用它们自己的调色板,因为使用它们自己的调色板经常会对位图输出造成影响。 尤其是需要一种颜色的多种色调的位图,例如创建一个颜色渐变位图,至少应该转化为12位的位图。 Series 60调色板定义在thirdpartybitmap.pal调色板文件中。


  位图的管理由CFbsBitmap类来完成,这个类提供了用于创建和装载位图的方法,并且定义它们的色深度和尺寸。它使用RFbsSession类来访问FBS,因此用户是接触不到会话类的。 CFbsBitmap还提供了直接访问位图图像数据的方法。 可以使用DataAddress方法获得一个指向数据地址的指针,并且可以使用GetScanLine方法访问一条指定的扫描线。


  根据位图的尺寸把位图分解到FBS中的两个不同的堆里。小于4kB的位图被保存到一个堆里,大于4kB的位图保存到另一个堆里。进行这种分解是为了防止存储碎片,存储碎片是大的位图被创建和销毁的时候经常出现的--大位图的堆能自动整理碎片。由于碎片整理的原因,当操作大位图的内容时,堆需要被锁定。为了防止碎片整理和操作同步进行,TBitmapUtil类提供了锁定堆和解锁堆的操作。只有在一个位图的图像数据被直接编辑的时候才需要锁定堆--描画和复制方法提供了自动锁定功能。 下面的示例在位图是大的位图并且使用颜色填充位图的情况下锁定FBS。它假定位图的每个象素都使用16位。这适用于12位和16位位图。


// Lock the heap if a large bitmap
if ( bitmap->IsLargeBitmap() )
{
 TBitmapUtil bitmapUtil( bitmap );
 bitmapUtil.Begin( TPoint(0,0) );
}
// Edit bitmap
TSize bitmapSize = bitmap->SizeInPixels();
TUint16* bitmapData = (TUint16*)bitmap->DataAddress();
TUint16 colour = 0;
for ( TInt y = 0; y < bitmapSize.iHeight; y++ );
{
 for ( TInt x = 0; x < bitmapSize.iWidth; x++ )
 {
  *bitmapData++ = colour++;
 }
}
// Release the heap
if ( bitmap->IsLargeBitmap() )
{
 BitmapUtil.End();


  为了使描画位图比使用CfbsBitmaps还快,窗口服务器提供它自己的位图类CWsBitmap。它通过取得位图处理的所有权来除去窗口服务器和FBS之间多余的上下文转换。CWsBitmap从CFbsBitmap继承而来,并且实现了其所有相同的方法。如果你在开发应用程序的时候很重视描画速度,那么你应该使用CWsBitmap来替代它的基类。


本文来源:http://www.hzclsc.cn/ruanjianzixun/3093.html

为您推荐

linux测试网速命令是什么意思_Linux测试网速命令是什么 Linux命令行测试网速教程

许多用户朋友在使用Linux操作系统的时候都不知道Linux测试网速命令是什么,但是又想看看自己的即时网速是多少,好奇的Linux操作用户不用着急马上点击查看Linux命令行测试网速教程让你测试出您Linux

2020-12-19 23:04:37  

[香港警察配枪]这是警察2配置要求一览 这是警察2配置要求高吗

这是警察2即将发售,那么这款游戏对于电脑配置要求高吗?下面就来分享一下这是警察2配置要求。这是警察2配置要求一览最低配置:操作系统: Windows XP 32处理器: Dual Core CPU内存角色扮演

2020-12-19 23:04:37   警察配枪型号   美国警察配枪  

流放之路配置要求高吗_流放之路配置要求高吗 流放之路最低配置要求一览

流放之路国服是腾讯代理的一款大型暗黑系网游,相信很多玩家对游戏配置要求都很关心,下面就为大家带来流放之路最低配置要求一览,希望能有所帮助。流放之路最低配置要求一览基本配置操作系统:Windows XP角色扮演

2020-12-18 17:04:52  

蜡烛人攻略_蜡烛人配置要求高吗 蜡烛人pc配置要求一览

蜡烛人是一款冒险类的独立游戏,此前只发售在了ps4平台,近日即将推出pc版,下面就来分享一下蜡烛人配置要求。蜡烛人pc配置要求一览最低配置:操作系统: Windows 7, 64-bit处理器: In独立游戏

2020-12-18 17:04:52   蜡烛人下载   蜡烛人视频  

狂怒2配置要求_全金属狂怒配置要求高吗 全金属狂怒推荐配置一览

全金属狂怒配置要求高吗?全金属狂怒是一款动作角色扮演游戏,游戏中强调团队之间的合作,每个角色之间都需要相互合作,本文带来配置要求,下面就一起来看看全金属狂怒推荐配置一览吧。最低配置:操作系统: Win角色扮演

2020-12-17 17:04:43