WEB开发网
开发学院手机开发Symbian 开发 在 Symbian 上使用双缓冲 阅读

在 Symbian 上使用双缓冲

 2010-04-20 15:58:00 来源:WEB开发网   
核心提示:在Prox的故乡,一个美丽而遥远的星球,在 Symbian 上使用双缓冲,计算设备早已没有了屏幕显示的概念,一切图像都以思想的速度在脑海中呈现!多么美好啊!可是,就意味着我们要在一秒中之内画一千多个小方块! Profx通过中央电脑查到古时候有一种叫做Double Buffering的办法可以解决这个问题,其实很简单:

在Prox的故乡,一个美丽而遥远的星球,计算设备早已没有了屏幕显示的概念。一切图像都以思想的速度在脑海中呈现!多么

美好啊!可是,自从来到地球这个落后的星球,落后的科技使他不得不重新考虑很多问题。缓慢的屏幕图像刷新速度就是问题

之一。 好比下面这样一段代码。虽然能够正确地显示图像,却伴随着令人头晕的屏幕闪烁。而且那些小方块会按着顺序一个

接一个的出现,纺若一条小虫 (Profx很不喜欢的一种食品)!

代码:

void CMyView::Draw(const TRect& aRect) const

{ CWindowGc& gc = SystemGc();

TRect rect = Rect();

gc.Clear(rect);

for (int i=0; i<100; i+=2)

{ gc.DrawRect(TRect(TPoint(i,i), TSize(50,50)));

}

}

怎么会这样呢?很简单,直接往屏幕上画图的速度是很慢的。这个问题在制作动画的时候尤其明显,因为我们可能要在一秒中

之内刷新屏幕几十次。如果按每秒二十五屏的速度来刷新的话,就意味着我们要在一秒中之内画一千多个小方块! Profx通过

中央电脑查到古时候有一种叫做Double Buffering的办法可以解决这个问题。其实很简单: 一、在内存里生成一个和屏幕同

样大小的buffer 二、在内存里(Off-screen Buffer)画图 三、把Off-screen Buffer画到屏幕上 这样做的好处有二: 一、写

内存远比写屏(IO)快多了 二、无论所画图形有多复杂,我们只需要做一次IO操作! 下面我们来看看具体做法: 一、在你的

mmp文件里加这么几行:

代码:

LIBRARY fbscli.lib

LIBRARY bitgdi.lib

二、假设你的View class叫做CMyView。在MyView.h里加入:

代码:

#include

private: CFbsBitmap* iOffScrnBmp;

CFbsBitmapDevice* iOffScrnBmpDevice;

CFbsBitGc* iOffScrnContext;

三、在MyView.cpp里加入:

代码:

void CMyView::ConstructL(const TRect& aRect)

{

iOffScrnBmp = new (ELeave) CFbsBitmap;

User::LeaveIfError(iOffScrnBmp->Create(Size(), EColor4K));

1 2  下一页

Tags:Symbian 使用 缓冲

编辑录入:coldstar [复制链接] [打 印]
赞助商链接