目录

1 命名空间与继承

2 Color、Pen、Brush

2.1 Color

2.2 Pen

2.3 Brush

3 示例

3.1 画线

3.2 画矩形

3.3 画圆

3.4 画弧/扇形

3.5 画多边形

4 参考

1 命名空间与继承
        Graphics类是GDI+技术的一个基本类。GDI+(GDI+是GDI[Graphics Device Interface]的改进)是.NET框架的重要组成部分,提供对二维图形图像和文字排版处理的支持。

命名空间:System.Drawing

继承:Object→MarshalByRefObject→Graphics

2 Color、Pen、Brush
2.1 Color
        Color Struct表示一种ARGB颜色(alpha、红、绿、蓝)。Color结构通过表态属性公开了140个命名颜色。

常用属性及方法

(1)通过属性返回预先创建的Color对象

Color cl = Color.Red;

(2)创建Color实例的参数为 a,r,g,b;

Color cl = Color.FromArgb(100,200,200,200);  //第1个参数为透明度(alpha)参数,其后为红,绿和蓝.

(3)创建Color实例的参数为 r,g,b; //参数为红,绿,蓝三种原色,透明度为默认,即完全不透明.

Color cl = Color.FromArgb(200,200,200);

(4)从一个现在的Color对象创建一个新的Color实例,只修改透明度成份

Color cl = Color.FromArgb(100,Color.PowderBlue);

(5)用一个形式为AARRGGBB的组合整数创建一个Color实例

Color cl = Color.FromArgb(0x64C8C8FF);

(6)调用静态FromKnownColor方法来创建Color对象

Color cl = Color.FromKnownColor(KnownColor.PowderBlue);  //KnownColor枚举值作为参数.

(7)调用静态FromName方法

Color cl = Color.FromName("PowderBlue");  //字符串参数必须包含一个KnownColor枚举值的名称.

其他属性

(1)IsNamedColor Boolean值,如果颜色值在这140个命名颜色中时,值为true,否则为false.

(2)IsKnownColor Boolean值,如果颜色值是KnownColors枚举的颜色之一时,值为true.

(3)IsSystemColor Boolean值,如果颜色值是SystemColors类的属性值之一时,值为true.

颜色对照表

点击链接查看颜色对照表:链接

2.2 Pen
画笔,定义用于绘制直线和曲线的对象。

构造函数

(1)Pen pen1 = new Pen(Color);  //参数为颜色Color 宽度默认为1;

Pen pen2 = new Pen(Color, Single); //参数为颜色Color,单精度浮点数Sigle;

(2) Pen pen3 = Pen(Brush);  // 使用指定的 Pen 初始化 Brush 类的新实例。

Pen pen4 = Pen(Brush, Single);  // 使用指定的 Pen 和 Brush 初始化 Width 类的新实例。

属性

Alignment    
获取或设置此 Pen 的对齐方式。

Brush    
获取或设置 Brush,用于确定此 Pen 的特性。

Color    
获取或设置此 Pen 的颜色。

CompoundArray    
获取或设置用于指定复合钢笔的值数组。 复合钢笔绘制由平行直线和空白区域组成的复合直线。

CustomEndCap    
获取或设置要在通过此 Pen 绘制的直线终点使用的自定义线帽。

CustomStartCap    
获取或设置要在通过此 Pen 绘制的直线起点使用的自定义线帽。

DashCap    
获取或设置用在短划线终点的线帽样式,这些短划线构成通过此 Pen 绘制的虚线。

DashOffset    
获取或设置直线的起点到短划线图案起始处的距离。

DashPattern    
获取或设置自定义的短划线和空白区域的数组。

DashSt5.1yle    
获取或设置用于通过此 Pen 绘制的虚线的样式。

EndCap    
获取或设置要在通过此 Pen 绘制的直线终点使用的线帽样式。

LineJoin    
获取或设置通过此 Pen 绘制的两条连续直线的端点的联接样式。

MiterLimit    
获取或设置斜接角上联接宽度的限制。

PenType    
获取用此 Pen 绘制的直线的样式。

StartCap    
获取或设置在通过此 Pen 绘制的直线起点使用的线帽样式。

Transform    
获取或设置此 Pen 的几何转换的副本。

2.3 Brush
画刷:定义用于填充图形形状(如矩形、椭圆、饼形、多边形和封闭路径)的内部的对象。

