双缓存技术在Symbian中的实现

 

双缓存技术在Symbian中的实现

在Symbian中实现双缓冲技术首先需要在内存中建立一个位图缓冲区对象,然后再获取位图对象的设备上下文dc(Device Context),程序可以在任意的地方对内存缓冲位图的dc绘制图形。在Draw事件内,将缓冲区位图直接绘制在设备的dc上。

在 .h 中加入如下定义:

  1. CWsBitmap* iBufBmp;
  2. CFbsBitmapDevice* iBufDevice;
  3. CBitmapContext* iBufGc; 

 

在 .cpp 中加入实现代码:

 

  1. /**
  2. * 初始化双缓冲区
  3. */
  4. void CTestAppView::InitDoubleBufferL()
  5.     {
  6.     iBufBmp = new(ELeave)CWsBitmap(CEikonEnv::Static()->WsSession());
  7.     CleanupStack::PushL(iBufBmp);
  8.     User::LeaveIfError(iBufBmp->Create(Rect().Size(), CEikonEnv::Static()->ScreenDevice()->DisplayMode())); 
  9.     iBufDevice = CFbsBitmapDevice::NewL(iBufBmp);
  10.     CleanupStack::PushL(iBufDevice);
  11.     User::LeaveIfError(iBufDevice->CreateBitmapContext(iBufGc)); 
  12.     CleanupStack::Pop(2); // iDevice, iBufBmp
  13.     }
  14. /**
  15. * 测试在缓冲区上绘制
  16. */
  17. void CTestAppView::DoTestDraw()
  18.     {
  19.     iBufGc->Clear(Rect()); 
  20.     // 在buffer里画方块,而不是在屏幕上
  21.     for (int i=0; i<100; i+=2)
  22.         {
  23.         iBufGc->DrawRect(TRect(TPoint(i, i), TSize(50, 50)));
  24.         } 
  25.     }
  26. /**
  27. * View的重绘事件
  28. */
  29. void CTestAppView::Draw(const TRect& /*aRect*/const
  30.     {
  31.     // 以下代码忽略
  32.     //    // Get the standard graphics context
  33.     //    CWindowGc& gc = SystemGc();
  34.     //
  35.     //    // Gets the control’s extent
  36.     //    TRect drawRect(Rect());
  37.     //
  38.     //    // Clears the screen
  39.     //    gc.Clear(drawRect); 
  40.     SystemGc().BitBlt(TPoint(0, 0), iBufBmp); 
  41.     }

说明:

1) iBufBmp为缓冲区位图对象,为CWsBitmap类型。类CWsBitmap继承自类CFbsBitmap,我们在此使用CWsBitmap的原因为因为它比较快,引入SDK中对CWsBitmap类的说明:

This is a bitmap to which the window server already has a handle. Functions 
which take a window server bitmap are faster than equivalent functions which 
take a CFbsBitmap.

 

2) iBufDevice为CFbsBitmapDevice类型的对象,CFbsBitmapDevice的官方解释可以简单的理解为管理文字和位图的图形设备:
A graphics device to which a bitmap managed by the font and bitmap server can be drawn.

 

3) iBufGc为CBitmapContext类型的对象,即位图对象的设备上下文dc,获取了iBufGc后,可以使用CBitmapContext中的方法对位图进行绘制。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值