知识大全 delphi 缓冲画图(内存画图)解决画图闪烁问题[1]

Posted 环境

篇首语:年轻只知学习营利,乃生命中最黯淡之时刻。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 delphi 缓冲画图(内存画图)解决画图闪烁问题[1]相关的知识,希望对你有一定的参考价值。

  很多朋友在做绘图程序的时候 往往出现屏幕不停刷新产生闪烁的问题 这里就告诉大家一个解决办法 缓冲绘图 如果有人是用取反画图解决这个问题 那么在画直线的时候容易出现斑点 效果不是很好 如果是图片很大 那么缓冲画图是解决的好办法

  在网上搜索一下内存绘图 或者缓冲绘图 会有很多技术文章 不过都是以vc或者java为主 很少有pascal的代码例子 不过原理都是一样的 大家可以参考他们的文章 我会在最后放上转载的vc缓冲画图的文章 )感谢原作者

  Delphi中函数调用比较方便

  OldBmp BufBmp是TbitMap

  //画图方法

  procedure TChart Draw(aCanvas: TCanvas);

  begin

  把要画的操作放在这里

  end;

  在你要画的地方用如下代码把内存中画好的内容放到你要显示的组件的canvas上 这里就是canvas

  Draw (BufBmp Canvas);//Draw方法就是上面那段代码

  bitblt(self Canvas Handle ClientWidth ClientHeight

  self BufBmp Canvas Handle SRCCOPY);//拷贝函数

  如果要用多个缓冲 用BufBmp Assign(OldBmp);做内存中图片内容复制 然后在bufbmp中做进一步操作 再贴到显示区 简单吧 )

  怎样在内存缓冲中画图 

  介绍  用双缓冲进行绘图可解决在VC中绘图时的闪烁现象

  正文  用vc做程序 如何画图是一个大家都很关心 但是却感到很难以理解的问题 因为在mfc的封装之下 没有现成的画图函数供你直接调用 像vb等等里面直接来个point之类的 常常让人感到无从下手 这两天帮人解决了一个用内存缓冲画图的问题 顺便也就谈谈这些东西 也算是总结

  我先来解释一下在mfc里面很关键的设备环境描述符 也就是所谓的DC(device context)

  还是从历史来看吧 dos时代 我们如果要绘图 必须通过一系列系统函数来启动图形环境(用过turbo pascal或者turbo c的人该还有印象吧) 这之间对各种硬件的初始化参数都不相同 非常的烦人 常常还要查阅硬件手册 那时的程序智能针对最流行的硬件来编写 对不流行的就没有办法了 windows操作系统为了屏蔽不同的硬件环境 让编程时候不考虑具体的硬件差别 采取了一系列办法 设备环境描述符就是这样产生的 简单的说 设备描述符抽象了不同的硬件环境为标准环境 用户编写时使用的是这个虚拟的标准环境 而不是真实的硬件 与真实硬件打交道的工作一般交给了系统和驱动程序完成(这同样解释了为什么我们需要经常更新驱动程序的问题) 使用在windows图形系统(gdi 而不包括direct x)上面 就体现在一系列的图形DC上面 我们如果要在gdi上面绘图 就必须先得到图形DC的句柄(handle) 然后指定句柄的基础上进行图形操作

  再来回忆一下 我们怎么在sdk的环境下面绘图呢 我想这个大家都不太清楚吧 但是确实很基础 在windows的sdk环境下面 我们用传统的c编写程序 在需要的绘图地方(比如响应WM_PAINT消息的分支)这样做

  hdc = GetDC( hwnd );  oldGdiObject = SelectObject( hdc newGdiObject );   绘图操作   SelectObject( hdc oldGdiObject );  DeleteObject( newGdiObject );  ReleaseDC( hdc);

  或者是这样

  BeginPaint( hwnd &ps );//PAINTSTRUCT ps ps is a paint struct 绘图操作 EndPaint( hwnd )

  这就是大概的过程 我们看到了hdc(图形DC句柄)的应用 在绘图的部分 每一个绘图函数基本上也要用到这个句柄 最后我们还必须释放它 否则将严重影响性能 每次我们都必须调用GetDC这个api函数得到(不能用全局变量保存结果重复使用 我在后面解释) 这些是最最基本的windows图形操作的方式 相比dos时代简单了些 但是有些概念也难理解了些 vb里面的简单的point函数其实最后也是被转化为这样的方式来执行 系统帮助做了很多事情

cha138/Article/program/Delphi/201311/24797

相关参考

知识大全 勾股定理画图怎么画

初二数学:勾股定理画图怎么画一条边为3,另一条边长为1,这两条边垂直,连线就是√10的线段。因为满足﹙√10﹚=3+1初二数学,关于勾股定理,请画图解释选C解析设BD长为x,则AD为2x。因为CD垂直

知识大全 画图时如何设置线条的粗细

  在用JavaD进行画图时可以非常方便的设置线条的粗细及接头的形状下面是一个简单的例子供大家参考    floatthick=f;//设置画刷的粗细为  BufferedImagebi=newBuf

知识大全 实现鼠标画图的Java程序

实现鼠标画图的Java程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!    importjav

知识大全 cad画图前怎么设置

cad画图前怎么设置1.设置快捷键定义,包括编辑,修改,标注。2.设置鼠标右键自定义为重复上一命令以及执行操作。3.采用标准A4线框,或自行规定A4线框,标准零件图框,并保存。4.在图层中定义各线条的

画图说明缸胀监测系统的组成。

画图说明缸胀监测系统的组成。参考答案:TSI系统应用两个直流线性差动变压器(LVDT)来测量汽缸相对于基础(固定的)沿轴线的热膨胀。探头的安装如下图所示,探头一般安装在绝对死点的相对端基础上,在这个相

画图说明缸胀监测系统的组成。

画图说明缸胀监测系统的组成。参考答案:TSI系统应用两个直流线性差动变压器(LVDT)来测量汽缸相对于基础(固定的)沿轴线的热膨胀。探头的安装如下图所示,探头一般安装在绝对死点的相对端基础上,在这个相

知识大全 JS实现简单的Canvas画图实例

JS实现简单的Canvas画图实例  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!这篇文章介绍了JS

画图论述蒸汽流量扰动下,汽包水位动态特性特点

画图论述蒸汽流量扰动下,汽包水位动态特性特点参考答案:在蒸汽流量阶跃扰动作用下,水位控制对象的动态特性表现为起始阶段带有“虚假水位”的无自平衡能力的特点,如图4-4所示。图4-4蒸汽流量扰动下汽包水位

画图论述蒸汽流量扰动下,汽包水位动态特性特点

画图论述蒸汽流量扰动下,汽包水位动态特性特点参考答案:在蒸汽流量阶跃扰动作用下,水位控制对象的动态特性表现为起始阶段带有“虚假水位”的无自平衡能力的特点,如图4-4所示。图4-4蒸汽流量扰动下汽包水位

知识大全 我是一位数学老师,想知道数学出题目要画图有什么软体

我是一位数学老师,想知道数学出题目要画图有什么软体画的如果是基本的长方形、正方形之类的话可以试试办公软体里面的画图工具,里面基本用的都有我是一位六年级的数学老师,急需奥数试题1.乙两地相距6千米,某人