参考代码:
private void Form1_Paint(object sender, PaintEventArgs e)
{
     // (实心刷)
         Rectangle  myrect1 = new Rectangle(20, 80, 250, 100);
         SolidBrush  mysbrush1 = new SolidBrush(Color.DarkOrchid);                  
         SolidBrush  mysbrush2 = new SolidBrush(Color.Aquamarine);      
         SolidBrush  mysbrush3 = new SolidBrush(Color.DarkOrange);
 
     //(梯度刷)
         LinearGradientBrush  mylbrush5 = new LinearGradientBrush(rect1,
         Color.DarkOrange, Color.Aquamarine,
         LinearGradientMode.BackwardDiagonal);
 
         //(阴影刷)
         HatchBrush  myhbrush5 = new HatchBrush(HatchStyle.DiagonalCross,
         Color.DarkOrange, Color.Aquamarine);
         HatchBrush  myhbrush2 = new HatchBrush(HatchStyle.DarkVertical,
         Color.DarkOrange, Color.Aquamarine);
         HatchBrush  myhbrush3 = new HatchBrush(HatchStyle.LargeConfetti,
         Color.DarkOrange, Color.Aquamarine);
 
         //(纹理刷)
         TextureBrush textureBrush = new TextureBrush(new Bitmap(@"e:/123.jpg"));
         e.Graphics.FillRectangle(mysbrush1, rect1);         // (实心刷)
     e.Graphics.FillRectangle(mylbrush1, rect1);            //(梯度刷)
 
       e.Graphics.FillRectangle(myhbrush1, rect1);             //(阴影刷)      
        e.Graphics.FillRectangle(mytextureBrush, rect1);       //(纹理刷)
}

结果如下:

几种画刷对比

3 示例

3.1 画线

画实线和虚线的代码如下:

private void button1_Click(object sender, EventArgs e)
{
    //画实线
    Pen pen = new Pen(Color.Red, 3); 
    //确定线的首位位置
    Point point1 = new Point(10, 50);
    Point point2 = new Point(250, 50);
    Graphics g = this.CreateGraphics();
    g.DrawLine(pen, point1, point2);
}
 
private void button2_Click(object sender, EventArgs e)
{
    //画虚线
    Pen pen = new Pen(Color.Red, 3);
    //自定义虚线样式
    pen.DashStyle = DashStyle.Custom;
    pen.DashPattern = new float[] { 2, 2 };
 
    //确定线的首位位置
    Point point1 = new Point(10, 80);
    Point point2 = new Point(250, 80);
    Graphics g = this.CreateGraphics();
    g.DrawLine(pen, point1, point2);
}

效果如下:

画线

3.2 画矩形

填充矩形:g.FillRectangle(brush, rect);

不填充矩形:g.DrawRectangle(pen, rect);

代码如下:

private void button1_Click(object sender, EventArgs e)
{
    //画矩形
    Pen pen = new Pen(Color.YellowGreen);
    SolidBrush brush = new SolidBrush(Color.YellowGreen);
 
    Graphics g = this.CreateGraphics();
    //定义一个矩形
    Rectangle rect = new Rectangle(20, 20, 220, 200);
    g.FillRectangle(brush, rect);
    //g.DrawRectangle(pen, rect);

}

画矩形

3.3 画圆

①填充圆:g.FillEllipse(brush, rect);

②不填充圆:g.DrawEllipse(pen, rect);

代码如下:

private void button1_Click(object sender, EventArgs e)
{
    //画圆
    Pen pen = new Pen(Color.Red);
    SolidBrush brush = new SolidBrush(Color.YellowGreen);
 
    Graphics g = this.CreateGraphics();
    Rectangle rect = new Rectangle(20, 20, 200, 200);
    g.FillEllipse(brush, rect);
    g.DrawEllipse(pen, rect);
}

效果如下:

画圆

3.4 画弧/扇形 
①画弧:g.DrawArc(pen, rect, -90,90);   //四个参数分别为:Pen,矩形区域rect,起始角度(0为水平向右,顺时针为正),扫过角度。

②画填充扇形:g.FillPie(brush, rect, -45, 90);  //四个参数分别为:Brush,矩形区域rect,起始角度(0为水平向右,顺时针为正),扫过角度。

③画不填充扇形g.DrawPie(pen,rect,-45,90);  //四个参数分别为:Pen,矩形区域rect,起始角度(0为水平向右,顺时针为正),扫过角度。

代码如下:
private void button2_Click(object sender, EventArgs e)
{
    //画虚线
    Pen pen = new Pen(Color.Red, 3);
    SolidBrush brush = new SolidBrush(Color.YellowGreen);
    Rectangle rect = new Rectangle(20, 20, 200, 200);
    Graphics g = this.CreateGraphics();
    //画弧线
    //g.DrawArc(pen, rect, -90,90);
    //画扇形
    g.DrawPie(pen, rect, -45, 90);
    g.FillPie(brush, rect, -45, 90);
}

画扇形

3.5 画多边形

① 画填充多边形:g.DrawPolygon(pen, pis);  //参数分别是:pen,Point数组;

② 画不填充多边形:g.FillPolygon(brush, pis); //参数分别是:brush,Point数组;

代码入下:

private void button2_Click(object sender, EventArgs e)
{
    //画多边形
    Pen pen = new Pen(Color.Red, 3);
    SolidBrush brush = new SolidBrush(Color.YellowGreen);
    Rectangle rect = new Rectangle(20, 20, 200, 200);
    Graphics g = this.CreateGraphics();
    //point数组
    Point[] pis = new Point[] { new Point(10, 10), new Point(100, 20), new Point(130, 50), new Point(100, 200), new Point(70, 200), new Point(10, 20) };
    g.DrawPolygon(pen, pis);
    g.FillPolygon(brush, pis);
}

