当前位置:文档之家› C#使用BufferedGraphics实现GDI+双缓冲绘图

C#使用BufferedGraphics实现GDI+双缓冲绘图

C#使用BufferedGraphics实现GDI+双缓冲绘图
C#使用BufferedGraphics实现GDI+双缓冲绘图

使用双缓冲的图形可以减少或消除重绘显示图面时产生的闪烁。使用双缓冲时,更新的图形首先被绘制到内存的缓冲区中,然后,此缓冲区的内容被迅速写入某些或所有显示的图面中。显示图形的重写相对简短,这通常可以减少或消除有时在更新图形时出现的闪烁。

使用C# GDI+绘图,实现双缓冲绘图有几种方法,在这篇文章中,将介绍其中的一种——使用BufferedGraphics实现GDI+双缓冲绘图。

下面的代码示例演示如何使用BufferedGraphics对象绘制以下图形,这些图形使用几种类型的缓冲实现。单击窗体将启动或停止一个计时器,该计时器将引起绘制更新。绘制更新使您可以观察双缓冲的效果。右击窗体将循环使用下列绘制模式:

?对于Form,直接绘制到Handle。

?对使用OptimizedDoubleBuffer控件样式的OnPaint方法进行重写,以进行绘制

?对于不使用OptimizedDoubleBuffer控件样式的窗体方法,重写OnPaint方法以进行绘制。

在每种模式下都将绘制文本,以标识当前模式并描述按下每个鼠标按钮时发生的行为。

using System;

using https://www.doczj.com/doc/fe2672464.html,ponentModel;

using System.Drawing;

using System.Windows.Forms;

namespace BufferingExample

