Windows.Forms框架:GDI+绘图基础

一.GDI+绘图基础

1.编写图形程序时需要使用GDI(图形设备接口Graphics Device Interface),从程序设计的角度看,GDI包括两个部分:GDI对象和GDI函数。
2.GDI对象定义了GDI函数使用的工具和环境变量,GDI函数对象绘制各种图形。在C#中,进行图形程序编写时用到的都是GDI+版本,是GDI的进一步扩展,它使我们变成更加方便。

3.GDI+概述

GDI+是微软提供的新的图形设备接口,通过托管代码的类来展现。
4.GDI+主要提供了三类服务

  • 二维矢量图形
  • 图像处理
  • 文字显示

5.GDI+比GDI的优越性主要展现在2个方面:

  • 扩展了新功能
  • 变成更加简易灵活

6.Graphics类

Graphics类封装一个GDI+绘图页面,提供将对象绘制到显示设备的方法,与特定的设备上下文关联。所有的画图方法都被包括在Graphics类中,在绘制任何对象时,我们首先要创建一个Ggraphics实例,这个实例相当于创建了一块画布,有了画布才可以使用各种画图方法绘图。
绘图程序的设计一般分为两个步骤:

(一)创建Graphics对象;

(二)使用创建的Graphics对象的方法绘图、显示文本或处理图像。

1.使用Graphics

2.创建Graphics对象

<1>. 利用Paint事件中的PaintEventArgs在窗体或控件的Paint事件中接收对图像对象的引用。在为控件创建绘制代码时,通常用此方法。

           private void Form1_Paint(object sender, PaintEventArgs e)
           {
               Graphics g = e.Graphics;
           }

<2>. 调用控件或窗体的CreatGraphics方法
调用控件或窗体的CreateGraphics方法获取对象的引用,创建Graphics的实例。如果想在已存在的窗体或控件上画图,通常使用此方法创建实例。

    //1.创建Graphics对象实际上就是创建一块画布,
    //所以要确定这个画布所在的位置,以哪个对象为主创建画布
               Graphics g = this.CreateGraphics();

<3>. 调用Graphics类的FromImage()方法。在需要更改已存在的图像时,通常用此方法。

    Image img = Image.FromFile("g1.jpg");
    Graphics g1 = Graphics.FromImage(img);

(三)Graphics类的方法成员

1.创建了Graphics类的对象引用后,就可以利用该对象的成员绘制各种各样的图形,下表列出了Graphics类的常用方法成员。

2.方法名称 说明
DrawArc 画弧形
DrawBezier 画立体的贝尔赛曲线
DrawClosedCurve 画闭合曲线
DrawCurve 画曲线
DrawEllipse 画椭圆
DrawImage 画图像
DrawLine 画线
DrawPie 画饼状图
DrawPolygon 画多边形
DrawRectangle 画矩形
DrawString 绘制文本
FillEllipse 填充椭圆
FillPath 填充路径
FillPie 填充饼图
FillRectangle 填充矩形
FillRegion 填充区域

