Symbian编程总结-图形图像篇-直接屏幕访问

在Symbian OS中绘制图形减少闪烁的方法有两种:

使用双缓存进行图形的绘制

使用CDirectScreenAccess类对屏幕进行直接绘制。

CDirectScreenAccess类在SDK种的解释如下:

Direct screen access is a way of drawing to the screen without using the window server. As this avoids client-server communication, it is much faster, and may be useful for games and video. Note that some interaction with the window server is needed in order to prevent the application from drawing over other application's data.

此外,使用CDirectScreenAccess还可以截获系统的通知消息(如菜单弹出、电话拨入、信息收到等)的对话框弹出事件,从而避免不必要的刷新工作。

一、CDirectScreenAccess的简单使用

CDirectScreenAccess使用起来非常简单,下面的几格步骤将介绍CDirectScreenAccess的使用方法:

在Carbide C++中使用向导生成GUI应用程序

在View类中创建成员变量CDirectScreenAccess* iDSA;

在View类中创建私有方法void DrawGraphics();代码如下:

void CTestDirectDrawAppView::DrawGraphics()
{
CFbsBitGc* gc = iDSA->Gc();  TRgb colorRed= AKN_LAF_COLOR(35);
gc->SetPenColor(colorRed);
gc->DrawRect(TRect(0, 0, 100, 100));
iDSA->ScreenDevice()->Update();
}

在View类的ConstructL方法里加入以下代码:

CEikonEnv* env = CEikonEnv::Static();
iDSA = CDirectScreenAccess::NewL(env->WsSession(), *(env->ScreenDevice()), this->Window(), *this);iDSA->StartL();
DrawGraphics();

在View类中创建以下两个私有方法:

void Restart(RDirectScreenAccess::TTerminationReasons aReason);
void AbortNow(RDirectScreenAccess::TTerminationReasons aReason);

实现如下:

void CTestDirectDrawAppView::Restart(RDirectScreenAccess::TTerminationReasons aReason)
{
iDSA->StartL();
DrawGraphics();
}
void CTestDirectDrawAppView::AbortNow(RDirectScreenAccess::TTerminationReasons aReason)
{
iDSA->Cancel();
}

时间: 2024-10-31 14:28:48

Symbian编程总结-图形图像篇-直接屏幕访问的相关文章

Symbian编程总结-图形图像篇-使用双缓存进行图形的绘制

所谓"双缓冲",指的是在绘图时并不是直接绘到屏幕上,而是在内存中开辟一个缓冲区,在这个缓冲区里完成所有的绘图后,直接将其"粘贴"到屏幕上.采用双缓冲技术,由于绘图操作大部分在内存中完成,所以绘图速度没有太大的制约:此外,当进行复杂的绘图操作时,使用双缓冲技术可以有效的防止画面的闪烁. 一.双缓存技术在J2ME中的实现 在J2ME中,实现双缓存绘制图形可以通过以下步骤实现: 首先创建一个类成员变量Image对象,此Image对象的图像尺寸为屏幕尺寸大小. 如:如果屏幕

Symbian编程总结-图形图像篇-打开非Bitmap类型的图像

