C# GDI+ 简单绘图

C# GDI+ 简单绘图


最近对GDI+这个东西接触的比较多,也做了些简单的实例,比如绘图板,仿QQ截图等.

  废话不多说了,我们先来认识一下这个GDI+,看看它到底长什么样.

  GDI+:Graphics Device Interface Plus也就是图形设备接口,提供了各种丰富的图形图像处理功能;在C#.NET中,使用GDI+处理二维(2D)的图形和图像,使用DirectX处理三维(3D)的图形图像,图形图像处理用到的主要命名空间是System . Drawing:提供了对GDI+基本图形功能的访问,主要有Graphics类、Bitmap类、从Brush类继承的类、Font类、Icon类、Image类、Pen类、Color类等.

  大概了解了什么是GDI+后,我们来看一下绘图要用到的主要工具,要画图,肯定要画板吧,在C#中画板可以通过Graphics这个类来创建,有了画板,总得弄个笔什么之类的吧,不然怎么画呀,难不成我们用手指画.笔又可以分好多种类,比如铅笔,画刷等.它们的区别主要是铅笔可以用来画线条,而画刷呢,嘿嘿,自己考虑下.在c#中我们可以用Pen,Brush类来实现类似功能.颜料则自然是用Color类了.

  有了工具,我们就可以开始动手了!(所需命名空间:using System.Drawing;)

  实现效果:在空白窗体中画基本图形

  准备一个画板:

  创建一个画板主要有3种方式:

  A: 在窗体或控件的Paint事件中直接引用Graphics对象

  B: 利用窗体或某个控件的CreateGraphics方法

  C: 从继承自图像的任何对象创建Graphics对象

  这次我们就先以A为例:

private void Form1_Paint(object sender, PaintEventArgs e)
    {
      Graphics g = e.Graphics; //创建画板,这里的画板是由Form提供的.
    }

  然后,我们要只笔:

private void Form1_Paint(object sender, PaintEventArgs e)
    {
      Graphics g = e.Graphics; //创建画板,这里的画板是由Form提供的.
      Pen p = new Pen(Color.Blue, 2);//定义了一个蓝色,宽度为的画
    }

  接下来我们就可以来画画了.

private void Form1_Paint(object sender, PaintEventArgs e)
    {
      Graphics g = e.Graphics; //创建画板,这里的画板是由Form提供的.
      Pen p = new Pen(Color.Blue, 2);//定义了一个蓝色,宽度为的画笔
      g.DrawLine(p, 10, 10, 100, 100);//在画板上画直线,起始坐标为(10,10),终点坐标为(100,100)
      g.DrawRectangle(p, 10, 10, 100, 100);//在画板上画矩形,起始坐标为(10,10),宽为,高为
      g.DrawEllipse(p, 10, 10, 100, 100);//在画板上画椭圆,起始坐标为(10,10),外接矩形的宽为,高为
    }

  效果图如下:

  c# GDI+简单绘图(一)

  在上一片里已经向大家介绍了如何使用GDI+绘制简单的图像,这一片继续向大家介绍其它一些绘图知识.

  1.首先我们来看下上一片中我们使用过的Pen.

  Pen的属性主要有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等.我们可以用Pen 来画虚线,带箭头的直线等

Pen p = new Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色
Graphics g = this.CreateGraphics();
//画虚线
p.DashStyle = DashStyle.Dot;//定义虚线的样式为点
g.DrawLine(p, 10, 10, 200, 10);
//自定义虚线
p.DashPattern = new float[] { 2, 1 };//设置短划线和空白部分的数组
g.DrawLine(p, 10, 20, 200, 20);
//画箭头,只对不封闭曲线有用
p.DashStyle = DashStyle.Solid;//实线
p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头
g.DrawLine(p, 10, 30, 200, 30);
g.Dispose();
p.Dispose();

  以上代码运行结果:

c# GDI+简单绘图(二)

  2.接下来我们来看下Brush的使用

  作用:我们可以用画刷填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等,主要有几种不同类型的画刷:

  ?     SolidBrush:画刷最简单的形式,用纯色进行绘制

  ?     HatchBrush:类似于 SolidBrush,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色

  ?     TextureBrush:使用纹理(如图像)进行绘制

  ?     LinearGradientBrush:使用沿渐变混合的两种颜色进行绘制

  ?     PathGradientBrush :基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制

  我们这里只是简单介绍使用其中的几种:

Graphics g = this.CreateGraphics();
Rectangle rect = new Rectangle(10, 10, 50, 50);//定义矩形,参数为起点横纵坐标以及其长和宽
//单色填充
SolidBrush b1 = new SolidBrush(Color.Blue);//定义单色画刷     
g.FillRectangle(b1, rect);//填充这个矩形
//字符串
g.DrawString("字符串", new Font("宋体", 10), b1, new PointF(90, 10));
//用图片填充
TextureBrush b2 = new TextureBrush(Image.FromFile(@"e:picture1.jpg"));
rect.Location = new Point(10, 70);//更改这个矩形的起点坐标
rect.Width = 200;//更改这个矩形的宽来
rect.Height = 200;//更改这个矩形的高
g.FillRectangle(b2, rect);
//用渐变色填充
rect.Location = new Point(10, 290);
LinearGradientBrush b3 = new LinearGradientBrush(rect, Color.Yellow , Color.Black , LinearGradientMode.Horizontal);
g.FillRectangle(b3, rect);

  运行效果图:

c# GDI+简单绘图(二)

 
 
 
 
 
 
 
 
 

c#已知一个圆的圆心的坐标和半径,怎样画一个圆

 
Point center =  new  Point(100, 100);
             int  r = 20;
             Rectangle rect =  new  Rectangle(center.X-r,center.Y-r,2*r,2*r);
             e.Graphics.DrawEllipse(Pens.Red, rect);
 
 
 

C#画圆

分类: ASP.NET 1281人阅读 评论(1) 收藏 举报

Form程序,直接用PictureBox就行了
画圆:无填充色

private void button1_Click(object sender, EventArgs e)
        {
            Graphics gra = this.pictureBox1.CreateGraphics();
            Pen pen = new Pen(Color.Pink);//画笔颜色
            gra.DrawEllipse(pen, 10, 10, 100, 100);//画椭圆的方法,x坐标、y坐标、宽、高,如果是100,则半径为50
          }

画圆:有填充色

private void button1_Click(object sender, EventArgs e)
        {
            Graphics gra = this.pictureBox1.CreateGraphics();
             Brush bush = new SolidBrush(Color.Green);//填充的颜色
            gra.FillEllipse(bush,10,10,100,100);//画填充椭圆的方法,x坐标、y坐标、宽、高,如果是100,则半径为50
        }

以下是web程序,需要保存。

int w = Convert.ToInt32(TextBox1.Text) * 2;
int h = Convert.ToInt32(TextBox1.Text) * 2;
Image1.Width = w;
Image1.Height = h;
Bitmap bmp = new Bitmap(w, h);
Graphics g = Graphics.FromImage(bmp);
g.FillEllipse(new SolidBrush(Color.Red),0,0,w,h);
bmp.Save(Server.MapPath("~/a.bmp"));
Image1.ImageUrl = "~/a.bmp";
g.Dispose();

 
 
 
 

C# 画点

分类: C#简单示例 524人阅读 评论(0) 收藏 举报

画点的方法:
方法一:
     用picGraphics.FillRectangle(new SolidBrush(fillColor), p.X, p.Y, 1, 1); 即用一个像素填充方法.
方法二:
    用gdi32.dll库中的SetPixel方法
     [DllImport("gdi32.dll")]
     private static extern int SetPixel(IntPtr hdc, int x1, int y1, int color);
获得指定点的颜色:
   用gdi32.dll库中的GetPixel方法
   [DllImport("gdi32.dll")]
   private static extern uint GetPixel(IntPtr hDC, int XPos, int YPos);
   下面给出一些图形操作的集合:
   

       #region 图形操作函数集合
        [DllImport("gdi32.dll")]
        private static extern uint GetPixel(IntPtr hDC, int XPos, int YPos);

        [DllImport("gdi32.dll")]
        private static extern int SetPixel(IntPtr hdc, int x1, int y1, int color);

               
        
        static public byte GetRValue(uint color)
        {
            return (byte)color;
        }
           
        static public byte GetGValue(uint color)
        {
            return ((byte)(((short)(color)) >> 8));
        }

        static public byte GetBValue(uint color)
        {
            return ((byte)((color) >> 16));
        }

        static public byte GetAValue(uint color)
        {
            return ((byte)((color) >> 24));
        }

        private  uint RGB(Color color)
        {
            // 返回由RGB构成的32位uint
            uint R = color.R;
            uint G = color.G;
            uint B = color.B;
            G <<= 8;
            B <<= 16;
            return ((uint)(R|G|B));
        }
       
        public Color GetColor(Point p)
        {
            // 得到指定点的颜色RGB
            
            uint colorref = GetPixel(this.picGraphics.GetHdc(), p.X, p.Y);  // picGraphics是我用picturePox类中的CreateGraphics方法创建的Graphics对象
            this.picGraphics.ReleaseHdc();
            byte Red = GetRValue(colorref);
            byte Green = GetGValue(colorref);
            byte Blue = GetBValue(colorref);
            return Color.FromArgb(Red, Green, Blue);
        }

        public void SetColor(Point p, Color fillColor)
        {
            SetPixel(this.picGraphics.GetHdc(), p.X, p.Y, (int)RGB(fillColor));
            this.picGraphics.ReleaseHdc();
        }
         #endregion

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值