{

public class BufferingExample : Form

{

private BufferedGraphicsContext context;

private BufferedGraphics grafx;

private byte bufferingMode;

private string[] bufferingModeStrings =

{ "Draw to Form without OptimizedDoubleBufferring control style",

"Draw to Form using OptimizedDoubleBuffering control style",

"Draw to HDC for form" };

private System.Windows.Forms.Timer timer1;

private byte count;

public BufferingExample() : base()

{

// Configure the Form for this example.

this.Text = "User double buffering";

this.MouseDown += new

MouseEventHandler(this.MouseDownHandler);

this.Resize += new EventHandler(this.OnResize);

this.SetStyle( ControlStyles.AllPaintingInWmPaint | https://www.doczj.com/doc/fe2672464.html,erPaint, true );

// Configure a timer to draw graphics updates.

timer1 = new System.Windows.Forms.Timer();

timer1.Interval = 200;

timer1.Tick += new EventHandler(this.OnTimer);

bufferingMode = 2;

count = 0;

// Retrieves the BufferedGraphicsContext for the

// current application domain.

context = BufferedGraphicsManager.Current;

// Sets the maximum size for the primary graphics buffer

// of the buffered graphics context for the application

// domain. Any allocation requests for a buffer larger

// than this will create a temporary buffered graphics

// context to host the graphics buffer.

context.MaximumBuffer = new Size(this.Width+1,

this.Height+1);

// Allocates a graphics buffer the size of this form

// using the pixel format of the Graphics created by

// the Form.CreateGraphics() method, which returns a

// Graphics object that matches the pixel format of the form.

grafx = context.Allocate(this.CreateGraphics(),

new Rectangle( 0, 0, this.Width, this.Height ));

// Draw the first frame to the buffer.

DrawToBuffer(grafx.Graphics);

}

private void MouseDownHandler(object sender, MouseEventArgs e)

{

if( e.Button == MouseButtons.Right )

{

// Cycle the buffering mode.

if( ++bufferingMode > 2 )

bufferingMode = 0;

// If the previous buffering mode used

// the OptimizedDoubleBuffering ControlStyle,

// disable the control style.

if( bufferingMode == 1 )

this.SetStyle( ControlStyles.OptimizedDoubleBuffer, true );

// If the current buffering mode uses

// the OptimizedDoubleBuffering ControlStyle,

// enabke the control style.

if( bufferingMode == 2 )

this.SetStyle( ControlStyles.OptimizedDoubleBuffer, false );

// Cause the background to be cleared and redraw.

count = 6;

DrawToBuffer(grafx.Graphics);

this.Refresh();

}

else

{

// Toggle whether the redraw timer is active.

if( timer1.Enabled )

timer1.Stop();

else

timer1.Start();

}

}

private void OnTimer(object sender, EventArgs e)

{

// Draw randomly positioned ellipses to the buffer.

DrawToBuffer(grafx.Graphics);

// If in bufferingMode 2, draw to the form's HDC.

if( bufferingMode == 2 )

// Render the graphics buffer to the form's HDC.

grafx.Render(Graphics.FromHwnd(this.Handle));

// If in bufferingMode 0 or 1, draw in the paint method.

else

this.Refresh();

}

private void OnResize(object sender, EventArgs e)

{

// Re-create the graphics buffer for a new window size.

context.MaximumBuffer = new Size(this.Width+1,

this.Height+1);

if( grafx != null )

{

grafx.Dispose();

grafx = null;

}

grafx = context.Allocate(this.CreateGraphics(),

new Rectangle( 0, 0, this.Width, this.Height ));

// Cause the background to be cleared and redraw.

count = 6;

DrawToBuffer(grafx.Graphics);

this.Refresh();

}

private void DrawToBuffer(Graphics g)

{

// Clear the graphics buffer every five updates.

if( ++count > 5 )

{

count = 0;

grafx.Graphics.FillRectangle(Brushes.Black, 0, 0, this.Width, this.Height);

}

// Draw randomly positioned and colored ellipses.

Random rnd = new Random();

for( int i=0; i<20; i++ )

{

int px = rnd.Next(20,this.Width-40);

int py = rnd.Next(20,this.Height-40);

g.DrawEllipse(new Pen(Color.FromArgb(rnd.Next(0, 255),

rnd.Next(0,255), rnd.Next(0,255)), 1),

px, py, px+rnd.Next(0, this.Width-px-20), py+rnd.Next(0, this.Height-py-20));

}

// Draw information strings.

g.DrawString("Buffering Mode:

"+bufferingModeStrings[bufferingMode], new Font("Arial", 8), Brushes.White, 10, 10);

g.DrawString("Right-click to cycle buffering mode", new Font("Arial", 8), Brushes.White, 10, 22);

g.DrawString("Left-click to toggle timed display refresh", new Font("Arial", 8), Brushes.White, 10, 34);

}

protected override void OnPaint(PaintEventArgs e)

{

grafx.Render(e.Graphics);

}

[STAThread]

public static void Main(string[] args)

{

Application.Run(new BufferingExample());

}

}

}

一年级注册建筑师考试建筑技术设计作图题

一年级注册建筑师考试 建筑技术设计作图题 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

《建筑技术设计》作图题及标准答案 第一题:建筑剖面 1. 结构类型:钢筋混凝土框架结 构,现浇钢筋混凝 土楼板、屋面板, 钢筋混凝土挡土 墙,折板式悬臂楼 梯 基础:钢筋混凝土交叉条形 基础,基础底标 高。基础梁为倒T 型,基础梁高800, 基础梁宽400,基础 梁翼宽900,翼高 200。 楼地面:观景平台:素土夯 实,200厚素混凝土 垫层,100厚钢筋混 凝土楼板,30厚水 泥砂浆找平,贴防 滑地砖。 入口平台:素土夯实, 150厚C25混凝土, 30厚水泥砂找平, 贴防滑地砖。 茶室楼面:100厚现浇钢 筋混凝土楼板,30 厚水泥砂浆找平, 贴防滑地砖。 屋面:现浇钢筋混凝土斜屋 面板,30厚水泥砂 找平后贴瓦楞形屋 面砖,坡度1/2,挑 檐1200(无天 沟)。屋面檐口结 构顶标高为,三角 形高窗处屋面出檐 600。 柱: 300×300钢筋混凝土 柱,25厚水泥砂浆

抹平,外涂乳胶 漆。 墙体: 200厚轻质砖墙,25 厚水泥砂浆抹平, 涂乳胶漆。 挡土墙防水:防水涂料厚(外 贴20厚聚苯泡沫塑 料板保护)。 栏杆:普通金属通透栏杆, 离地高1100。 梁:所有梁宽为200,三 角形高窗顶梁高 300,其它梁高 500。 门窗:门高2700,三角形 高窗底标高。 水池:素土夯实,150厚钢 筋混凝土板,30厚 防水砂浆找平,面 贴瓷砖,高出水面 100,水深600。选择题: 1.该临水茶室屋脊(结构面) 最高处标高为 A B C D 2.楼梯上部的屋脊()结构面 最高处标高为 A B C D 3.剖面图中,可以看到的人字 形屋面梁的数量是 A 2个 B 3个 C 4个 D 5 个 4.基础梁顶标高应为 A B C D 5.剖面图中,屋盖部分共剖到梁的根数是 A 6 B 7 C 8 D 9 第二题:结构布置 右图为7度抗震设防烈度地区六层住宅的第三层平面图,为多孔砖砌体承重结构,按照抗震要求,设置构造柱及布置结构梁,做到结构合理,符合任务及规范要求。 任务说明:

技术作图必备图集总结

技术作图必备图集总结 构造图集总结 1铝合金玻璃幕墙(2005年技术作图考试 石材幕墙构造 2009年 铝合金幕墙) 2外墙内保温建筑构造 3外墙外保温建筑构造 a外墙外保温建筑构造 一 (七种类型外墙外保温复合墙体构造 及各类墙体各部位常用节点详图和全国各地区保温、隔热层厚度选用表) b外墙外保温建筑构造 二 2003年局部修改版 4混凝土小型空心砌块墙体建筑构造 a混凝土小型空心砌块墙体建筑构造 b混凝土小型空心砌块墙体建筑构造(承重混凝土小型空心砌块墙体建筑构造) c框架结构填充小型空心砌块墙体建筑构造(框架结构非承重填充墙体建筑构造) 5建筑幕墙 a点支玻璃幕墙(立柱式、桁架式、拉杆式、拉索式、自平衡式) b全玻璃幕墙(吊挂、吊挂点支式、座地、座地点支式) c铝合金单板框架幕墙(铝合金单板) d铝塑复合板框架幕墙(铝塑复合板) e蜂窝结构框架幕墙(蜂窝结构) f石材框架幕墙(天然石材) 6内隔墙建筑构造 a轻钢龙骨内隔墙(适用于各种面板的轻钢龙骨体系的非承重内隔墙) b预制轻钢龙骨内隔墙(特制异形轻钢龙骨与硅酸钙板在工厂中预制成板材 现场组装的非承重内隔墙) c轻质条板内隔墙(各种材料制成的轻质条板 适用于非承重内隔墙) d 轻集料空心砌块内隔墙(连锁式固定砌块砌筑的非承重内隔墙) e石膏砌块内隔墙(石膏砌块 空心、实心 砌筑的非承重内隔墙建筑构造) f蒸压加气混凝土砌块建筑构造(屋面保温 外、内墙体的填充保温 地面保温等处的构造做法。) 7砖墙建筑构造 烧结多孔砖与普通砖、蒸压类砖 (本图集适用于以粘土、页岩、煤矸石或粉煤灰为主要原料 经焙烧而成的多孔砖 分DM型和KPI型 和普通砖、蒸压灰砂砖和粉煤灰砖墙建筑构造。) 8坡屋面建筑构造 a坡屋面建筑构造 一 (以块瓦、油毡瓦、钢板彩瓦为瓦材 屋面结构层为现浇钢筋混凝土板 防水等级为Ⅱ、Ⅲ级的坡屋面建筑构造) b坡屋面建筑构造 二 (包括钢檩条、木檩条的有檩体系坡屋面建筑构造) 9平屋面建筑构造 a平屋面建筑构造 一 (坡度2%~10%的平屋面或小坡度屋面建筑构造)

技术作图设备总结

1. 通风部分: (1)机械加压送风:防烟楼梯间、前室送风 50米以上一类公建,100米以上住宅,对楼梯间送风,合用前室分别送;其他建筑,需对无自然通风部分送,均无自然通风,对楼梯间送风,合用前室分别送;剪刀梯分别算送,井道分别设置,面积大于0.5平方米。 (2)机械排烟:(设机械排烟的地下室,应同时设送风系统)一类高层和超过32m、二类高层的下列部位: A. 无直接自然通风,且长度超过20m 的内走道或虽有直接自然通风,但长度超过60m 的内走道。 B. 面积超过100m2,且经常有人停留或可燃物较多的地上无窗房间或设固定窗的房 间。 C. 不具备自然排烟条件或净空高度超过12m 的中庭。 D. 除利用窗井等开窗进行自然排烟的房间外,各房间总面积超过200㎡或一个房间面积超过50㎡,且经常有人停留或可燃物较多的地下室。 E. 布置:排烟口附近安全出口沿走道方向相邻边缘之间的最小水平距离不应小于 1.50m。设在顶棚上的排烟口,距可燃构件或可燃物的距离不应小于1.00m。防烟分区内的排烟口距最远点的水平距离不应超过30m。在排烟支管上应设有当烟气温度超过280℃时能自行关闭的排烟防火阀。 (3)新风:竖向风管与水平风管连接,水平风管加防火阀。送风口:一般靠外墙,尽量使得气流流经主功能区,在至回风口;排风:排风口设置与人流疏散方向相反;卫生间排风位于大便器上方;排风排至排风竖井; (4)风机盘管:一般15-30㎡设一台,<15㎡独立房间也要设一台 (5)风管连接:题目要求用软管时用软管;只有支管用软管;软管只接一个风口;在支风管与其他管道交叉或绕梁时用软管。支风管不使软管时可连接几个风口。 (6)防火阀: A. 排烟风管 a 排烟支管 b 机房入口处设有排烟防火阀 B.通风、空气调节系统的风管道应设 a. 管道穿越防火分区处。 b. 穿越通风、空气调节机房及重要的或火灾危险性大的房间隔墙和楼板处。 c. 垂直风管与每层水平风管交接处的水平管段上。 d. 穿越变形缝处的两侧。 2. 消防: (1)喷淋: A. 超高层建筑,除面积小于5.00m2 的卫生间; B. 高层建筑中经常有人停留的公共活动用房或可燃物较多的房间,超过一个防火分区面积的中庭的每层回廊等; C. 小于100m 的一类高层建筑及其裙房的下列部位 a 走道、办公室和旅馆的客房。 b 高级住宅的居住用房。 c 自动扶梯底部和垃圾道顶部。 D. 喷头间距2.4-3.6,端墙小于1.8米;边墙型扩展喷头最大间距4.8,边跨7.2米。(2)火灾探测器:

GDI双缓冲实现与GDI+双缓冲实现

GDI双缓冲实现与GDI+双缓冲实现 分类:C++ 2013-03-21 13:32 57人阅读评论(0) 收藏举报 我们看电视时,看到的屏幕称为OSD层,也就是说,只有在OSD层上显示图像我们才能看到。现在,我需要创建一个虚拟的、看不见但是可以在上面画图(比如说画点、线)的OSD层,我称之为offscreen(后台缓冲区)。这个offscreen存在于内存中,我们在上面画图,这个offscreen上面的东西可以显示在OSD层上,需要一个创建这个offscreen的函数,返回这个offscreen的句柄(整型指针)、宽度、高度、指向新建offscreen数据缓冲区的指针,该缓冲区是一个在函数外创建的offscreen的数据缓冲区,大小是offscreen的高度*宽度*每个像素点数据的大小。闪烁是图形编程的一个常见问题。需要多重复杂绘制操作的图形操作会导致呈现的图像闪烁或具有其他不可接受的外观。双缓冲的使用解决这些问题。双缓冲使用内存缓冲区来解决由多重绘制操作造成的闪烁问题。当启用双缓冲时,所有绘制操作首先呈现到内存缓冲区,而不是屏幕上的绘图图面。所有绘制操作完成后,内存缓冲区直接复制到与其关联的绘图图面。因为在屏幕上只执行一个图形操作,所以消除了由复杂绘制操作造成的图像闪烁。 如何实现双缓冲 首先给出实现的程序,然后再解释,同样是在OnDraw(CDC *pDC)中: CDC MemDC; //首先定义一个显示设备对象 CBitmap MemBitmap;//定义一个位图对象 //随后建立与屏幕显示兼容的内存显示设备 MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画^_^ //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小,也可以自己定义(如:有滚动条时就要大于当前窗口的大小,在BitBlt时决定拷贝内存的哪部分到屏幕上) MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight); //将位图选入到内存显示设备中 //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上 CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap); //先用背景色将位图清除干净,这里我用的是白色作为背景 //你也可以用自己应该用的颜色 MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255)); //绘图 MemDC.MoveTo(……);

建筑制图与识图实训总结.doc

《建筑制图与识图》 实训总结 卢龙职业技术教育中心 徐丽芳

《建筑制图与识图》实训总结 徐丽芳 《建筑制图与识图》是研究投影、绘图的基本技能、识读土建工程图的一门课程。而建筑识图主要研究投影的基本原理、绘制及识读土建工程图的方法和技能。作为建筑工程施工专业的学生,我们掌握投影的基本原理及绘图的基本技能,并要熟练的识读建筑专业施工图纸,准确地领会设计意图,熟练的运用工程语言与合作伙伴进行有关工程方面技术信息的交流。 在建筑识图过程中,我们要结合平时所学的知识,从投影图、轴测图、剖面图、断面图到平面图、立面图以及详图,我们要轻驾基础知识,就熟到工程图的每个细节中。教育学生认真地对待识图作业,要做到专业学生的严谨、仔细、专业。同时我们也要持有想象与创新能力,想象深入到剖面图、断面图中,把握好各个建筑功能和构造,在创新上,可以创造一种新的建筑体系,表达最新的建筑美、艺术美。 识图也是基础知识深浅的反映。在这里,我就识图基础作一个概述。它主要包括投影图、剖面图、断面图、建筑施工图、结构施工图等等。 一般建筑工程图样,是按照投影原理和投影作图的基本规则形成的,所以学习投影就知识是学习识图的基矗而投影原理是光线透过物体上的各个点和线承接影子的平面上,投落下它们的影子,从而使这些点和线的影子组成能反映物体的图形。建筑工程中多数构配件是由平面几何体构成的,根据平面几何面的投影,我们就可以在图纸得到建筑物的图形。 在读图过程中,我们可依靠建筑的水平面、正平面、侧平面的投影,看到建筑的一些特征。但正投影法立体感不强,不易看懂,这时需要具有立体感强的辅助图形轴测投影图来表达。在正投影法与轴测图相辅相成作用,我们才能就熟地读懂图。 为了清晰而简明地表达物体的形状,我们可以想象将物体剖开或断开,从而得到物体的剖面图和断面图。其中剖面图可表达物体内部形状和结构,断面图则是用来表达物体中某一局部的断面形状。根据这两点,我们可以更清楚了解建筑内部的结构。

CDC双缓冲防闪屏绘图总结

CDC双缓冲防闪屏绘图总结 CDC在屏幕绘图可以用以下方法: CDC dc; dc.CreateCompatibleDC(NULL); CBitmap m_bitmap; m_bitmap.LoadBitmap(IDB_BITMAP1); //载入资源文件 dc.SelectObject(&m_bitmap); CDC *pDC = GetDC(); pDC->BitBlt(0,0,200,100,&dc,0,0,SRCCOPY); m_bitmap.DeleteObject(); dc.DeleteDC(); 上面虽然可以在屏幕绘图,但是如里需要绘多张图,并且有重叠的部份,当鼠标改变窗口大小时,重叠部份有严重的闪烁。非常难看 CDC *pDC = GetDC(); pDC->BitBlt(0,0,200,100,&dc,0,0,SRCCOPY); 这个方式是直接在屏幕绘图,如果多张图,即多次调用此方法。 为了避免闪烁,可采用双缓冲的方法,不管你要绘多少张图,先把它们绘在一个内存DC,之后再在屏幕显示

DC小知识点: CDC dc; 这个是内存dc, 使用BitBlt只会在内存中,不会在屏幕显示 一旦dc=GetDC(); 此时dc就与屏幕有关了,BitBlt方法就会输出的屏幕 CDC双缓冲防闪屏绘图实例 下面的nWidth,nHeight 是屏幕的宽高 CDC *pDC=this->GetDC(); //此DC负责在屏幕显示 CDC dc,sub_dc; //dc 负责组建对话框整张大图,sub_dc负责里面小块 dc.CreateCompatibleDC(NULL); sub_dc.CreateCompatibleDC(&dc); //注意参数,&dc就指定了sub_dc是基于dc的。 CBitmap bg_bmp,load_bmp; // bg_bmp负责构造背景,load_bmp负责从资源文件载入位图 bg_bmp.CreateCompatibleBitmap(pDC,nWidth,nHeight); //先创建一张与对话框当前大小一致的位图 dc.SelectObject(&bg_bmp); dc.FillSolidRect(0,0,nWidth,nHeight,RGB(236,236,234)); //构造背景 bg_bmp.DeleteObject(); //构造第一张图

图片控件上实现双缓冲绘图防止闪烁

1.添加图片控件 2.对话框初始化函数(或其他函数中获得控件的绘图指针) /*******获得图片区绘图指针*******/ pWnd = GetDlgItem(IDC_STA TIC_SHOWPICTURE);//获得控件窗口 //获得控件大小,PictureRect是全局变量,用于存放控件大小 pWnd->GetClientRect(&PictureRect); pDC = pWnd->GetDC();//定义pDC为控件绘图设备指针 3.内存中绘图并将图形复制到当前区域中 void CShockSensorConfiguratorDlg::OnPaint() { …; else { if(m_iWitchPicture==3)//如果要显示的是第三张也就是自己绘制的图形 { CBitmap memBitmap; CBitmap* pOldBmp = NULL; memDC.CreateCompatibleDC(pDC); memBitmap.CreateCompatibleBitmap(pDC,PictureRect.right,PictureRect.bottom); pOldBmp = memDC.SelectObject(&memBitmap); memDC.BitBlt(PictureRect.left,PictureRect.top,PictureRect.right,PictureRect.bottom,pDC, 0,0,SRCCOPY); memDC.FillSolidRect(1,1,PictureRect.right-2,PictureRect.bottom-2,RGB(255,255,255)); DrawPicture(&memDC);//自绘函数,传入的是内存指针,也就是在内存中绘图pDC->BitBlt(PictureRect.left,PictureRect.top,PictureRect.right,PictureRect.bottom,&m emDC,0,0,SRCCOPY); memDC.SelectObject(pOldBmp); memDC.DeleteDC(); memBitmap.DeleteObject(); } else if(m_iWitchPicture==2) { CDC *pDC1; pDC1=GetDC(); CBitmap m_bmpBK;

建筑制图学习总结

建筑制图学习总结 【篇一:建筑制图学习感想】 建筑制图学习感想 对于我来说,建筑制图是我目前为止学到的唯一关于画图的一门课,制图方法加上同时学习的cad,从此颠覆了我们过去用铅笔橡皮的 时代,因为过去从来没有接触过类似的课程。刚开始觉得十分费力,因为从来没有进行过这种类型的空间想象能力的训练,但是经过一 个学期的学习和练习,这方面的能力已经得到了极大的提高,再看 起工程的各种图纸来也不是像刚开始那样费劲了。 建筑制图中让我最感兴趣的是学习了较为规范的制图方法,以及规 范的制图图例,对投影的学习也让我对识图有了新的认识和提高, 总之,学了之后,使我对制图和识图都有了一个提高。一学期的学习,我认真看了书,学了很多制图方法,自己去练习,感觉运用一 些规范的方法和图标来画图,让人看起来真像那么回事了,相比起 以前手工画图,且不规范,有了很大的提高了,熟练程度和速度也 加强了不少,同时对于以前看了认为比较复杂的图纸也有了一些新 的认识,提高了识图能力。三维和投影的学习让我对于效果图和立 面图、剖面图等都有了感性的认识。通过这门课程的学习,将对我 今后的工作有很大的帮助,无论是制图还是识图,都将会得到很大 的提高,无论在设计、还是施工的岗位上,都不再停留在原有的基 础上了,对于一些新的岗位,对于难度大的一些课题和工程,都让 我增加了挑战的信心,工作起来也会更加的得心应手。 【篇二:建筑制图与识图教学总结】 《建筑制图与识图》教学总结 《建筑制图与识图》为建筑工程管理专业学生的一门通用技术基础 课程。主要培养学生的识图和绘图能力,同时为后继专业课程的学 习打下坚实的基础。随着高职教育理论的发展,促使本课程突出识 图和计算机绘图能力培养,努力打破传统的图学教育为中心的学科 体系,以工作过程为导向进行课程内容重构和二次开发,打破过去 从几何作图开始,强调作图原理再到专业制图的完整的图学内容体系,改变重绘图知识轻识图能力与行业脱节的课程体系,会同企业 技术人员,按照职业岗位的识绘图能力要求更新教学内容,设计教 学实训项目;开展项目法教学,所有实训项目取材于实际工作岗位

绘图的双缓冲技术

绘图的双缓冲技术 简介 幸运的是当编写一个典型的Windows 窗体程序时,窗体和控件的绘制、效 果等操作是不需要特别加以考虑的。这是为什么呢?因为通过使用 .Net 框架,开发人员可以拖动一系列的控件到窗体上,并书写一些简单的与事件相关联的 代码然后在IDE中按F5,一个完完全全的窗体程序就诞生了!所有控件都将自 己绘制自己,窗体或者控件的大小和缩放都调整自如。在这里经常会用到的, 且需要引起一点注意的就是控件效果。游戏,自定义图表控件以及屏幕保护程 序的编写会需要程序员额外撰写用于响应 Paint 事件的代码。 本文针对那些Windows 窗体开发人员并有助于他们在应用程序编制过程中 使用简单的绘图技术。首先,我们会讨论一些基本的绘图概念。到底谁在负责 进行绘制操作?Windows 窗体程序是如何知道何时该进行绘制的?那些绘制代 码究竟被放置在哪里?之后,还将介绍图像绘制的双重缓冲区技术,你将会看 到它是怎样工作的,怎样通过一个方法来实现缓存和实际显示的图像间的交替。最后,我们将会探讨”智能无效区域”,实际就是仅仅重绘或者清除应用程序 窗体上的无效部分,加快程序的显示和响应速度。希望这些概念和技术能够引 导读者阅读完本文,并且有助于更快和更有效的开发Windows 窗体程序。 Windows 窗体使用GDI+图像引擎,在本文中的所有绘图代码都会涉及使用 托管的.Net 框架来操纵和使用Windows GDI+图像引擎。 尽管本文用于基本的窗体绘图操作,但是它同样提供了快速的、有效的且 有助于提高程序性能的技术和方法。所以,在通读本文之前建议读者对.Net框 架有个基本的了解,包括Windows 窗体事件处理、简单的GDI+对象譬如Line,Pen和Brush等。熟悉Visual Basic .Net或者C#编程语言。 概念 Windows 应用程序是自己负责绘制的,当一个窗体”不干净”了,也就是 说窗体改变了大小,或者部分被其它程序窗体遮盖,或者从最小化状态恢复时,程序都会收到需要绘制的信息。Windows把这种”不干净”状态称为”无效的(Invalidated)”状态,我们理解为:需要重绘,当Windows 窗体程序需要重 绘窗体时它会从Windows消息队列中获取绘制的信息。这个信息经过.Net框架 封装然后传递到窗体的 PaintBackground 和 Paint 事件中去,在上述事件中 适当的书写专门用于绘制的代码即可。 简单的绘图示例如下: using System;

建筑制图教学总结

《建筑制图》教学总结 《建筑制图与识图》为建筑工程管理专业学生的一门通用技术基础课程。主要培养学生的识图和绘图能力,同时为后继专业课程的学习打下坚实的基础。随着高职教育理论的发展,促使本课程突出识图和计算机绘图能力培养,努力打破传统的图学教育为中心的学科体系,以工作过程为导向进行课程内容重构和二次开发,打破过去从几何作图开始,强调作图原理再到专业制图的完整的图学内容体系,改变重绘图知识轻识图能力与行业脱节的课程体系,会同企业技术人员,按照职业岗位的识绘图能力要求更新教学内容,设计教学实训项目;开展项目法教学,所有实训项目取材于实际工作岗位的任务,变教学过程为工作过程,变被动学习为带任务工作;打造理论与实践一体化的课堂教学环境,融“教、学、做”为一体;以学生学习为中心,开展讨论会、座谈会、模拟“图纸会审”等方式方法,将课程中的理论要点用实际图纸的识读与绘图检验,让学生深切体会到知识的实用性,增加开放性思考题和学习自测表,启发学生观察周边建筑物来思考建筑形体各种表达方法,积极利用学生的生活经验引导学生观察、实践、收集资料、主动探索、突出创新和实践能力的培养,建立考试题库,实行教考分离,并与制图员职业资格考证衔接,进行理论和上机绘图的技能测试改革,实现了职业能力培养的“目标 - 计划 - 过程 - 考核”的系统性和科学化,教学效果明显提高。 本期我担任14秋造价1班,14秋装饰1班的建筑制图课程教学工作,在教学过程中与同学们相处融洽。忙忙碌碌,转眼间,一个紧张而又充实的学期过去了。回顾这学期,忙碌而愉快的工作中,在学校其他老师和领导的支持下,我也取得了一些的成绩和进步。在这里我对本学期的工作做个小结,并从中汲取精华加以保存,寻找不足加以弥补,争取在新的一学年中取得更大的提高。 一、政治思想方面: 教学工作中,平时注意认真学习新的教育理论,及时更新教育理念。积极参加校本教研和其他各类培训,并做了大量的笔记。还认真学习、仔细体会并努力去做一名新形势下优秀教师。 二、教育教学方面: (1)个人教学方面:要提高教学质量,关键是上好课。为了上好课,我做了下面的工作:

MFC双缓冲画图

在实现绘图的过程中,显示的图形总是会闪烁,笔者曾经被这个问题折磨了好久,通过向高手请教,搜索资料,问题基本解决,现将文档整理出来以供大家参考. 1.显示的图形为什么会闪烁 我们的绘图过程大多放在OnDraw或者OnPaint函数中,OnDraw在进行屏幕显示时是由OnPaint进行调用的。当窗口由于任何原因需要重绘时,总是先用背景色将显示区清除,然后才调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图形的交替出现,使得显示窗口看起来在闪。如果将背景刷设置成NULL,这样无论怎样重绘图形都不会闪了。当然,这样做会使得窗口的显示乱成一团,因为重绘时没有背景色对原来绘制的图形进行清除,而又叠加上了新的图形。有的人会说,闪烁是因为绘图的速度太慢或者显示的图形太复杂造成的,其实这样说并不对,绘图的显示速度对闪烁的影响不是根本性的。例如在OnDraw(CDC *pDC)中这样写: pDC->MoveTo(0,0); pDC->LineTo(100,100); 这个绘图过程应该是非常简单、非常快了吧,但是拉动窗口变化时还是会看见闪烁。其实从道理上讲,画图的过程越复杂越慢闪烁应该越少,因为绘图用的时间与用背景清除屏幕所花的时间的比例越大人对闪烁的感觉会越不明显。比如:清楚屏幕时间为1s绘图时间也是为1s,这样在10s内的连续重画中就要闪烁5次;如果清楚屏幕时间为1s不变,而绘图时间为9s,这样10s内的连续重画只会闪烁一次。这个也可以试验,在OnDraw(CDC *pDC)中这样写: for(int i=0;i<100000;i++) { pDC->MoveTo(0,i); pDC->LineTo(1000,i); } 程序有点极端,但是能说明问题。 说到这里可能又有人要说了,为什么一个简单图形看起来没有复杂图形那么闪呢?这是因为复杂图形占的面积大,重画时造成的反差比较大,所以感觉上要闪得厉害一些,但是闪烁频率要低。那为什么动画的重画频率高,而看起来却不闪?这里,我就要再次强调了,闪烁是什么?闪烁就是反差,反差越大,闪烁越厉害。因为动画的连续两个帧之间的差异很小所以看起来不闪。如果不信,可以在动画的每一帧中间加一张纯白的帧,不闪才怪呢。 2、如何避免闪烁 在知道图形显示闪烁的原因之后,对症下药就好办了。首先当然是去掉MFC提供的背景绘制过程了。实现的方法很多: * 可以在窗口形成时给窗口的注册类的背景刷付NULL * 也可以在形成以后修改背景 static CBrush brush(RGB(255,0,0)); SetClassLong(this->m_hWnd,GCL_HBRBACKGROUND,(LONG)(HBRUSH)brush); * 要简单也可以重载OnEraseBkgnd(CDC* pDC)直接返回TRUE(屏蔽掉系统的自动刷新)

建筑技术作图 一注重要考点

08年一注考试备忘速记手册 v.1.10 第 33 页 共 68 页 编纂:石峰 VIII. 建筑技术作图 第一章 建筑构造 第一节 考试经验 1.1.1.1 构造:现制水磨石楼地面(有防水层)、单层长条硬木楼地面、强化复合双 层木地板楼地面。【07年考题】 1.1.1.2 刚性II 级防水、倒置式屋面II 级防水,带隔汽层III 级防水【08年考题】 第二章 建筑结构 第一节 考试经验 2.1.1.1 结构:钢结构厂房结构布置,注意抗风柱概念等。【07年考题】 2.1.1.2 后浇带分为施工、温度、抗震等类别,一般设在较长建筑的中段,并设在 跨中1/3处,呈“Z ”字形布局【08年考题】 第三章 建筑设备——水、暖 第一节 给排水 『一』 给水 3.1.1.1 记得:冷、热水给水管在卫生器具前要设阀门。 3.1.1.2 管道布置要求:不影响建筑物的使用和美观,节约管材,便于安装、维修。 3.1.1.3 明装和暗装:一般采用明装,管道宜沿墙、梁、柱布置;暗装时管道不得 直接敷设在建筑物结构层内,干管和立管应敷设在吊顶、管井、管槽内, 支管宜敷设在楼(地)面的找平层内或沿墙敷设管槽内。 3.1.1.4 给水管道与其他管道同沟敷设时,给水管宜在排水管、冷冻管上方,热水 管、热力管下方,给水管道与各种管道之间的净距,应满足安装操作要求, 且不宜小于0.3m 。 3.1.1.5 生活给水管道不宜与输送易燃、可燃或有害的液体或气体管道同沟敷设。 3.1.1.6 建筑物内埋地敷设的生活给水管与排水管之间的最小水平净距≥0.5m ;垂 直交叉敷设:≥0.15m ,且给水管应敷设在排水管上面。 3.1.1.7 室内冷热水管布置,记住上热下冷,左热右冷。 3.1.1.8 管道穿越下列部位时,应设套管:(1)穿越地下室或地下构筑 物外墙处;(2)穿越屋面处(有可靠防水时,可不设套管);(3)穿越 钢筋混凝土水池(箱)的壁板或底板连接管道时。 3.1.1.9 室外给水管道的覆土深度,应根据土壤冰冻深度、车辆荷载、管道材质及 管道交叉等因素确定:管顶最小覆土深度不得小于土壤冰冻线以下0.15m , 行车道下的管线覆土深度不宜小于0.7m 。 3.1.1.10 厕所、盥洗室、卫生间等需从地面排水的房间设地漏,地漏水封不小于 50mm 。 3.1.1.11 卫生器具在排水口以下设存水弯(器具构造内有存水弯时不再另设。) 第二节 暖通空调 3.2.1.1 风机盘管布置:一般15~30㎡一个,小于15㎡的独立房间也要设一个。 3.2.1.2 风机盘管:送风口为侧送时,回风口应与送风口在房间同侧。送风口为下 送时,回风口应与送风口在房间的不同侧。 3.2.1.3 全空气系统,每层水平干管与穿层的竖风管连接时,水平干管加防火阀。『记住:凡横竖相接,或者穿越防火墙,就要加防火阀』,但同一防火分区 水平相接就不用加防火阀。 3.2.1.4 送风口布置要均匀,净高越小,送风口间距也越小。一般2.5~3.5m 净高 的房间,送风口间距为2.5~4.5m ,距墙边1.2~2m ,送风口距回风口应大于2.5m 。 3.2.1.5 喷淋头的间距应按照不同的火灾危险等级、喷头流量系数及工作压力确定。一般采用3.6~4.0m ,不宜小于2.4m 。喷头与端墙的最大距离为1.8m 。 第三节 考试经验 3.3.1.1 小型中央空调,冷凝水不应接回主机,可接进地漏,但要留有一定空气隔断 第四章 建筑设备——电 第一节 灯具布置 『一』 一般照明布置原则 4.1.1.1 单位容量法计算灯具数:∑?=S P ω『即安装总容量(W )=最低照度值的单位面积安装容量(W/㎡)乘以面积』 P P N ∑≥『灯具数=总容量/一套灯具的安装容量』 4.1.1.2 靠墙灯具至墙的距离应减少到(1/3~1/2)L , 4.1.1.3 卫生间布置灯具,应避开坐便器及浴缸的上面和后面,距浴缸边缘至少0.6m ,不允许在浴缸上方。 4.1.1.4 电源插座宜由独立的支路供电,且插座电路要安装漏电保护器 4.1.1.5 电源插座分明装和暗装,有单相两孔、单相三孔、三相四孔,而一般三孔插座都是左零(线),右火(线),上接地(PE 线)。图例涂黑表示暗装;不涂黑表示明装;图例外加方框,表示密闭型,用于潮湿空间,且安装高度要≥1.5m 。 4.1.1.6 一般一个开关可控制2~4组灯具,超过4组就不行 4.1.1.7 非工作区的平均照度不应低于工作区平均照度的1/5。 4.1.1.8 采用混合照明时,局部照明增加的照度按一般照明照度的1.0~3.0倍选取。 4.1.1.9 交流电路中,气体放电灯发出的光通量会随电压的变化而波动,对移动物体产生视觉失真,因此,在频闪效应对视觉条件有影响的场所应将相邻灯具,分别接在不同相位的线路上。 4.1.1.10 疏散照明间距20m/个。 第二节 考试经验 4.2.1.1 空调回路只能1~2个空调回一路 4.2.1.2 厨房、卫生间必须单独设置回路 4.2.1.3 第五章 试题概念 第一节 07年试题 5.1.1.1 5.1.1.2 设备:旅馆通风布置。

建筑快题绘图技法--------史上最全面的快题绘图总结

建筑快题绘图技法--------史上最全面的快题绘图总结(大禹手绘培训奉献) ------此版本未附详图(详图版只针对大禹学员复印使用) 此资料主要针对快题中的总平图、平面图、立面图、剖面图的绘图技法和常见错误进行综合总结,旨在帮助快题初学者快速掌握和提高快题技能,让学员在短期内掌握快图的绘图要点! 一:推荐书籍: ●《快速建筑设计100例》第三版黎志涛江苏科学技术出版社 ●《天津大学建筑快题80例》荆子洋江苏科学技术出版社 ●《华南理工建筑快题设计50例》胡振宇,林晓东江苏科学技术出版社 ●《快速建筑设计考试指导》郑军、杨晓景王贺中国建筑工业出版社 二:总平图 1:总平面图的考点: 总图考的是一个考生对建筑用地的整体处理能力,表现在图纸上就是黎志涛老师书上说的“图底关系”,“图”是“建筑”,底是指“广场用地”与“绿化用地”,所以一个好的总图一定要处理好建筑与基地之间的有机结合! 2:总平面图的表现需要注意的问题: 对基地内环境和基地外环境表达要清晰(绿化、交通、地形、水文特征等对设计有影响的场地因素都必须),这样更具有位置说服力! 2.1:指北针 标在图的左下角或者右下角,采用最简练和熟练的画法! 2.2:比例尺 常用比例1:500 2.3:文字标注 (各功能区标注、广场、停车场、用地红线、道路红线、后勤入口、主入口、自行车停车场、古树、遗址保护、河流等) 2.4:阴影表现 根据不同高度标示出投影的长短,根据不同的形状画出具体的投影轮廓。 2.5:交通系统(主次出入口、车行、人行、车库入口、自行车停车场、汽车停车场、城市 道路以及人行道) 2.6:等高线 等高线是用来说明地形特征的,等高线一般要比建筑线弱,所以用虚线表示较好 2.7:建筑外轮廓线要加粗(同立面图一样) 女儿墙外线用加粗实线,内线用细实线 2.8:地面铺装要有细节 2.9:建筑层数 层数标注有阿拉伯数字标注和圆点标注 2.10:植物配景(注意比例尺度) 两个一组、三个成团,孤植古树 2.11:用地红线

C#绘图双缓冲技术总结

C#绘图双缓冲技术总结 GDI+的双缓冲问题 一直以来的误区:.net1.1 和.net 2.0 在处理控件双缓冲上是有区别的。 .net 1.1 中,使用:this.SetStyle(ControlStyles.DoubleBuffer, true); .net 2.0中,使用:this.SetStyle(ControlStyles.OptimizedDoubleBuffer, true); VS2005 是2.0 怪不说老是提示参数无效,一直也不知道是这个问题,呵呵 要知道,图元无闪烁的实现和图元的绘制方法没有多少关系,只是绘制方法可以控制图元的刷新区域,使双缓冲性能更优! 导致画面闪烁的关键原因分析: 一、绘制窗口由于大小位臵状态改变进行重绘操作时 绘图窗口内容或大小每改变一次,都要调用Paint事件进行重绘操作,该操作会使画面重新刷新一次以维持窗口正常显示。刷新过程中会导致所有图元重新绘制,而各个图元的重绘操作并不会导致Paint事件发生,因此窗口的每一次刷新只会调用Paint事件一次。窗口刷新一次的过程中,每一个图元的重绘都会立即显示到窗口,因此整个窗口中,只要是图元所在的位臵,都在刷新,而刷新的时间是有差别的,闪烁现象自然会出现。 所以说,此时导致窗口闪烁现象的关键因素并不在于Paint事件调用的次数多少,而在于各个图元的重绘。

根据以上分析可知,当图元数目不多时,窗口刷新的位臵也不多,窗口闪烁效果并不严重;当图元数目较多时,绘图窗口进行重绘的图元数量增加,绘图窗口每一次刷新都会导致较多的图元重新绘制,窗口的较多位臵都在刷新,闪烁现象自然就会越来越严重。特别是图元比较大绘制时间比较长时,闪烁问题会更加严重,因为时间延迟会更长。 解决上述问题的关键在于:窗口刷新一次的过程中,让所有图元同时显示到窗口。 二、进行鼠标跟踪绘制操作或者对图元进行变形操作时 当进行鼠标跟踪绘制操作或者对图元进行变形操作时,Paint事件会频繁发生,这会使窗口的刷新次数大大增加。虽然窗口刷新一次的过程中所有图元同时显示到窗口,但也会有时间延迟,因为此时窗口刷新的时间间隔远小于图元每一次显示到窗口所用的时间。因此闪烁现象并不能完全消除! 所以说,此时导致窗口闪烁现象的关键因素在于Paint事件发生的次数多少。解决此问题的关键在于:设臵窗体或控件的几个关键属性。 下面来介绍解决办法的具体细节: 解决双缓冲的关键技术: 1、设臵显示图元控件的几个属性:必须要设臵,否则效果不是很明显!this.SetStyle(ControlStyles.OptimizedDoubleBuffer | ControlStyles.ResizeRedraw | ControlStyles.AllPaintingInWmPaint, true);

c++双缓冲程序设计

《1》普通绘图就是直接在我们看得到的黑板上绘图 《2》双缓冲就是先在一个虚拟的黑板上画完,等用到的时候在把虚拟黑板上的图画复制到我们看得到的黑板上去; 利用双缓冲的优点就是能够使画面流畅,可以想象把画好的图直接粘贴到黑板上一定比在黑板上重新画要快的多。 ——————————————————————开始 第一步:新建一个对话框工程 第二步:添加两个按钮: 一个命名为双缓冲绘图; 一个命名为普通绘图; 第三步:声明变量: 在CMyDlg类上右击添加变量如下: CDC MyDC; CBitmap bmp; CBitmap *oldbmp; 首先声明一个与窗口DC兼容的内存DC(MyDC)和两个与内存相兼容的位图(bmp,*oldbmp) 第四步:在OnInitDialog()函数中添加以下代码: //窗口DC CDC *dc=GetDC(); //创建与窗口DC兼容的内存DC(MyDC)及位图(bmp,*oldbmp ) MyDC.CreateCompatibleDC(dc); bmp.CreateCompatibleBitmap(dc,200,200); //把内存位图选进内存DC中用来保存在内存DC中绘制的图形 oldbmp=MyDC.SelectObject(&bmp); //在内存DC中绘制一些小的圆形,数量要多(体现双缓存的优点) for(int i=0;i<200;i+=6) for(int j=0;j<200;j+=6) MyDC.Ellipse(i-3,j-3,i+3,j+3); 第五步:右击CMyDlg类添加windows消息响应函数WM_CLOSE,添加以下代码:MyDC.SelectObject(oldbmp); bmp.DeleteObject(); MyDC.DeleteDC(); //选进原来的位图,删除内存位图对象和内存DC 第六步:双击”双缓冲“按钮添加以下代码: GetDC()->StretchBlt(0,0,200,200,&MyDC,0,0,200,200,SRCCOPY); //把内存DC中的图形粘贴到窗口中; 第七步:双击“普通绘图”按钮添加以下代码: for(int i=0;i<200;i+=6) for(int j=0;j<200;j+=6) GetDC()->Ellipse(i-3,j-3,i+3,j+3);

建筑技术作图知识点总结

10年以来技术作图考点 结构布置 1999:高大空间砖混结构(展厅)—---布置梁、过梁、预制、现浇板、壁柱、混凝土柱 2000:高大空间砖混-钢结构(礼堂)--布置梁、板、柱、屋架、支撑、檩条 2001:高大空间钢结构(超市)-------布置抗风柱、柱间支撑、等等钢结构所有结构构件 2003:砖-木结构(小学)------------布置承重墙、屋架、木梁、檩条、挑檐木、砖柱 2004:砖混结构抗震(多层住宅)-----布置构造柱、圈梁、过梁、板式楼梯2005:剪力墙结构(高层复式住宅)---布置剪力墙、暗柱、连梁(非常复杂)2006:筒中筒结构(高层办公)-------布置梁、板、柱、剪力墙 2007:高大空间钢结构(厂房)-------布置抗风柱、柱间支撑、等等钢结构所有结构构件 2008:复杂平面剪力墙结构(学校)---布置剪力墙、防震缝、后浇带 2009:砖混结构旧房改造(办公)-----布置梁、板、柱 总结:近年出题人有把简单问题复杂化的倾向,布置原理很简单,但题目描述七弯

八拐,且故意用非通用的术语,目的是让你不明题意。 建筑配件与构造 1999:刚性防水屋面变形缝、墙身变形缝、地面、内墙变形缝 2000:轻钢龙骨吊顶 2001:轻隔断 2003:块瓦双坡屋面天沟、屋脊、檐口、变形缝 2004:地下室施工缝、后浇带、伸缩缝 2005:石材幕墙构造 2006:残疾人楼梯构造 2007:水磨石地面、强化双层木地板楼面、单层木地板楼面、隔声楼面2008:屋面防水构造 2009:玻璃幕墙构造 建筑设备管道系统 1999:高层核心筒照明、通风、疏散、喷淋布置 2000:银行营业厅照明、空调、喷淋布置 2001:高层办公室照明、空调、疏散、喷淋布置 2003:高层核心筒消防、喷淋、通风布置

vc双缓冲

双缓冲:VC++双缓冲实现方法 在图形图象处理编程过程中,双缓冲是一种基本的技术。我们知道,如果窗体在响应WM_PAINT消息的时候要进行复杂的图形处理,那么窗体在重绘时由于过频的刷新而引起闪烁现象。解决这一问题的有效方法就是双缓冲技术。 因为窗体在刷新时,总要有一个擦除原来图象的过程OnEraseBkgnd,它利用背景色填充窗体绘图区,然后在调用新的绘图代码进行重绘,这样一擦一写造成了图象颜色的反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。 我们会很自然的想到,避免背景色的填充是最直接的办法。但是那样的话,窗体上会变的一团糟。因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,画面往往会变的乱七八糟。所以单纯的禁止背景重绘是不够的。我们还要进行重新绘图,但要求速度很快,于是我们想到了使用BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上也就是双缓冲绘图的基本的思路。 一、普通方法: 先按普通做图的方法进行编程。即在视类的OnDraw函数中添加绘图代码。在此我们绘制若干同心圆,代码如下: CBCDoc* pDoc = GetDocument(); ASSERT_V ALID(pDoc); CPoint ptCenter; CRect rect,ellipseRect; GetClientRect(&rect); ptCenter = rect.CenterPoint(); for(int i=20;i>0;i--){ ellipseRect.SetRect(ptCenter,ptCenter); ellipseRect.InflateRect(i*10,i*10); pDC->Ellipse(ellipseRect); } 编译运行程序,尝试改变窗口大小,可以发现闪烁现象。 二、双缓冲方法: 在双缓冲方法中,首先要做的是屏蔽背景刷新。背景刷新其实是在响应WM_ERASEBKGND消息。我们在视类中添加对这个消息的响应,可以看到缺省的代码如下:

GDI+测井曲线绘图中效率提升的研究

龙源期刊网 https://www.doczj.com/doc/fe2672464.html, GDI+测井曲线绘图中效率提升的研究 作者:王宇飞赵正文李瑶 来源:《数字技术与应用》2013年第03期 摘要:GDI+提供了快速、简单、有效的程序开发方式。大量测井原始数据生成测井曲线时,绘制对象的增加严重制约了GDI+的绘图效率。双缓冲技术的使用,可以有效避免图形的闪烁;使用内存中已有图形,可以减少测井曲线的绘制过程,显著提高图形绘制效率。 关键词:测井曲线双缓冲内存图形绘图效率 中图分类号:P631.84 文献标识码:A 文章编号:1007-9416(2013)03-0083-02 1 前言 GDI(Graphics Device Interface,图形设备接口)的主要任务是负责系统与绘图程序之间 的信息交换,处理所有Windows程序的图形输出。通过GDI众多函数,软件开发人员不需要关心设备驱动及具体硬件设备,就可以将应用程序的输出转化为硬件设备上的输出,实现程序与硬件设备的隔离,方便开发工作。 GDI+是GDI的升级版本,在GDI的基础上进行了了大量的优化和改进工作,使得它的易用性更好。GDI其中的一个好处就是用户不必知道任何关于数据怎样在设备上绘制图像的细节,GDI+更好地拓展了这一优点,GDI是一个中低层API,用户必须需要知道设备情况,而GDI+是一个高层的API,用户可以不必知道设备情况,GDI+的体系结构如图1。此外,GDI+不但在功能上比GDI强大很多,而且在代码编写方面也要显得更加简单方便,这将使得其很 快成为Windows图形图像程序开发的首选。 2 测井曲线绘制中存在问题 测井是油田勘探与开发过程中确定和评价油、气层的重要方法之一,是解决地质问题的重要手段。通过测井能直接为石油地质和工程技术人员提供各项资料和数据,以指导油田生产。然而,通过测井设备测量出的大多是一系列离散或连续的数值型数据,同时这也是它们在数据库中的存储形式,即使经验丰富的测井解释人员要想在几百甚至几千米井深的海量测井数据中获得解释结论也是相当困难的,不利于测井数据发挥其功用。将各类测井数据以图像的形式直观的展示在测井解释人员面前,更方便于测井数据的解释与分析。 由于油田勘探与开发过程中,井深一般都在几百米甚至几千米。以一米八个采样点,井深1000米就有8000个采样点。按照1280×800的分辨率进行绘制,也需要10个屏幕长度的界面来绘制。同时,测井曲线图中的对象需要进行、调整显示顺序等操作。如果在绘制过程中,将所有对象进行绘制,图形会出现严重闪烁和操作延迟现象。因此,有效提升绘图效率的方法是必需的,以此达到测井解释人员的使用要求。

相关主题
文本预览
相关文档 最新文档