Symbian OS不仅原生的支持Bitmap位图,还可以使用CImageDecoder类对jpeg/gif/png类型的图像进行编码和解码. CImageDecoder可以从文件创建,也可以从描述符中创建,具体创建方法请参看SDK. CImageDecoder要结合活动对象使用,使用的方法很简单: void CImageHelper::LoadPngImageL(TDesC& aFileName, CFbsBitmap* aBitmap, CFbsBitmap* aBitmapMask) {

Symbian编程总结-图形图像篇-RPG地图绘制引擎

有了地图编辑器和网页版引擎后,Symbian版的引擎也出来了(再不出来,小熊同学就要砍我了:(). 刚写好的代码,目前暂时没有使用Double-Buffer和DSA,所以绘制速度较慢. 为了以防万一,请将以下资源文件复制到右边的文件夹中去. ../data/1.png /epoc32/winscw/c/resource/apps/E51BEF1E/1.png ../data/1.png.mapinfoc /epoc32/winscw/c/resource/apps/E51BEF1E/1.png.

Symbian编程总结-基础篇-活动对象正解(4)-异步函数的同步调用

在上一节里我们深入了解了活动对象.活动调度器及异步函数服务器的工作原理及运行机制,想必大家对活动对象的机制及体系结构的运用已经了如指掌.但是大家有没有觉得异步函数使用起来比较麻烦呢?难道非要使用活动对象,非得以"异步"的方式调用异步函数吗?这一节将为大家解决这个问题:异步函数的同步使用. 一.使用CActiveSchedulerWait类 在以前的文章"Symbian编程总结-界面篇-打开jpeg/gif/png图像"里我们已经看到了CActiveScheduler

第五章 Delphi图形图像编程(二)

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />       画直线时,用户只有在松开鼠标才能看见直线,对直线的变化不能进行实时观测.这是因为鼠标移动时程序没有进行某种应.Delphi定义了OnMouseMove事件来响应鼠标移动.以下代码可使用户随时观测直线的变化: procedure TForm1.FormMouseMove(Sender:Tobject) begin

第五章-Delphi图形图像编程(一)(1)

在Delphi中,专门定义了一组对象和部件用以绘制图形,完成一些简单的图像功能.利用这些对象.部件的方法,可以方便地绘制各种常用图形:通过设置它们的属性,能得到不同风格的图形.另外,通过对鼠标事件的定义,可以方便的设计图形绘制程序. 本章将介绍以下内容: 1. TCanvas,TPen,TBrush,TColor对象的方法及属性: 2. 绘图功能的实现: 3. TImage,TPicture,TBitBtn,TBitmap部件的方法及属性: 4. 图像观测及处理. Graphex.dpr是一个简

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append

Symbian编程总结-基础篇-集合与缓冲区(2)-验证RArray::Append是否保存对象副本 一.验证栈对象会自动销毁 我们知道,在C++中,在函数中创建了栈对象,函数退出时,该栈对象会自动销毁(栈指针后移了,栈内存会被覆盖).如何验证这一点?我们需要在函数外定义一个整形变量,在函数内将该函数内获取了变量的地址,在函数调用完毕后,将地址还原成对象: TInt iAddr; /** * 将地址还原成描述符对象并显示出来 * @param aAddr 地址 */ LOCAL_C void P

Symbian编程总结-基础篇-动态缓冲区(1)-回顾HBufC

当数据尺寸在编译期不固定,而在运行期有可能要扩展到很大尺寸时,动态缓冲区在保存二进制数据方面显得非常有用.我们可以使用C++数组保存二进制数据,然后调用类似于memcpy的函数去动态的改变数组所占用空间的大小:我们还能够使用HBufC描述符,获取其可修改的描述符向其写入数据,然后调用ReAlloc方法扩展数组.以上两点方法可行,但是不好,因为我们得自己管理内存的分配.Symbian C++考虑到了这一点,于是引入了动态缓冲区的概念. 基于堆的缓冲描述符HBufC的前缀H显然不符合Symbian

c语言课程设计-C语言编程 图形图像 仿真

问题描述 C语言编程 图形图像 仿真 即将要进行仿真的课题了.我要做一个模拟仿真的软件.软件有可视化界面,能够根据输入的数据做出曲线图,还能生成一些图像.都点想画图软件那种.我想用C语言开发界面,画图,请问要学那些课程? 解决方案 用C太难,建议你用C#,比VC快的多,而且可以调用C的DLL,如果你想用C写DLL,用C#调用,也相当方便.最重要的是,对于画图这些,界面什么的,用C#绝对是最佳选择. 解决方案二: 用VC吧,可以学学GDI+