zoukankan      html  css  js  c++  java
  • 打造属于自已的图形(一) 绘图基础

    作者: furenjun

    本文内容:

    . 认识 System.Drawing

    了解GDI

    三. 掌握常用的绘图方法

    3.1 绘制一些简单的图形

    3.2 绘制一个多色的矩形

    3.3 绘制一个渐变的矩形

    3.4 绘制一个多色渐变的矩形

    四. 应用本文学到的方法打造属于自已的第一批图形

    4.1 电子屏效果

    4.2 霓虹灯效果

    4.3 进度条显示效果

     

    前言
        用惯了别人做的图形控件,常常感慨别人做得好,心中徒生羡慕。
        何时自已也能做出变幻莫测的图形效果呢?
        想想.Net 对图形支持功能非常丰富,何不自已动手打造呢?!
        好了,闲话少说,开始我们打造自已的图形之旅吧.

     本文的结尾提供完整源码下载.

     

    一.认识 System.Drawing类


     

    说明:
    1.System.Drawing
       包含与基本绘图功能有关的大多数类、结构、枚举和委托;
    2.System.Drawing.Drawing2D
      为大多数高级2D和矢量绘图操作提供了支持,包括消除锯齿、几何转换和图形路径;
    3. System.Drawing.Imaging
       帮助处理图像(位图、GIF文件等)的各种类;
    4.System.Drawing.Printing
      把打印机或打印预览窗口作为输出设备时使用的类;
    5.System.Drawing.Design
      一些预定义的对话框、属性表和其他用户界面元素,与在设计期间扩展用户界面相关;
    6. System.Drawing.Text
       对字体和字体系列执行更高级操作的类;
    本文暂时只应用到 System.Drawing,System.Drawing.Drawing2D 两个命名空间的相关方法;

     二. 了解GDI

          GDI是Graphics Device Interface的缩写,含义是图形设备接口,它的主要任务是负责系统与绘图程序之间的信息交换,处理所有Windows程序的图形输出。
    在Windows操作系统下,绝大多数具备图形界面的应用程序都离不开GDI,我们利用GDI所提供的众多函数就可以方便的在屏幕、打印机及其它输出设备上输出图形,文本等操作。GDI的出现使程序员无需要关心硬件设备及设备驱动,就可以将应用程序的输出转化为硬件设备上的输出,实现了程序开发者与硬件设备的隔离,大大方便了开发工作。

    三. 掌握常用的绘图方法

          俗话说,”万丈高楼从地起”,基础是必不可少的。只有从基础开始,学会理解了绘图类的相关工具的用法,才能做到在绘图时,将它们信手掂来,随手绘制的境界;
          应用程序程序绘图就如同我们实际生活中绘图,需要相关绘图工具:如画布,画笔,画刷,剪刀等。当然还得好的构思与方法!

    3.1 首先我们来绘制一些简单的图形

               写字,画直线/长方体/圆
               //拿来一块画布,大小为400*400
                Image img = new Bitmap(400, 400);
                pictureBox1.Image = img;
                //创建一个Graphics实例,让它通过windows系统去与外部设备打交道;
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.Clear(Color.White); //将画面擦干净
                //设计一下画的透明度
                int transValue = 255;
                //拿来一把红色的画刷;
                SolidBrush myBrush = new SolidBrush(Color.FromArgb(transValue, Color.Red));
                //拿来一把红色的画笔
                Pen myPen = new Pen(Color.FromArgb(transValue, Color.Red), 1);
                g.DrawLine(myPen, -200, 0, 200, 0); //水平方向画一条线
                g.DrawLine(myPen, 0, -200, 0, 200); //垂直方向画一条线
                Font myFont = new Font("黑体", 15);  //设计一下我要写的字的字体及大小
                //将我要写的所有字的尺寸测量一下
                SizeF strSize = g.MeasureString("FURENJUN 绘图", new Font("黑体", 15), new PointF(), StringFormat.GenericDefault );
                int width = (int)(strSize.Width + 10.0f);
                //好了,写几个字看看吧
                g.DrawString(myDrawingStr, myFont, myBrush, new PointF(10, 5));
                //再画一个长方形
                Rectangle rect = new Rectangle(width, 0, 30, (int)strSize.Height);
                g.DrawRectangle(new Pen(Color.FromArgb(transValue, Color.Blue), 1), rect);
                g.FillRectangle(new SolidBrush(Color.FromArgb(transValue, Color.Blue)), rect);
                g.TranslateTransform(10, 0);//水平移动10pz
                g.TranslateTransform(0, 10);//垂直移动 10px
                g.RotateTransform(30); //旋转30度
                //再画一个圆
                g.DrawPie(Pens.Red, rect, 0, 360);
                g.FillPie(Brushes.Red, rect, 0, 360);
                //还要画啥,你往下添吧.
                //...

    3.2   绘制一个多色的矩形

     

    Code

    3.3 绘制一个渐变的矩形

     

    Code

    3.4  绘制一个多色渐变的矩形

     

    Code

    四. 应用本文学到的方法打造属于自已的第一批图形

    4.1 电子屏效果

     


    解决思路: 不就是让文字与图形在上面滚动吗,也就是平移一下当前文字的坐标而以;
    也就是通过:
    g.TranslateTransform(dx, 0);//水平平移坐标
    就可搞定;

    完整代码:

    Code

    4.2 霓虹灯效果

     

    解决思路: 不就是让我只显示文字,然后文字颜色动态变一变,不就得了;
    我先将这些字在画布上显示,然后根据文字,创建一个文字区域(相当于剪纸),再用不同颜色画刷在这上面刷啊刷,就得了;
    关键代码:

    Code

    完整代码:

    Code

    4.3 进度条显示效果


    解决思路: 不就让我只动态绘制 百分比和矩形吗.
    通过设置一个绘图路径,然后我动态的绘制,填充颜色就得了;
    关键代码:

    Code

    完整代码:

    Code

    本文源程序下载:

    打造属于自已的图形(一) 源码

     打造透明的可移动的图形窗体 源码

  • 相关阅读:
    Spring--AOP--面向切面编程
    Spring ---annotation (重点)--Resource, Component 重要!!!
    Spring ---annotation (重点)--AutoWired 不常用
    ts 交集类型
    ts 使用 keyof typeof
    Dart 编写Api弃用警告
    js 反应&行动
    perl 打印简单的help文档
    perl 在windows上获取当前桌面壁纸
    perl 打印目录结构
  • 原文地址:https://www.cnblogs.com/furenjun/p/graphics.html
Copyright © 2011-2022 走看看