GDI+实现双缓冲绘图方法一


        private void Form5_MouseMove(object sender, MouseEventArgs e)
{
int intOX = rectDrawArea.X;
int intOY = rectDrawArea.Y;
rectDrawArea.X = e.X;
rectDrawArea.Y = e.Y;
Debug.WriteLine(rectDrawArea.ToString());
//Invalidate();
MyDrawFun();
}

private void MyDrawFun()
{
Graphics go = Graphics.FromHwnd(this.Handle);
Bitmap bitmap = new Bitmap(this.ClientSize.Width, this.ClientSize.Height);
Graphics g = Graphics.FromImage(bitmap);
g.Clear(System.Drawing.SystemColors.Control);
g.DrawRectangle(Pens.Red, rectDrawArea);
Bitmap logo = Properties.Resources.baidulogo;
g.DrawImage(logo, 0, 0);
go.DrawImage(bitmap, 0, 0, this.ClientSize.Width, this.ClientSize.Height);
g.Dispose();
bitmap.Dispose();
}

GDI+实现双缓冲绘图方法一

时间: 2024-10-17 23:53:23

GDI+实现双缓冲绘图方法一的相关文章

C#-gdi绘图,双缓冲绘图,Paint事件的触发---ShinePans

在使用gdi技术绘图时,有时会发现图形线条不够流畅,或者在改变窗体大小时会闪烁不断的现象.(Use DoubleBuffer to solve it!)                                                                                                                                                                              

GDI双缓冲绘图

一.简介 在进行复杂图形绘制时,若直接在屏幕DC上进行绘制,则会出现明显的闪烁.闪烁产生的原因是当绘制的图形较为 复杂时,图形绘制过程中就被刷新到屏幕上,导致结果断断续续地显示出来.双缓冲绘图的原理是在另开辟一块内存用于绘制,当所有绘制工作完成后将内存数据一 次性拷贝到屏幕上. 双缓冲绘图步骤: 创建兼容DC(CreateCompatibleDC) 创建兼容位图(CreateCompatibleBitmap) 将兼容位图选入兼容DC(SelectObject) 在兼容DC中进行绘制工作 将兼容D

VC双缓冲绘图技术介绍

VC双缓冲绘图技术介绍 双缓冲绘图,它是一种基本的图形图像绘图技术.首先,它在内存中创建一个与屏幕绘图区域一致的对象,然后将图形绘制到内存中的这个对象上,最后把这个对象上的图形数据一次性地拷贝并显示到屏幕上.这种技术能够大大地提高绘图的速度,减少卡顿和闪屏的问题. 我们为什么要使用双缓冲技术来进行绘图? 在应用程序开发中,当图像信息数据量很大时,绘图可能需要几秒钟甚至更长的时间,这时,应用程序可能会出现卡顿的现象.另外,如果窗体在响应WM_PAINT消息的同时也要进行复杂的图形处理,那么窗体在重

MFC双缓冲绘图解决界面闪烁问题

一:为什么会产生界面闪烁? 解释这个之前,我们需要明白的是在MFC里面绘图的消息响应机制,大概的就是如果我们要在某一个 东西上面绘图,比如对话框,单文档等等,就必须先得到图形DC的句柄(handle),然后在指定句柄的基础上进行图形操作,也就是MFC常用的CDC *DC = this->getDC();其中的this就是你想画图的目标. MFC里在消息响应的过程中,WM_PAINT被转变为OnDraw()(单文档 Single Document)或是OnPaint()(对 话框Dialog)之类

简单的 "双缓冲" 绘图的例子(研究一下)

所谓双缓冲就是先画到内存画布(如: TBitmap), 然后再转帖到目的地. 譬如下面小程序: procedure TForm1.FormCreate(Sender: TObject); begin   Timer1.Interval := 100;   Color := clWhite; end; procedure TForm1.Timer1Timer(Sender: TObject); begin   Canvas.Pen.Color := Random($FFFFFF);   Canva

MFC双缓冲绘图(2015.09.24)

问题引入: 最近在尝试编写贪吃蛇游戏时遇到这么一个问题:当系统以较快频率向窗口发送WM_PAINT消息时,调用OnPaint()函数在窗口中绘制图形就会发生闪烁现象. 问题分析: 当我们把绘图过程放在OnPaint()函数中时(放在OnDraw()函数中也是如此,因为OnDraw()会被OnPaint()调用),由于频繁收到系统的WM_PAINT消息,窗口需要执行重绘.而重绘过程首先是执行了窗口内容的擦除(用当前背景色的画刷对窗口重新绘制),然后再根据绘图语句在窗口客户区中对窗口内容进行重绘.由

【MFC】MFC绘制动态曲线,用双缓冲绘图技术防闪烁

摘自:http://zhy1987819.blog.163.com/blog/static/841427882011614103454335/ MFC绘制动态曲线,用双缓冲绘图技术防闪烁 2011-07-14 10:34:54|  分类: 学习笔记 |  标签:双缓冲绘图技术  mfc  动态曲线   |举报 |字号 订阅 先上效果图 随着时间的推移,曲线向右平移,同时X轴的时间坐标跟着更新.一.如何绘制动态曲线. 所谓动画,都是一帧一帧的图像连续呈现在用户面前形成的.所以如果你掌握了如何绘制静

MFC双缓冲绘图

在双缓冲方法中,首先要做的是屏蔽背景刷新.背景刷新其实是在响应WM_ERASEBKGND消息.我们在视类中添加对这个消息的响应,可以看到缺省的代码如下: BOOL CMYView::OnEraseBkgnd(CDC* pDC) { return CView::OnEraseBkgnd(pDC); } 是调用父类的OnEraseBkgnd函数,我们屏蔽此调用,只须直接return TRUE;即可. CDC dcMem;                                        

简单的 "双缓冲" 绘图的例子

http://www.cnblogs.com/del/archive/2010/04/19/1715779.html 所谓双缓冲就是先画到内存画布(如: TBitmap), 然后再转帖到目的地. 譬如下面小程序: procedure TForm1.FormCreate(Sender: TObject); begin   Timer1.Interval := 100;   Color := clWhite; end; procedure TForm1.Timer1Timer(Sender: TOb