C# GDI+学习笔记1

?前言

本文是学习C# GDI+系列的第一篇文章,简单的介绍了GDI+的一些基本绘图内容,比较粗糙。但本文主要是让大家简单的回顾一下GDI+的基本概念。本篇文章的参考代码请在此下载 。

GDIPTest_Article1_161112_2346.rar

如果有什么疑问,或者建议,请留言联系本人。

1 窗口重绘

?Windows自动处理鼠标拖动窗体、更改窗体大小等用户操作,自动调整窗体所占屏幕区域的大小,并进行重画

当需要重画时,Windows发送消息WM_PAINT

窗体对象的Paint事件用于响应WM_PAINT消息

–当窗体被挡住,并再次显示时

–当其他窗体在主窗体上移动时

–当主窗体的尺寸变大时

–Windows只重绘必要的区域,ClipRectangle属性

–调用Invalidate方法主动激发WM_PAINT消息

2. 绘图内容

?点  (Point)

?矩形  (Rectangle)

?颜色  (Color)

?笔  (Pen)

?画刷  (Brush)

?字体  (Font)

?路径  (GraphicsPath)

?区域  (Region)

?.Net中提供了两个数据结构表示绘图中的一点的坐标值:Point(X,Y)与PointF。其封装了两个变量,一个表示宽度,一个表示高度。

?大多数情况下,代码中指定的坐标、长度和宽度数值均为像素。可以使用Graphics的PageUnit属性来确定其他的单位。

Rectangle矩形

?某点是否在矩形内——Contains

?矩形的放大与缩小:Inflate(为正放大,为负缩小)

?求两个矩形的交集:Intersect

?求并集:Union

?平移:Offset

?颜色的HSB模型

?Hue:色调0…360

?Saturation:饱和度0…1

?Brightness:亮度0…1

?创建Color对象:

Color clr;

clr= Color.FromArgb(255, 255, 0, 255)

?另一个方法:

?Color.FromKnownColor(…)

?颜色的alpha值表示颜色的透明度。创建透明的对象,须将alpha值设置为小于‘255’、

?笔(Pen)

用于描绘线条

?绘制线条、曲线、勾勒形状轮廓

?创建笔对象后,可通过设置其属性,绘制出不同类型的线条

?Width, Color

?StartCap, EndCap:开始及结尾点的形状

?DashStyle:设置虚线样式

?Brushes的类型

?创建Solid及Texture实心形状

?创建Hatch实心形状

?创建Gradient实心形状

?创建PathGradient实心形状

?创建Transparent实心形状

?动手实验:创建Brushes以及填充图形

?Brush对象用于填充图形

?SolidBrush: 纯色画刷

?HatchBrush: 图案画刷

?–Windows提供的典型图案填充图形

?TextureBrush: 纹理画刷

?LinearGradientBrush: 渐变画刷

?–用平滑过渡的颜色来填充一个图形

?PathGradientBrush: 路径渐变画刷

?–基于某一路径,用复杂的混合色渐变进行填充

?使用gradient brush实现渐变的颜色

?使用path gradient brush实现用渐变的颜色填充图形,彩色渐变是从路径的中点到路径的外边界边缘的平滑的彩色渐变.

?绘制文本

?需要Brush对象及Font对象

?调用Graphics对象的DrawString方法绘制文本

?绘制文本技巧

?指定文本绘制范围:提供矩形对象

?控制换行:Environment.NewLine

?绘制竖向文本:使用StringFormat对象

?GraphicsPath

此类封装了一系列相连接的直线、曲线、圆弧等围成的图形。

可通过Add系列方法来构造一个路径;通过CloseFigure方法自动完成路径的设置;通过Graphics的DrawPath方法来绘制路径,FillPath方法来填充路径

?区域(Region)

指绘图表面的一部分

?可以使用Rectangle或GraphicsPath对象来构造一个区域

?使用FillRegion对区域进行填充

?使用MakeInfinite将一个区域转换为无限区域

?可对区域进行类似于集合的操作

?可以使用Region对象得到特殊形状的窗体

?屏幕坐标系

?平移:

?g.TranslateTransform(100, 75)

?旋转

?g.RotateTransform(45)

?缩放:坐标系的缩放是指坐标原点不变,但单位长度所占的像素数目有变化;

?‘水平放大两倍,垂直放大三倍

?g.ScaleTransform(2.0F, 3.0F)

?Bitmap

?–位图是位的数组,它指定了像素矩阵中各像素的颜色。

?图形文件格式的类型

?–BMP, GIF, JPEG, EXIF, PNG, TIFF

?旋转、倾斜及折射图像

?–使用DrawImage方法并通过指定左上角、右上角、左下角的目标坐标来实现

?通过调用Image对象的GetThumbnailImage方法创建缩略图

