C# GDI+ 简单学习

一、创建Graphics对象

要绘制图像,首先要创建Graphics对象,然后才可以使用GDI+绘制线条和形状,呈现文本或显示与操作图像。Graphics对象是GDI+的绘图表面,是用于创建图形图像的对象。创建Graphics对象有下面三个方法(摘自MSDN):

1、在窗体或控件的 Paint 事件中接收对图形对象的引用,作为 PaintEventArgs 的一部分。在为控件创建绘制代码时,通常会使用此方法来获取对图形对象的引用。

private void Form1_Paint(object sender, System.Windows.Forms.PaintEventArgs pe)

{

   // Declares the Graphics object and sets it to the Graphics object

   // supplied in the PaintEventArgs.

   Graphics g = pe.Graphics;

   // Insert code to paint the form here.

}

 

2、调用某控件或窗体的 CreateGraphics 方法以获取对 Graphics 对象的引用,该对象表示该控件或窗体的绘图图面。如果想在已存在的窗体或控件上绘图,请使用此方法。

Graphics g;

// Sets g to a graphics object representing the drawing surface of the

// control or form g is a member of.

g = this.CreateGraphics();

 

3、由从 Image 继承的任何对象创建 Graphics 对象。此方法在您需要更改已存在的图像时十分有用。

