VC++绘图编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
8
绘制线条
移动画笔位置 成员函数MoveTo() 用CDC成员函数 成员函数 pDC->MoveTo(x1,y1) ; 绘制直线 成员函数LineTo() 用CDC成员函数 成员函数 pDC->LineTo(x2,y2) ; 演示程序: 使用 使用CPen画线 画线.avi> 演示程序: <使用 画线
12
演示程序:图形操作 画光栅点 演示程序:图形操作/画光栅点
void CImageView::OnDrawPixel() // ImageView.cpp { bDrawPixel=true; Invalidate(false); } void CImageView::OnDraw(CDC* pDC) {… if(bDrawPixel) DrawPixelOnCanvus(pDC); } void DrawPixelOnCanvus(CDC* pDC) { void CImageView::DrawPixelOnCanvus(CDC* pDC) { for(int y=20;y<200;y++) for(int x=300;x<500;x++) pDC->SetPixel(x,y,(COLORREF)x+y); } }
演示程序: 演示程序:画线函数处理.avi
11
画光栅点
pDC->SetPixel(x,y,(COLORREF)x+y);
COLORREF SetPixel( int x, int y, COLORREF crColor );
Parameters x
Specifies the logical x-coordinate of the point to be set.
y
Specifies the logical y-coordinate of the point to be set.
crColor
A COLORREF RGB value that specifies the color used to paint the point. See COLORREF in the Platform SDK for a description of this value.
O
设备坐标系统 逻辑坐标系统
XБайду номын сангаас
Y
Y
O
X
5
3.1.4 在窗口用户区绘图
函数中用参数CView类的指针 类的指针pDC在屏幕上绘图 在屏幕上绘图: 在OnDraw()函数中用参数 函数中用参数 类的指针 在屏幕上绘图 以画线为例
void CImageView::OnDraw(CDC* pDC) { CImageDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; pDC->MoveTo(20,10); pDC->LineTo(200,100); }
3
3.1.2 GDI类 类
图形对象类 功能描述 CPen 用于绘制对象的边线 CBrush CFont 用于填充绘制对象的内部 用于绘制文本
4
3.1.3 坐标系统
1. 设备坐标系统 x轴自左至右,y轴从上到下,坐标原点在屏幕左上角 轴自左至右, 轴从上到下 轴从上到下, 轴自左至右 2. 逻辑坐标系统 坐标为自下而上,坐标原点在屏幕左下角 坐标为自下而上,
演示程序: 画线 画线MovetoLineto.avi> 演示程序 <画线
6
3.2 画笔与线条图的绘制
画笔用来绘制直线,曲线以及各种几何图形轮廓等线条. 画笔用来绘制直线,曲线以及各种几何图形轮廓等线条. 线条除了有颜色特性外,还有风格 宽度等特征 颜色特性外 风格与 线条除了有颜色特性外,还有风格与宽度等特征 (1)创建新画笔对象 CPen penBlue(PS_SOLID,5,RGB(0,0,255)); , , (2)把新画笔选进设备环境 ,同时保存系统原有画笔 pOldPen=pDC->SelectObject(&penBlue); (3)用新画笔绘图 调用各种成员函数进行绘图 (4)把系统原有画笔选进设备环境 pDC->SelectObject(pOldPen); (5)删除新画笔 penBlue.DeleteObject()
10
用标志在OnDraw函数中选择绘制线条 函数中选择绘制线条 用标志在 函数中选择绘制
void CImageView::OnDrawLine() //ImageView.cpp { bDrawLine=true; Invalidate(false); } void CImageView::OnDraw(CDC* pDC) {… if(bDrawLine) DrawLineOnCanvus(pDC); } void DrawLineOnCanvus(CDC* pDC) { CPen penSolidRed(PS_SOLID,10,RGB(255,0,0)); CPen *pOldPen; x1= 20; y1=100; pOldPen=pDC->SelectObject(&penSolidRed); pDC->MoveTo(x1,y1); pDC->LineTo(x2,y2); pDC->SelectObject(pOldPen); penSolidRed.DeleteObject(); }
用笔( 对象) 用笔(CPen对象)绘制宽度为 点红色的实线 对象 绘制宽度为5点红色的实线
void CImageView::OnDraw(CDC* pDC) { … CPen penBlue(PS_SOLID,5,RGB(255,0,0)),*pOldPen; pOldPen=pDC->SelectObject(&penBlue); pDC->MoveTo(20,10); pDC->LineTo(200,100); pDC->SelectObject(pOldPen); penBlue.DeleteObject(); }
7
CDC::SelectObject()
Selects an object into the device context. The newly selected object replaces the previous object of the same type Return Value A pointer to the object being replaced.
演示程序:图形操作/画图形 演示程序:图形操作 画图形 Program 第三章图象编程 第三章图象编程.cpp-OnDrawGraph () -
14
写文字
pDC->TextOut(100,200,strText,lstrlen(strText);
virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount ); Parameters x
Specifies the logical x-coordinate of the starting point of the text.
y
Specifies the logical y-coordinate of the starting point of the text.
lpszString
Points to the character string to be drawn.
2
MFC程序绘图的方法 程序绘图的方法
应用程序中, 在MFC应用程序中,一般情况下,很多绘图操作都是在视类 应用程序中 一般情况下, 成员函数中进行的. 成员函数中进行的 的OnDraw()成员函数中进行的 OnDraw()函数参数中自动有一个 函数参数中自动有一个CDC的指针 的指针pDC,利用 函数参数中自动有一个 的指针 ,利用pDC 调用CDC类的成员函数完成绘图操作. 类的成员函数完成绘图操作. 调用 类的成员函数完成绘图操作 另外,当用户需要立即绘制图像时, 另外,当用户需要立即绘制图像时,可以通过调用更新窗口 函数Invalidate()使Windows送出 送出WM_PAINT消息自动调用 函数 使 送出 消息自动调用 OnDraw()函数来重绘图形 函数来重绘图形
17
位块转换函数中的光栅操作标志 dwRop
标识符 BLACKNESS DSTINVERT MERGECOPY MERGEPAINT NOTSRCCOPY NOTSRCERASE PATCOPY PATINVERT PATPAINT SRCAND SRCCOPY SRCERASE SRCINVERT SRCPAINT WHITENESS 含义 输出为全黑 对目标位图取反 源位图与点阵位图作" 源位图与点阵位图作"与"运算 源位图之反与目标位图作" 源位图之反与目标位图作"或"运算 源位图之反复制到目标位图 源位图与目标位图作"或"运算后再取反 源位图与目标位图作" 把点阵位图复制到目标位图 点阵位图与目标位图作"异或" 点阵位图与目标位图作"异或"运算 源位图之反与位图作" 运算,其结果再与目标位图作" 源位图之反与位图作"或"运算,其结果再与目标位图作"或"运算 源位图与目标位图作" 源位图与目标位图作"与"运算 把源位图复制到目标位图 目标位图之反与源位图作" 目标位图之反与源位图作"与"运算 源位图与目标位图作"异或" 源位图与目标位图作"异或"运算 源位图与目标位图作" 源位图与目标位图作"或"运算 输出为全白
13
画填色图形
pDC->Rectangle(100,100,150,150); pDC->RoundRect(100,100,150,150,15,15); pDC->Ellipse(100,100,150,150); pDC->Chord(100,100,225,300,175,250,225,300); pDC->Pie(100,100,300,200,250,150,300,150);
成员函数 MoveTo() LineTo() Arc() 描述 移动当前位置 从当前位置向指定终点绘制直线(不包括终点 从当前位置向指定终点绘制直线 不包括终点) 不包括终点 绘制一个椭圆弧
9
GetCurrentPosition() 获得当前画笔位置的逻辑坐标
函数中绘制线条 在OnDraw函数中绘制线条 函数中绘制
nCount
Specifies the number of bytes in the string.
15
演示程序:图形操作 写文字 演示程序:图形操作/写文字
ImageView.cpp void DrawTextOnCanvus(CDC *pDC) { int x,y,nBkMode; char szText[]={"Visual C++.NET 图像处理演示程序 图像处理演示程序"}; nBkMode=pDC->SetBkMode(TRANSPARENT); x=90; y=370; pDC->TextOut(x,y,szText,lstrlen(szText)); pDC->SetBkMode(nBkMode); }
VC++绘图编程 绘图编程
1
3.1设备环境类 设备环境类(CDC ) 设备环境类
设备环境(Device Context,DC),又称设备描述表或设备上下 设备环境 , , 是一种Windows的数据结构. 文,是一种 的数据结构. 在这个结构中保存了一些在绘图操作中使用的重要属性的 参数,还包含了与图形输出设备的绘制属性有关的信息. 参数,还包含了与图形输出设备的绘制属性有关的信息. 图形编程中, 在Windows图形编程中,所有的绘图操作都是通过设备环 图形编程中 境进行的. 境进行的. 设备环境可以用来向屏幕,打印机, 设备环境可以用来向屏幕,打印机,图形文件或内存位图 输出结果. 输出结果. CDC(Class of Device-Context )类. 类 CDC类提供了大量的绘图函数,坐标映射函数,裁剪函数, 类提供了大量的绘图函数, 类提供了大量的绘图函数 坐标映射函数,裁剪函数, 可以通过这个类来方便地实现图形显示. 可以通过这个类来方便地实现图形显示. 还有一些特殊的设备环境类都是从CDC类派生出来的. 类派生出来的. 还有一些特殊的设备环境类都是从 类派生出来的
16
位块转换函数
位块指的是位图中的一个矩形区域 位块的传输与转换是图形, 位块的传输与转换是图形,图像处理中的常规操作
BOOL BitBlt( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); x,y 目标位图的左上角坐标. 目标位图的左上角坐标. nWidth , nHeight 目标位图的宽度与高度. 目标位图的宽度与高度. pSrcDC 指针. 源CDC指针. 指针 xSrc,ySrc , 源位图的左上角坐标 dwRop 光栅操作标志 Bitblt()