在图像上输出字

?获取图像对象所在容器的Graphics对象g,然后,调用g的DrawString;

?或是获取图像本身的Graphics对象,并调用DrawString方法。

创建图像特效

?图像特效是依靠对图像的像素点直接进行操作实现的。并可对像素进行数学变换。

?其方法是

?–调用GetPixel得到点的颜色,然后,进行相应处理后,再用SetPixel写回到图像中。

时间: 2024-12-28 12:01:30

C# GDI+学习笔记1的相关文章

GDI+学习笔记(六)渐变画刷

画刷,顾名思义,就是像画刷一样,向设备上绘制,还记得小时候常唱的首歌,"我是一个粉刷匠.." 好吧,跑题了. 本系列博客希望尽可能简单的描述每项功能,而不希望把每个参数都介绍的详详细细,如果需要,请查阅msdn,本节讲述的渐变画刷,主要有两种,一种是叫线性画刷(LinearGradientBrush),还有一种叫路径画刷(PathGradientBrush),我希望以一种尽可能简单的方式去描述它,但能力有限,所以有什么意见,希望各位能帮忙提出,谢谢. (一)使用画刷 上一节中,我们实际

GDI+学习笔记(五)绘制一个正方体

本文将介绍如何利用GDI+绘制一个正方体. (一)准备阶段 想象一下,高中的时候,我们在学立体几何的时候是怎样画一个正方体的,我们在一张纸上利用投影的思路将其绘制在一张纸上,对吧,这计算投影的部分,我们暂且忽略.下图是我用windows的画图绘制的一个正方体: 我们计算出这些点在平面上的坐标如下: Point A(100,200); Point B(200,200); Point C(100,300); Point D(200,300); Point E(100+50*1.414, 200-50

GDI+学习笔记(七)保存简单图像

请尊重本人的工作成果,转载请留言,并说明转载地址,谢谢.地址如下: http://blog.csdn.net/fukainankai/article/details/27710883 前几节中,我们利用GDI+在窗口中绘制了各种各样的图形.图像,这一节,我们将会将这些图像保存成简单图像.所谓简单图像,指的是bmp/jpg/png等图像或者单帧的gif图像.保存成多帧的gif图像稍微复杂一点,本节中暂时不做说明.保存成动态的tiff文件也比较简单,但这里也不做说明,下次有机会和gif一起介绍. 另

GDI+学习笔记(九)带插件的排序算法演示器(MFC中的GDI+实例)

带插件的排序算法演示器 本节将通过一个实例来说明GDI+在MFC中的应用.这个算法演示器其实是本人算法系列的一个开端,由于csdn没有树状的目录结构,咱也只好使用链表了不是?好了,废话不多说,开始今天的文章. (一)功能说明 我们初步制定功能如下: (1). 能够通过柱状图,自动展示排序算法的交换比较过程 (2). 能够使用插件的形式进行开发.即,当新完成一个算法后,只需要完成一个插件文件(我们这里使用动态库dll),由主程序加载插件,即可进行执行,而不再需要重新编译主程序. (3). 保证主程

GDI+学习笔记

7.1.1 GDI+概述 GDI+是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现, 这套类被称为GDI+的“托管类接口”,GDI+主要提供了以下三类服务: (1) 二维矢量图形:GDI+提供了存储图形基元自身信息的类(或结构体).存储图形基元绘制方式信息的类以及实际进行绘制的类. (2) 图像处理:大多数图片都难以划定为直线和曲线的集合,无法使用二维矢量图形方式进行处理. 因此,GDI+为我们提供了Bitmap.Image等类,它们可用于

学习笔记:利用GDI+生成简单的验证码图片

小分享:我有几张阿里云优惠券,用券购买或者升级阿里云相应产品最多可以优惠五折!领券地址:https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=ohmepe03 学习笔记:利用GDI+生成简单的验证码图片 1 /// <summary> 2 /// 单击图片时切换图片 3 /// </summary> 4 /// <param name="sender">&

C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法

C#数字图像处理算法学习笔记(一)--C#图像处理的3中方法 Bitmap类:此类封装了GDI+中的一个位图,次位图有图形图像及其属性的像素数据组成.因此此类是用于处理像素数据定义的图形的对象.该类的主要方法和属性如下:  GetPixel与SetPixel方法:获取或设置一个图像的指定像素的颜色. PixelFormat属性:返回图像的像素格式. Height和Width:返回图像的高度和宽度. LockBits与UnLockBits方法:分别锁定和解锁系统内存中的位图像素. LockBits

C++内存管理学习笔记(6)

/****************************************************************/ /*            学习是合作和分享式的! /* Author:Atlas                    Email:[email protected] /*  转载请注明本文出处: *   http://blog.csdn.net/wdzxl198/article/details/9120635 /************************

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main