画多边形

4 参考

Color 参考:C#Color对象的使用介绍及颜色对照表

Brush参考:c# Brush的使用方法

C# Graphics 绘图(及Color、Pen、Brush)相关推荐

  1. java画图Graphics绘图(GUI)图形用户界面绘画卡通人物

    java画图Graphics绘图(GUI)图形用户界面绘画卡通人物 package pack4; import java.awt.*; import javax.swing.*;public clas ...

  2. 用仿ActionScript的语法来编写html5——第五篇,Graphics绘图

    用仿ActionScript的语法来编写html5--第五篇,Graphics绘图 用仿ActionScript的语法来编写html5--第一篇,显示一张图片 http://blog.csdn.net ...

  3. iOS Core Graphics绘图

    Core Graphics Framework是一套基于C的API框架,使用了Quartz作为绘图引擎.它提供了低级别.轻量级.高保真度的2D渲染. 上下文 Core Graphics API所有的操 ...

  4. iOS开发--Core Graphics绘图

    一. Core Graphics简介 Core Graphics是一个基于C的绘图专用的API族,它经常被称为QuartZ或QuartZ 2D,是一个二维绘图引擎,同时支持iOS和Mac系统.它提供了 ...

  5. Graphics 绘图

    Graphics类提供基本绘图方法,Graphics2D类提供更强大的绘图能力. Graphics类提供基本的几何图形绘制方法,主要有:画线段.画矩形.画圆.画带颜色的图形.画椭圆.画圆弧.画多边形等 ...

  6. centos 下 r graphics绘图如何保存_如何选购一台合适的商务笔记本电脑

    在选择商务办公笔记本时,如果工作是图形密集型的,就需要一台带独立图形的笔记本电脑.选择处理器必须在应用功率和能效之间找到适当的平衡,在选择电池时,必须在容量和重量之间进行选择. 为工作选择最好的笔记本 ...

  7. java分形树_跪求javaSE高手 graphics绘图问题 本来是递归算法实现的分形树 现要求通过改变递归深度来实现树的生长...

    由于代码太长贴不了,现已能画出分形树,请热心人加我qq462570760主要参数如下:mcom=0.8;lcom=0.5;rcom=065;marg=5;larg=40;rarg=40;lbegin= ...

  8. Windform C# Graphics绘图,消除锯齿

    Graphics g = CreateGraphics(); g.SmoothingMode = SmoothingMode.AntiAlias; //使绘图质量最高,即消除锯齿 g.Interpol ...

  9. Java用JFrame、JPanel、Graphics绘图案例讲解

    前言: 本文将介绍Java绘图工具的使用,通过具体示例,演示通过Java的Graphics类在JFrame中的JPanel上绘制图形的步骤和方法. 一.绘图的相关Java类介绍: JFrame类,是J ...

最新文章

  1. 加密算法有哪些?对称加密和非对称加密的区别?
  2. 揭秘5G+AI时代的机器人世界!七大核心技术改变人类生活
  3. 超级玛丽地图java_我的世界超级玛丽地图包
  4. [云炬创业基础笔记]第一章创业环境测试1
  5. 基于sklearn.decomposition.TruncatedSVD的潜在语义分析实践
  6. Canny边缘检测及C++实现(转载)
  7. 第二十八章:化学学校
  8. 无源波分和彩光模块_5G前传WDM解决方案,无源波分和彩光模块
  9. 甘肃银行借助HDIM打造综合数据保护平台
  10. 单片机c语言程序设计实训100例基于pic pdf,单片机C语言程序设计实训100例 基于AVR+Proteus仿真.pdf...
  11. Android Trace View使用
  12. 一文了解新营销,数字经济时代如何以个人为中心重建品牌?
  13. 408代码题暴力破解——混分归纳总结
  14. android应用加固后闪退,梆梆加固,启动就闪退了
  15. 百分百解决 mbatis/mp报错 Invalid bound statement (not found)
  16. JAVA中extends与implements详解
  17. 小米 红米5A 解BL锁教程 申请BootLoader解锁教程
  18. 华为手机鸿蒙系统手机_华为鸿蒙系统迎巨大利好,世界首富正式认错,放弃第三大手机系统...
  19. Chatgpt的三个镜像网站(无需”魔法“直接用)
  20. 如何成功抵御DOS攻击?给你介绍四种方法

热门文章

  1. 嵌入式ARM64 uboot 2022.01 移植
  2. 远程ip可以ping通,但无法连接
  3. JAVA —— 比较日期时间大小
  4. 传世一直显示服务器未开放,传奇世界3D手游连接服务器失败解决办法 怎么进不去...
  5. 蓝天算法的作用及由来
  6. 图书管理员计算机知识,图书管理员应具备的素质
  7. STT-MRAM的应用前景
  8. Java基础巩固系列 包装类
  9. 【《程序员的自我修养---链接装载于库》读书笔记】可执行文件的装载与进程
  10. 直线模组和直线电机的区别