计算机图形学 V从图形编程
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
计算机图形学 VC图形编程 绘制点 绘制点 32位的COLORREF类型值来确定图形颜色值,其结构为0x00bbggrr, bb:代表蓝色值,范围从00到FF; gg:代表绿色值,范围从00到FF; rr:代表红色值,范围从00到FF; 还可以用RGB宏来完成相同的功能: RGB(short red ,short green, short blue) red 代表红色值,范围从0到255; green代表绿色值,范围从0到255; blue代表蓝色值,范围从0到255; 绘制点 void CPixelView::OnDraw(CDC* pDC) { ………… for(int i=0;i<200;i++) pDC->SetPixel(1*i,50,RGB(0,0,255)); for(int j=0;j<200;j++) pDC->SetPixel(2*j,100,(COLORREF)0x0000ff00); for(int m=0;m<200;m++) pDC->SetPixel(3*m,150,(COLORREF)0x000000ff); for(int n=0;n<200;n++) pDC->SetPixel(4*n,200,(COLORREF)0x0000ffff); for(int p=0;p<200;p++) pDC->SetPixel(5*p,250,(COLORREF)0x00ff00ff); for(int s=0;s<200;s++) pDC->SetPixel(6*s,300,(COLORREF)0x00000000); } 使用鼠标绘图 在VC中,鼠标的各种事件(单击鼠标左键,单击鼠标右键,双击鼠标左键,双击鼠标右键,移动鼠标)被作为消息,通过系统自带的消息映射功能,对操作者的不同操作进行响应处理。 使用鼠标绘图 绘制直线 void CCreateLineView::OnLButtonDown(UINT nFlags, CPoint point) { CDC* pDC=GetDC();//获取设备环境 pDC->SelectStockObject(NULL_BRUSH);//空画刷,选取库存的GDI模式 使用鼠标绘图 绘制直线 switch(m_step) { case 0://当第一次单击鼠标左键 m_Startp=m_Endp=point;//确定直线的起点 m_step++;//等待输入直线的终点 break; 使用鼠标绘图 绘制直线 case 1://当第二次单击鼠标左键 m_Endp=point;//确定直线的终点 m_step=-1;//使得再单击鼠标左键均无效 //m_bline=TRUE;//生成直线 DrawLine(pDC,m_Startp,m_Endp);//绘制直线 break; default://为空操作,表示不再绘制新直线; } 使用鼠标绘图 绘制直线 ReleaseDC(pDC);//释放不再使用的DC CView::OnLButtonDown(nFlags, point); } 使用鼠标绘图 绘制直线 void CCreateLineView::DrawLine(CDC *pDC, CPoint start, CPoint end) { pDC->MoveTo(start.x,start.y); pDC->LineTo(end.x,end.y); } 使用鼠标绘图 绘制直线 设置4个成员变量 使用鼠标绘图 绘制直线 设置橡皮筋模式 void CCreateLineView::OnMouseMove(UINT nFlags, CPoint point) { CDC* pDC=GetDC(); int nDrawmode=pDC->SetROP2(R2_NOT);//设置绘图模式:屏幕颜色反色。 pDC->SelectStockObject(NULL_BRUSH); 使用鼠标绘图 绘制直线 设置橡皮筋模式 if(m_step==1&&!m_bline) { CPoint prePnt,curPnt; prePnt=m_Endp;//获得光标所在的前一个位置 curPnt=point; 使用鼠标绘图 绘制直线 设置橡皮筋模式 DrawLine(pDC,m_Startp,prePnt);//绘制橡皮线 DrawLine(pDC,m_Startp,curPnt); m_Endp=point; } pDC->SetROP2(nDrawmode);//恢复先前的绘图模式 ReleaseDC(pDC);//释放DC 与绘图相关的GDI对象类 CBitmap类,CBrush类,CFont类,CPen类 CRgn类,CPalette类。 通常,我们都是使用GDI绘图对象类所创建的对象进行绘制各种图形的, 好象画家手里的画笔,而设备环境就是用什么样的画纸。 CPen 画笔是一种用来画线及绘制有形边框的工具,用户可以指定它的颜色及厚度,并且可以指定它画实线、点线或虚线。 CPen(int nPenStyle,int nWidth,COLORREF crcolor); CPen CPen(int nPenStyle,int nWidth,COLORREF crcolor); nPenStyle: PS_SOLID:实线画笔。 PS_DASH:虚线画笔。 PS_DOT:点线画笔。 PS_DASHDOT:点划线画笔。 CPen CPen(int nPenStyle,int nWidth,COLORREF crcolor); nWidth :指定画笔宽度。 CPen for (int i=0;i<7;i++) { CPen NewPen1(PS_SOLID+i,1,RGB(0,255,0)); CPen *pOldPen=pDC->SelectObject(&NewPen1); pDC->MoveTo(10,20*i+10); pDC->LineTo(700,20*i+10); pDC->SelectObject(pOldPen); } CBrush 画刷定义了一种位图形式的像素,利用它可以对域内部填充颜色。 CBrush(int nIndex,COLORREF crcolor); CBrush CBrush(int nIndex,COLORREF crcolor): nIndex:画刷的阴影线的风格 HS_BDIAGONAL:从左到右向下成45度的对角线。 HS_CROSS:水平线和垂直线相交的十字交叉线。 HS_DIAGCROSS:夹角为45度的斜十字交叉线。 HS_FDIAGONAL:从左到右向上成45度的对角线。 HS_HORIZONAL:水平阴影线。 HS_VERTICAL: 垂直阴影线。 CBrush CBrush NewBrush1(RGB(0,255,0)); CBrush *pOldBrush1=pDC->SelectObject(&NewBrush1); pDC->Rectangle(50,50,200,300); pDC->SelectObject(pOldBrush1); CBrush CBrush NewBrush2(HS_BDIAGONAL,RGB(255,0,0)); CBrush *pOldBrush2=pDC->SelectObject(&NewBrush2); pDC->Rectangle(250,50,400,300); pDC->SelectObject(pOldBrush2); CFont 字体是一种具有某种风格和尺寸的所有字符的完整集合,它常常被当作资源存于磁盘中,其中有一些还依赖于某种设备。 扫描转换矩形 void CFillView::Fillrectangle(CDC *pDC, COLORREF rccolor) { int x,y; for (y=50;y<300;y++) for (x=50;x<200;x++) { pDC->SetPixel(x,y,rccolor); } } 扫描转换矩形 void CFillView::OnLButtonDown(UINT nFlags, CPoint point) { if ((50 < point.x) & (point.x <200) & (50<point.y) & (point.y<300)) {CDC *pDC=GetDC(); Fillrectangle(pDC, RGB(255,255,0)); } CView::OnLButtonDown(nFlags, point); } 谢 谢 计算机图形学是信息技术领域的一个重要分支,主要涉及利用软件生成和操纵可视图像。在这个主题中,我们关注的是在Microsoft Visual C++(VC)环境中进行图形编程。VC图形编程利用Windows的图形设备接口(GDI)来创建和控制图形输出。 在VC中,图形的色彩值由32位的COLORREF类型定义,结构为0x00bbggrr,其中bb代表蓝色(00到FF),gg代表绿色(00到FF),rr代表红色(00到FF)。此外,可以使用RGB宏来设置颜色,例如RGB(0, 0, 255)表示蓝色,红色和绿色分量分别为0,而蓝色分量为255(0到255的范围)。在示例代码中,`SetPixel`函数被用来在画布上绘制不同颜色的点,形成特定的图形图案。 在VC中,使用鼠标进行绘图可以通过处理鼠标的不同事件来实现。例如,`OnLButtonDown`函数响应鼠标左键按下事件,可以记录起点和终点来绘制直线。在`OnMouseMove`事件中,可以实现橡皮筋效果,即在鼠标移动时临时绘制一条线,直到鼠标释放。`DrawLine`函数用于实际绘制直线,`SelectStockObject(NULL_BRUSH)`则用于选择空画刷,确保不会填充颜色。 GDI提供了各种绘图对象,如画笔(CPen)、画刷(CBrush)、字体(CFont)等,它们是进行图形绘制的基础。CPen用于画线和边框,可以指定颜色、宽度和样式(实线、虚线、点线等)。CBrush则用于填充颜色,支持多种阴影线风格。在示例中,`Rectangle`函数结合CBrush实例用于填充矩形,而`SetPixel`和`MoveTo`、`LineTo`则用于精确控制像素和绘制线条。 在Windows图形编程中,设备环境(Device Context,DC)扮演着核心角色,它包含了如何在特定设备上进行绘制的信息。CDC类是MFC提供的设备环境类,包含了各种绘图操作的成员函数,如`SetPixel`、`MoveTo`、`LineTo`等。通过CDC,我们可以调用GDI函数来绘制图形,并使用`GetDC`、`ReleaseDC`等函数获取和释放设备环境。 总结来说,计算机图形学在VC环境中的实践涉及到颜色定义、鼠标事件处理、图形对象的使用以及设备环境的管理。通过GDI函数和MFC类,开发者可以创建丰富的图形界面并实现交互式绘图功能。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
- bxe3186917952013-01-20还不错,蛮健全的
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 0
- 资源: 3
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)