zoukankan      html  css  js  c++  java
  • C# GDI+图形程序设计看书笔记


    一、理解GDI+
    GDI+是一个库,它提供了一个接口,此接口允许程序员编写与打印机、监视器或文件等图形设备进行交互的windows和web图形应用程序。其实是由C++编写的一个类,供我们调用。在程序中使用GDI+需要添加相应的命名空间,主要由
    System.Drawing:基本的GDI+功能的定义,它提供了Graphics类,这个类提供了最重要的绘图与填充方法。还封装了矩形,点,画笔和钢笔等GDI图元类。
    System.Drawing.Drawing2D名称空间。高级二维和矢量图形应用程序的功能。
    System.Drawing.Imaging:基本图像处理功能.
    二、GDI+基本应用
    首先要绘图,要有绘图的画布,画布可以是窗体表面,打印机表面,位图表面,还要有画笔,可以是钢笔,笔刷等。还要有一个画图的过程即方法调用。另外还需要知道坐标系统,在窗体表面,坐标是以左上角为(0,0)。
    现在开始进行基本画图操作
    1、获取一个Graphics对象
    可以通过窗体的paint事件获取

    private void form1_Paint(object sender,PaintEventArgs e)
    {
    Graphics g=e.Graphics;
    } 重载OnPaint
    protected override void OnPaint(PaintEventArgs e)
    {
    Graphics g=e.Graphics;
    }以上两种方法都是在窗体加载时就得到的,但我们常常需要在别的时候得到并绘图,所以要使用其它方法。
    Graphics g=this.CreateGraphics();//通过窗体本身方法
    Bitmp bmp=new (600,400);
    Graphics g=Graphics.FromImage(bmp)//通过图形得到一个
    Graphics g=Graphics.FromHwnd(this.Handle)//通过窗体句柄得到一个。通过图形得到一个,那么我们可以在图形上绘制图形,我觉得这是我们比较常用的方法。
    有了Graphics对象,我们可以通过这个类的方法进行绘制各种基本图形。但还需要钢笔或画笔才能绘制。

    2、创建钢笔或画笔
    Pen redPen=new Pen(Color.Red,3)//创建一个红色,宽为3象素的钢笔
    Pen blackPen=Pens.Black //创建一个黑色钢笔

    SolidBrush greenBrush=new SolidBrush(Color.Green)//创建一个绿色的画笔有了画笔或钢笔我们就可以画画了

    3、绘制图形
    Bitmap bmp = new Bitmap(this.Width, this.Height);
    Graphics g = Graphics.FromImage(bmp);
    g.Clear(Color.White);//设画布背景为白色
    g.SmoothingMode = SmoothingMode.AntiAlias;//质量为消除齿
    Rectangle rect = new Rectangle(20, 20, 100, 100);//创建一个矩形
    Pen redPen = new Pen(Color.Red, 3);
    Pen blackPen = Pens.Black;
    SolidBrush greenBrush = new SolidBrush(Color.Green);
    g.DrawRectangle(redPen, rect);//通过钢笔画矩形
    g.FillEllipse(greenBrush, rect);//用画笔填充矩形
    g.DrawLine(blackPen, 0, 250, this.Width, 250);//画线
    g.FillEllipse(Brushes.Blue, 70, 220, 30, 30);//填充圆
    g.FillEllipse(Brushes.SkyBlue, 100, 210, 40, 40);
    g.FillEllipse(Brushes.Green, 140, 200, 50, 50);
    e.Graphics.DrawImage(bmp, 0.0F, 0.0F);//把图形画到窗体上
    greenBrush.Dispose();//清除资源
    redPen.Dispose();
    g.Dispose();
    这是最基本的GDI+画图方法,其实也就是得到一个画布,画笔(Pen,SolidBrush),画图方法(Graphics.方法).这是画图三要素。

    下面加个实例,是我转过来的,本来想写出一个图表控件,但有点小问题,我现在把这个例子粘出来,希望有人能做出这个控件
    Bitmap bm = new Bitmap(240, 210);
    //在新建的画布上画一个图
    Graphics bp = Graphics.FromImage(bm);
    //设置bp的背景色为Beige
    bp.Clear(Color.Beige);
    //创建数据源,在此为一个数组
    int[] a1 ={ 20, 40, 60, 80, 100, 120, 140, 160 };
    int[] a2 ={ 40, 60, 80, 100, 120, 140, 160, 180 };
    bp.DrawRectangle(Pens.Black, 1, 1, 230, 205);
    //通过循环画出柱状图
    for (int i = 0; i < a1.Length; i++)
    {
    //填充图(着色,起点X,起点Y,宽,高)
    bp.FillRectangle(new SolidBrush(Color.Blue), (i * 30) + 5, 200 - a1[i], 5, a1[i] + 5);
    //填充边框(着色,起点X,起点Y,宽,高)
    bp.DrawRectangle(Pens.Black, (i * 30) + 5, 200 - a1[i], 5, a1[i] + 5);
    }
    //柱图2
    for (int i = 0; i < a2.Length; i++)
    {
    bp.FillRectangle(new SolidBrush(Color.Red), (i * 30) + 10, 200 - a2[i], 5, a2[i] + 5);
    bp.DrawRectangle(Pens.Black, (i * 30) + 10, 200 - a2[i], 5, a2[i] + 5);
    }


    Graphics gg = this.CreateGraphics();
    gg.DrawImage(bm, 0.0f, 0.0f);
    gg.Dispose();
    bp.Dispose();
  • 相关阅读:
    *Triangle
    Pascal's Triangle II
    Pascal's Triangle
    Merge Sorted Array
    House Robber
    Find Peak Element
    Container With Most Water
    *Next Permutation
    top命令VIRT,RES,SHR,DATA
    Octave简单使用
  • 原文地址:https://www.cnblogs.com/todd/p/1241310.html
Copyright © 2011-2022 走看看