当前位置导航:炫浪网>>网络学院>>编程开发>>Visual C#教程

C# GDI+绘图高级编程

      一般来说,Windows的一个优点(实际上是现代操作系统的优点)是它可以让开发人员不考虑特定设备的细节。例如:不需要理解硬盘设备驱动程序,只需在相关的.NET类中调用合适的方法,就可以编程读写磁盘上的文件。这个规则也适用于绘图。计算机在屏幕上绘图时,把指令发送给视频卡。问题是市面上有几百种不同的视频卡,大多数有不同的指令集合功能。如果把这个i考虑在内,在应用程序中为每个视频卡驱动程序编写在屏幕上绘图的特定代码,这样的应用程序就根本不可能编写出来。这就是为什么在Windows最早的版本中有Windows Graphical Device Interface(GDI)的原因。

       GDI+提供了一个抽象层,隐藏了不同视频卡之间的区别,这样就可以调用Windows API函数完成指定的任务了,GDI还在内部指出在运行特定的代码时,如果让客户机的视频卡完成要绘制的图形。GDI还可以完成其他任务。大多数计算机都有多个显示设备---监视器、打印机。GDI成功的使应用程序所使用的打印机看起来与屏幕一样。如果要打印某些东西,而不是显示他们,只需告诉系统输出设备是打印机,再用相同的方式调用相同的Windows API函数可以。

      可以看出DC(设备环境)是一个功能非常强大的对象,在GDI下,所有的绘图工作都必须通过设备环境完成。DC甚至可用于不涉及在屏幕或其他硬件设备上绘图的其他操作,例如在内存中修改图像。

      GDI开发人员提供了一个相当高级的API,但它仍是一个基于旧Windows API并且有C语言风格函数的API,所以使用起来不是很方便。GDI+在很大程度上是GDI和应用程序之间的一层,提供了更直观、基于继承性的对象模型。尽管GDI+基本上是GDI的一个包装器,但Microsoft已经能通过GDI+提供新的功能了并宣称他又一些性能方面的改进。

1.GDI+命名空间
    (不说了,自己看去吧!!!)
2.设备环境和Graphics对象
       GDI使用设备环境(DC)对像识别输出设备。DC对象存储特定设备的信息并把GDI API函数调用转换为要发送给设备的命令。还可以通过DC对象确定对应的设备有什么功能(如打印机是彩色还是黑白的)。如果要求设备完成它不能完成的任务,设备对象就会检测到并采取措施。
       DC对象不仅可以硬件还可以用作到Windows的一个桥梁。例如如果Windows知道只有一小部分应用程序窗口需要重新绘制,DC就可以捕获和撤销在该地区外的绘图工作。因为DC与Windows的关系非常密切,通过Dc来工作就可以用其他方式简化代码。

       绘制图形
       下面举例来说明如何在应用程序的主窗口中绘图。DisplayAtStartup
       创建一个C# 应用程序并在启动窗体时在构造函数中绘制它。这并不是在屏幕上绘图的最佳方式,这个示例并不能在启动后按照需要重新绘制窗体。这样只是不必作太多的工作就可以说明一些问题。
        首先把窗体的背景色设置为白色。如果使用设计视图设置背景色,系统会自动添加代码:
       
        private void InitializeComponent()
        {
               this.AutoScaleBaseSize = new System.Drawing.Size(5,13);
               this.BackColor = System.Drawing.Color.White;
               this.ClientSize = new System.Drawing.Size(292,266);
               this.Name = "Form1";
               this.Text = "Form1";
        }

       接着给Form1构造函数添加代码。使用窗体的CreateGraphics()方法创建一个Graphics对象,其中包括绘图时需要的使用的Windows DC。创建的DC即与显示设备相关也与窗口相关。

       public Form1()
       {
              InitializeComponent();
             
              Graphics dc = this.CreateGraphics();
              this.Show();
              Pen bluePen = new Pen(Color.Blue,3);
              dc.DrawRectangle(bluePen,0,0,50,50);    //矩形
              Pen redPen = new Pen(Color.Red,2);
              dc.DrawEllipse(redPen,0,50,80,60);        // 椭圆
       }
      

       然后调用Show()方法显示窗口。必须让窗口立即显示,因为在其显示之前不能作任何工作。(没有绘图的地方)
       最后显示一个矩形和椭圆。注意其中坐标(x,y)表示从窗口的客户区域左上角向右的X个像素,

共2页 首页 上一页 1 2 下一页 尾页 跳转到
相关内容
赞助商链接