首页 > 代码库 > C# GDI+学习笔记1

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写回到图像中。
 
 
 
 
 

C# GDI+学习笔记1