在.NET中,GDI+的所有绘图功能都包括在System.Drawing、System.Drawing.Imaging、System.Drawing.Drawing2D和System.Drawing.Text中

	using System;
	using System.Collections.Generic;
	using System.ComponentModel;
	using System.Data;
	using System.Drawing;
	using System.Linq;
	using System.Text;
	using System.Threading.Tasks;
	using System.Windows.Forms;
	
	namespace GDI绘图
	{
	   public partial class Form1 : Form
	   {
	       public Form1()
	       {
	           InitializeComponent();
	       }
	
	       private void button1_Click(object sender, EventArgs e)
	       {
	           //1.创建Graphics对象实际上就是创建一块画布,
	           //所以要确定这个画布所在的位置
	           Graphics g = this.CreateGraphics();
	           //2.开始绘制个图形
	           Pen pen = new Pen(Color.Red,20);
	           //四元数:包含位置,和宽高的矩形
	           //Rectangle rect = new Rectangle();
	           g.DrawRectangle(pen, 100, 100, 100, 100);
	       }
	
	       private void Form1_Paint(object sender, PaintEventArgs e)
	       {
	           Graphics g = e.Graphics;
	           Pen pen = new Pen(Color.Red, 20);
	           g.DrawRectangle(pen, 100, 100, 100, 100);
	           g.FillRectangle(Brushes.Black,100,210,100,100);
	       }
	   }
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Visual C++6.0使用GDI+的一般方法 1. 载解压GDI+开发包; 2. 正确设置include & lib 目录; 3. stdafx.h 添加: #ifndef ULONG_PTR #define ULONG_PTR unsigned long* #endif #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入GDI+开发包的Include目录中)替换Visual C++ 6.0下的 BaseTsd.h头文件。然后: #include <basetsd.h> #include 或者 将Visual C++ 2005下的BaseTsd.h头文件(该文件已放入GDI+开发包的Include目录中)放入GDI+开发包的 Include目录中,并在VC6.0 中IDE中添加的包含文件的路径,且将其置前。(方法:工具-> 选项-> 目录 ,添 加lib和include GDI+所在路径,并把他们置前。) 然后: #include <basetsd.h> #include 4. 程序中添加GDI+的包含文件gdiplus.h以及附加的类库gdiplus.lib。 通常gdiplus.h包含文件添加在应用程序的stdafx.h文件中,而gdiplus.lib可用两种进行添加: 第一种是直接在stdafx.h文件中添加下列语句: #pragma comment( lib, "gdiplus.lib" ) 另一种方法是: 在VC6.0 中添加库文件在:工具-> 选项-> 目录 ,添加lib和include GDI+所在路径,并把他们置前 在VC.net中添加库文件在:项目菜单->属性->链接器->输入 举个例子: (1)在应用程序项目的应用类中,添加一个成员变量,如下列代码: ULONG_PTR m_gdiplusToken; 其中,ULONG_PTR是一个DWORD数据类型,该成员变量用来保存GDI+被初始化后在应用程序中的GDI+标识,以便能在应用程序退出后,引用该标识来调用Gdiplus:: GdiplusShutdown来关闭GDI+。 (2)在应用类中添加ExitInstance的重载,并添加下列代码用来关闭GDI+: int CGDITestApp::ExitInstance() { Gdiplus::GdiplusShutdown(m_gdiplusToken); return CWinApp::ExitInstance(); } (3)在应用类的InitInstance函数中添加GDI+的初始化代码: 注意:下面这些GDI+的初始化代码必须放在m_pMainWnd->UpdateWindow();之前。 CWinApp::InitInstance(); Gdiplus::GdiplusStartupInput gdiplusStartupInput; Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiplusStartupInput;, NULL); (4)在需要绘图的窗口或视图类中添加GDI+绘制代码。 下面分别就单文档和基于对话框应用程序为例,说明使用GDI+的一般过程和方法。 1. 在单文档应用程序中使用GDI+ 在上面的过程中,我们就是以一个单文档应用程序Ex_GDIPlus作为示例的。下面列出第4步所涉及的代码: void CGDITestView::OnDraw(CDC* pDC) { CGDITestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here usingnamespace Gdiplus; Graphics graphics(pDC->m_hDC); Pen newPen(Color(255,0,0),3); HatchBrush newBrush(HatchStyleCross,Color(255,0,255,0),Color(255,0,0,255));//创建一个填充画刷,前景色为绿色,背景色为蓝色 graphics.DrawRectangle(&newPen;,50,50,100,60);// 在(50,50)处绘制一个长为100,高为60的矩形 graphics.FillRectangle(&newBrush;,50,50,100,60); // 在(50,50)处填充一个长为100,高为60的矩形区域 } 2.第2个例子 #include #include //加了没有。 #include using namespace Gdiplus;//加了没有。 INT main() { GdiplusStartupInput gdiplusStartupInput; ULONG_PTR gdiplusToken; GdiplusStartup(&gdiplusToken;, &gdiplusStartupInput;, NULL);//加了没有。 Image* image = new Image(L "FakePhoto.jpg "); printf( "The width of the image is %u.\n ", image-> GetWidth()); printf( "The height of the image is %u.\n ", image-> GetHeight()); delete image; GdiplusShutdown(gdiplusToken);//加了没有。 return 0; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值