Bitmap myBitmap = new Bitmap(@"C:\Documents and

   Settings\Joe\Pics\myPic.bmp");

Graphics g = Graphics.FromImage(myBitmap);

 

二、与Graphics有关的类

1、    Pen 类 -- 用于绘制线条、勾勒形状轮廓或呈现其他几何表示形式。

Pen 绘制指定宽度和样式的直线。使用 DashStyle 属性绘制几种虚线。可以使用各种填充样式(包括纯色和纹理)来填充 Pen 绘制的直线。填充模式取决于画笔或用作填充对象的纹理。无法继承该类。

下面的代码示例演示了如何使用 Brush 构造 Pen,以及在 Pen 上设置 LineJoin 属性的效果。

此示例是针对使用 Windows 窗体而设计的。将代码粘贴到一个窗体中,然后在处理窗体的 Paint 事件时调用 ShowLineJoin 方法,并传递 e 作为 PaintEventArgs。

private void ShowLineJoin(PaintEventArgs e)

{

    // Create a new pen.

    Pen skyBluePen = new Pen(Brushes.DeepSkyBlue);

    // Set the pen's width.

    skyBluePen.Width = 8.0F;

    // Set the LineJoin property.

    skyBluePen.LineJoin = System.Drawing.Drawing2D.LineJoin.Bevel;

    // Draw a rectangle.

    e.Graphics.DrawRectangle(skyBluePen, new Rectangle(40, 40, 150, 200));

    //Dispose of the pen.

    skyBluePen.Dispose();

}

 

2、    Brush 类 -- 用于填充图形区域,如实心形状、图像或文本。

这是一个抽象基类,不能进行实例化。若要创建一个画笔对象,请使用从 Brush 派生出的类,如 SolidBrush、TextureBrush 和LinearGradientBrush。当从Brush类继承时,必须重写 Clone方法。

 

3、    Font 类 -- 提供有关在呈现文本时要使用什么形状的说明。

Windows 窗体应用程序支持 TrueType 字体,并且对 OpenType 字体提供有限的支持。如果您试图使用不受支持的字体,或者在运行此应用程序的计算机上未安装要使用的字体,则用 Microsoft Sans Serif 替代该字体。无法继承该类。

 

4、    Color 结构 -- 表示要显示的不同颜色。

Color结构表示ARGB颜色。有关 Color 结构的属性所表示的颜色的更多信息,请参见位于http://www.microsoft.com/china/msdn/library 的 MSDN Library 中的“Color Table”(颜色表)。

示例:截屏程序,使用C#截取屏幕,实现原理 1、获取屏幕,保存在一个Bmp图片。 2、获取一个窗体,并设置该窗体为最大化,并且设置FormBoderStyle为none,使窗体遮罩整个屏幕。
代码:/Files/youring2/SampleCatchScreen.rar

如果认为此文对您有帮助,别忘了支持一下哦!

作者:齐飞

来源:http://youring2.cnblogs.com/

声明:本博客原创文字只代表本人工作中在某一时间内总结的观点或结论,与本人所在单位没有直接利益关系。非商业,未授权,贴子请以现状保留,转载时必须保留此段声明,且在文章页面明显位置给出原文连接。

转载:http://www.cnblogs.com/youring2/archive/2009/10/14/1582943.html

时间: 2025-01-01 13:07:15

C# GDI+ 简单学习的相关文章

hung_task_timeout_secs 简单学习

[原文链接] http://hi.baidu.com/stealth_space/item/2007d93fe93ca28fb711dbac 接上篇 简单学习了解下 hung_task_timeout_secs 相关知识. OS: 2.6.18-194.32.1.el5 x86_64 # 先从系统中看下 hung_task 相关的参数及其参数值 [sina@localhost ~]$ sudo sysctl -a | grep hung kernel.hung_task_warnings = 0

SQL Server中的锁的简单学习

原文:SQL Server中的锁的简单学习 简介     在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查询的.这些查询并不会像绅士那样排队等待执行,而是会找最短的路径执行.因此,就像十字路口需要一个红绿灯那样,SQL Server也需要一个红绿灯来告诉查询:什么时候走,什么时候不可以走.这个红绿灯就是锁.     图1.查询可不会像绅士们那样按照次序进行

使用Promise解决多层异步调用的简单学习心得_javascript技巧

前言 第一次接触到Promise这个东西,是2012年微软发布Windows8操作系统后抱着作死好奇的心态研究用html5写Metro应用的时候.当时配合html5提供的WinJS库里面的异步接口全都是Promise形式,这对那时候刚刚毕业一点javascript基础都没有的我而言简直就是天书.我当时想的是,微软又在脑洞大开的瞎捣鼓了. 结果没想到,到了2015年,Promise居然写进ES6标准里面了.而且一项调查显示,js程序员们用这玩意用的还挺high. 讽刺的是,作为早在2012年就在M

Android编程之View简单学习示例_Android

本文实例讲述了Android编程之View简单学习示例.分享给大家供大家参考,具体如下: View,是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展. 在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 游戏的核心是不断地绘图和刷新界面,An

简单学习Android TextView

本文为大家分享了TextView的简单学习资料,供大家参考,具体内容如下 XML的几个特殊属性 android:autoLink 用于指定是否将文本转换成可点击的超链接形式,它的属性值有none,web,email,phone,map或all android:drawBottom 用于将图片添加到文本的低端 同理还有上,左,右 android:hint 当文本为空时,默认显示的是什么 android:Grivaity 文本的对齐方式 android:inputType 显示的文本类型 Maina

Android编程之View简单学习示例

本文实例讲述了Android编程之View简单学习示例.分享给大家供大家参考,具体如下: View,是Android的一个超类,这个类几乎包含了所有的屏幕类型.每一个View都有一个用于绘图的画布,这个画布可以进行任意扩展. 在游戏开发中叶可以自定义视图(View),这个画布的功能更能满足我们在游戏开发中的需要.在Android中,任何一个View类都只需重写onDraw 方法来实现界面显示,自定义的视图可以是复杂的3D实现,也可以是非常简单的文本形式等. 游戏的核心是不断地绘图和刷新界面,An

c# GDI+简单绘图(一)

最近对GDI+这个东西接触的比较多,也做了些简单的实例,比如绘图板,仿QQ截图等. 最早接触这个类,是因为想做仿QQ截图的效果.巧的很,学会了如何做截图后,.NET课堂上老师也正巧要讲关于c#绘图方面的知识,并且我自己又在网上学习金老师的培训班,也是要用到这个类.在学习中有一些体会,所以准备把这些体会记下来,因为内容比较多,可能我会分几次写. 废话不多说了,我们先来认识一下这个GDI+,看看它到底长什么样. GDI+:Graphics Device Interface Plus也就是图形设备接口

GDI+简单现实文字旋转

原文 http://www.cnblogs.com/kaixiangbb/p/3301272.html 题记     入职新公司已快有两月了,试用期已快结束,项目却迟迟还未正式启动.安排给我的多是些琐事,一直未进入工作状态.公司也不在本地,我是属于公司在现场招 的,工作地点就在客户这边.刚来时还有其他几个到这边出差的同事,有专门过来带我熟悉业务的,但呆了一个月陆陆续续都回公司去了.现目前就我和另一个在这 边上学的研三的实习生同事,没有人管着又没多少事可做,着实闲得有点蛋疼.     一闲下来时间

jmx的简单学习

背景 前段时间在看btrace源码和jdk一些源码的时候,经常会看到一些jmx的相关内容.以前对jmx基本是一片空白区,花了点时间学习记录下.   过程 jmx总体架构图:  说明:  1.  Agent : javax.management.MBeanServer实现了Agent的功能,以标准的方式给出了管理系统访问 JMX 框架的接口 2. SubAgent: javax.management.MBeans实现了SubAgent的功能,以标准的方式给出了 JMX 框架访问资源的接口 MBea