GDI+ 知识点记录
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GDI+ 知识点记录相关的知识,希望对你有一定的参考价值。
参考资料:MSDN
GDI+
GDI+是CLR中使用的Windows图形设备接口高级实现。可以创建图形、绘制文本、图形图像作为对象进行操作。
对应命名空间。System.Drawing:提供GDI+基本图形功能的访问权限 System.Drawing.Drawing2D:提供高级二维和矢量图形功能
分类
Windows窗体图形分为三大类
1.二维矢量图形:二维矢量图为直线、曲线、图形构成。由坐标系统上多组点指定。
2.图像处理:某些图形无法用矢量图表示。以位图的形式进行存储,位图是屏幕各个点的数字阵列。GDI+提供了显示、操作、保存Bitmap类。
3.版式:指各种字体、大小、样式显示文本。子像素抗锯齿功能。
结构
Graphics类 封装一个 GDI+ 绘图图面。是GDI+功能的核心,是实际绘制直线、曲线、图形、图像、文本的类。
搭配的类很多,重要的有
DrawLine 接受 Pen对象,绘制线条。
FillRectangle 接受指向 LinearGradientBrush对象,使用渐进色填充矩形。
Font和StringFormat,影响文本绘制方式。
Matrix 对象存储操作 图形变换,旋转,缩放,翻转等。
二维矢量图
GDI+默认坐标的原点是左上角,x轴指向右边,y轴指向下边。默认单位是像素
GDI+支持的构造块如下:
DrawLine:行
DrawRectangle:矩形
DrawEllipse:椭圆
DrawPolygon:弧线
DrawArc:多边形
DrawCurve:基数样条(一连串单独的曲线,这些曲线连接起来形成一条较大的曲线)
DrawBezier:贝塞尔曲线(由四个点指定的曲线,两个端点、两个控制点。曲线连接两个端点,控制点可以影响曲线弯曲方式)
很多绘制快,都有对应的辅助方法。例如DrawLines,辅助方法能够通过连接曲线的终点和起点的方式来闭合曲线。
用小例子,来展示以上结构快。
//重新绘制 private void Form1_Paint(object sender, PaintEventArgs e) { Graphics g = this.CreateGraphics(); Pen BluePen = new Pen(Color.Blue, 3); Pen RedPen = new Pen(Color.Red, 3); //绘制直线 g.DrawLine(BluePen, 10, 10, 200, 10); //绘制线冒和虚线 BluePen.DashStyle = DashStyle.Dash; g.DrawLine(BluePen, 10, 20, 200, 20); BluePen.StartCap = LineCap.RoundAnchor; BluePen.EndCap = LineCap.ArrowAnchor; g.DrawLine(BluePen, 10, 30, 200, 30); //绘制矩形 g.DrawRectangle(BluePen, 10, 40, 200, 10); //绘制椭圆 g.DrawEllipse(BluePen, 10, 70, 200, 20); //绘制弧线 g.DrawArc(RedPen, 10, 70, 200, 20, 10, 20); //绘制多边形 Point[] pointArray = new Point[] { new Point(10, 80), new Point(80, 50), new Point(100, 20) }; g.DrawPolygon(BluePen,pointArray); //绘制基数样条 g.DrawCurve(BluePen, pointArray); //绘制贝塞尔曲线 g.DrawBezier(BluePen, 10, 100, 100, 100, 100, 100, 100, 100); }
GraphicsPath
图形路径允许将这些构造块收集到一个单元中。调用一次DrawPath就可以绘制整个序列图。
还可以向路径,添加子路径组合成更复杂的路径。
Brush
Pen可以接受Brush作为画笔,分为以下几种
SolidBrush,实心画笔
HatchBrush,阴影画笔
TextrueBrush,纹理画笔
LinearGradientBrush,渐变画笔
抗锯齿功能
Graphics.SmoothingMode = SmoothingMode.AntiAlias
图像
使用Metafile类,以便能够记录和显示矢量图像。
使用Bitmap类,可以加载和显示光栅图像。
可以用各种图形文件格式(BMP、GIF、JPEG、EXIF、PNG、TIFF 和 ICON)构造 Bitmap 对象。
Bitmap bitmap = new Bitmap("图像路径"); g.DrawImage(bitmap, 10, 10);
Bitmap类使用Clone方法,可以使用矩形复制图像的一部分。
SetClip可以设置剪切区域
private void Form1_Paint(object sender, PaintEventArgs e) { Point[] polyPoints = { new Point(10, 10), new Point(150, 10), new Point(100, 75), new Point(100, 150)}; GraphicsPath path = new GraphicsPath(); path.AddPolygon(polyPoints); Region region = new Region(path); Pen pen = Pens.Black; e.Graphics.DrawPath(pen, path); e.Graphics.SetClip(region, CombineMode.Replace); FontFamily fontFamily = new FontFamily("Arial"); Font font = new Font( fontFamily, 36, FontStyle.Bold, GraphicsUnit.Pixel); SolidBrush solidBrush = new SolidBrush(Color.FromArgb(255, 255, 0, 0)); e.Graphics.DrawString( "A Clipping Region", font, solidBrush, new PointF(15, 25)); e.Graphics.DrawString( "A Clipping Region", font, solidBrush, new PointF(15, 68)); }
以上是关于GDI+ 知识点记录的主要内容,如果未能解决你的问题,请参考以下文章
C#(Sharp)GDI plus与图形编程(计算机图形学必备知识)