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));
        }
时间: 2024-08-03 19:19:19

GDI+ 知识点记录的相关文章

hadoop知识点记录

浅谈在shell脚本中使用HQL访问hive hadoop知识点记录,布布扣,bubuko.com

spring mvc开发过程知识点记录

给一个客户做的一个小项目,需求就是输入类似一个短网址http://dd.yy/xxxx然后跳转到另外一个域名下的图书文件.(实际很多短网址站都提供API供调用吧,不过客户需求是他自己建立一个短网址服务然后跳转到服务器上另外一个网站下载相应图书) 以前没单独用spring开发的经验,实际用java的经验也比较少,所以记录下开发过程中遇到的问题以及有价值的知识点记录下供自己和后来者备忘吧.有些地方理解或者写的可能有不对的地方,应急用的,先求保持功能可用即可.  配置: 1.web.xml 2.spr

【千纸诗书】—— PHP/MySQL二手书网站后台开发之知识点记录

前言:使用PHP和MySQL开发后台管理系统的过程中,发现有一些通用的[套路小Tip],这里集中记录一下.结合工作中ing的后台业务,我逐渐体会到:除了技术知识外.能使用户体验好的“使用流程设计”积累也十分重要╭( ???)? ?? 项目github地址:https://github.com/66Web/php_book_store,欢迎Star. 一.知识点记录 1.数据库的表名和列名 绝对不要和数据库的关键字相同  order  order by 订单表-indent   分类表-class

C#算法知识点记录

针对算法的知识点进行记录 桶排序 占位符

深度学习知识点记录

记录深度学习知识点 相关源码:https://coding.net/u/chenxygx/p/FrameworkResearch/git/tree/master/AI 参考: TensorFlow深度学习,一篇文章就够了 TensorFlow.MXNet.PaddlePaddle 对比 TensorFlowSharp入门使用C#编写TensorFlow人工智能应用 &

SqlServer知识点记录分享

知识点介绍 双向检索:这里就不大话概念了,直接说它的作用 ISNULL()函数:判断函数是否有值,如果变量没有赋值就给定指定的值,下面的例子就是如果@TOTALCOUNT变量为NULL那么就赋值为空字符串,如果我们将@TOTALCOUNT变量赋予了初始值那么就打印的是0否则是1,大家可以copy运行一下就知道了 DECLARE @TOTALCOUNT INT IF ISNULL(@TOTALCOUNT,'')='' PRINT '1' ELSE PRINT '0' LTRIM()去除变量的左边空

C#小知识点记录(QQ交流群的一个小问题)Linq提取数据

请教 这里 LINQ想 找到 最后的 4条 记录 然后放在 这里这个 List Linq查找怎么写呀? 解答:写了一个小例子作为解答. 1 namespace C_Sharp 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //声明 8 List<Person> listPerson = new List<Person>() { 9 new Person {Type="A", Fir

C#知识点记录

用于记录C#知识要点. 参考:CLR via C#.MSDN. 记录方式:读每本书,先看一遍,然后第二遍的时候,写笔记. CLR:公共语言运行时(Common Language Runtime)是一个可由多种编程语言(VB.F#等)使用的公共语言运行库. 托管模块:编译源码会生成托管模块,他是标准的PE文件.包含:PE32头.CLR头.IL中间语言. 元数据:CLR除了生成IL外,还会生成元数据.元数据总与包含IL代码的文件相关联. 程序集:是一个或多个模块/资源的逻辑性分组.是重用.安全性.版

Javascript知识点记录(三)设计模式

Javascript设计模式记录,这个方面确实是没写过,工作中也没有用到js设计模式的地方. 单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点.例如:线程池,全局缓存,登录浮窗. 首先我们需要把单例的逻辑代码单独提取,然后使用惰性单例的方式,也就是返回方法.只有在点击的时候,才会进行执行. javascript的单例,跟类不一样.无需创建多余的构造函数这些,直接创建全局变量即可. !(function () { //管理单例的逻辑代码,如果没有数据则创建,有数据则返回 var ge