C# GDI+绘图(二)进阶---Pen/Brush以及坐标轴平移和旋转等

简介: 上一篇C# GDI+绘图(一)GDI+介绍及基础,我们介绍了,GDI+的基础,这篇我们对其进阶内容进行学习,分别为Pen/Brush以及坐标轴操作

1.首先,我们来介绍Pen的详细用法:

Pen的属性主要有: Color(颜色),DashCap(短划线终点形状),DashStyle(虚线样式),EndCap(线尾形状), StartCap(线头形状),Width(粗细)等.我们可以用Pen 来画虚线,带箭头的直线等

代码如下:

Pen p = new Pen(Color.Blue, 5);//设置笔的粗细为,颜色为蓝色
            Graphics g = this.CreateGraphics();
            //画虚线
            p.DashStyle = DashStyle.Dot;//定义虚线的样式为点
            g.DrawLine(p, 10, 10, 200, 10);
            //自定义虚线
            p.DashPattern = new float[] { 5, 1 };//设置短划线和空白部分的数组  5为虚线长度,1为虚线间距
            g.DrawLine(p, new Point(10, 20), new Point(20, 200));
            //画箭头,只对不封闭曲线有用
            p.DashStyle = DashStyle.Solid;//实线
            p.EndCap = LineCap.ArrowAnchor;//定义线尾的样式为箭头
            g.DrawLine(p, 10, 30, 200, 30);
            g.Dispose();
            p.Dispose();


2.Brush介绍

我们可以用画刷填充各种图形形状,如矩形、椭圆、扇形、多边形和封闭路径等,主要有几种不同类型的画刷:

  SolidBrush:画刷最简单的形式,用纯色进行绘制

  HatchBrush:类似于 SolidBrush,但是可以利用该类从大量预设的图案中选择绘制时要使用的图案,而不是纯色

  TextureBrush:使用纹理(如图像)进行绘制

  LinearGradientBrush:使用沿渐变混合的两种颜色进行绘制

     PathGradientBrush :基于编程者定义的唯一路径,使用复杂的混合色渐变进行绘制

Demo代码如下:

graphics g = this.creategraphics();
            rectangle rect = new rectangle(10, 10, 50, 50);
            //单色填充
            solidbrush b1 = new solidbrush(color.red);
            g.fillrectangle(b1, rect);
            //字符串
            g.drawstring("字符串", new font("宋体", 10), b1, new pointf(90, 10));
            rect.height = 200;
            rect.width = 200;
            //用图片填充
            texturebrush b2 = new texturebrush(image.fromfile(@"c:\users\xuan\desktop\1.png"));
            rect.location = new point(10, 70);
            g.fillrectangle(b2, rect);
            //用渐变色填充
            rect.location = new point(10, 250);
            lineargradientbrush b3 = new lineargradientbrush(rect, color.red, color.black, lineargradientmode.forwarddiagonal);
            g.fillrectangle(b3, rect);


3.坐标轴变换

在winform中的坐标轴和我们平时接触的平面直角坐标轴不同,winform中的坐标轴方向完全相反:窗体的左上角为原点(0,0),水平向左则X增大,垂直下向则Y增大

接下来,我们来实际操作下,通过旋转坐标轴的方向来画出不同角度的图案,或通过更改坐标原点的位置来平衡坐标轴的位置.


Graphics g = this.CreateGraphics();
            Pen p = new Pen(Color.Blue, 1);
            //转变坐标轴角度
            for (int i = 0; i < 90; i++)
            {
                g.RotateTransform(1);
                g.DrawLine(p, 0, 0, 100, 0);
                //g.ResetTransform();在不重置的情况下,每次转1°,相当于在重置的情况下,每次转 i°。(两种情况下,转动角度相同)
            }
            //平移坐标轴
            g.TranslateTransform(100, 100);
            g.DrawLine(p, 0, 0, 100, 0);
            g.ResetTransform();
            //先平移到指定坐标,然后进行度旋转
            g.TranslateTransform(100, 200);
            for (int i = 0; i < 12; i++)
            {
                g.RotateTransform(30);
                g.DrawLine(p, 0, 0, 100, 0);
                //g.ResetTransform();
            }


在这里,有2个方法,一个是RotatTransform,用于旋转,一个是TranslateTransform进行平移,还有ResetTransform()方法,用于对转换的重置,有无此方法的区别还需要各位在运行代码的时候去进行体会。

到此,本片文章即将结束,在下篇文章中,我将实现一个仿QQ截图的功能,并附上相应的代码,本篇文章的代码也将包含在内。

相关文章
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
C# GDI+绘图(四)实现网格绘制,并填充相应的表格内容
C# GDI+绘图(三)GDI+实现QQ截图类似功能
C# GDI+绘图(三)GDI+实现QQ截图类似功能
|
C# 图形学
C# GDI+绘图(一)GDI+介绍及基础
最近,项目中,有一块比较发杂的网格,并在网格上绘有各种颜色和文本,在Dev库中并未找到能实现这种功能的现有或可以二次开发的控件,因此,涉及到GDI+绘图这块陌生的领域。下面即时我在本次学习过程中的笔记,本次内容一共分为4篇,分别都有各自的代码或工程文件提供,有需要的朋友可以下载。
|
程序员 C# 图形学
使用 C# Graphics 绘图来绘制一个足球
2022卡塔尔世界杯是足球爱好者的狂欢,这与我毫无关系,作为一个缺乏运动的人,还是不要去看人家玩命的运动了。虽然不看球,不过这波热度的持续冲击,还是让我在朋友圈刷到了结局 ———— 球王梅西如愿以偿捧得金杯,后起之秀姆巴佩加冕金靴。但作为程序员,为了增加一些参与感我就拿 C# 画个足球图案吧。
217 0
使用 C# Graphics 绘图来绘制一个足球
|
C# 图形学
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
GDI+中对于圆弧的绘制,是以给定的长方形(Rectangle`结构)为边界绘制的椭圆的一部分形成的圆弧。绘制的圆弧的中心为长方形内切椭圆的圆心(如果是正方形,则正方形的...
637 0
C#之深入理解GDI+绘制圆弧及圆角矩形等比缩放的绘制
C#编程-130:Brush的五个继承类
C#编程-130:Brush的五个继承类
258 0
C#编程-130:Brush的五个继承类
C#编程-128:GDI绘图基础知识
C#编程-128:GDI绘图基础知识
115 0
C#编程-128:GDI绘图基础知识
|
C# 图形学 Windows
C# GDI+编程之Graphics类
GDI+是GDI的后继者,它是.NET Framework为操作图形提供的应用程序编程接口,主要用在窗体上绘制各种图形图像,可以用于绘制各种数据图像、数学仿真等。 Graphics类是GDI+的核心,它提供将对象绘制到显式设备的方法。Graphics类封装了绘制直线、曲线、圆形、图像和文本的方法,是一切GDI+操作的基础类。在绘图之前,必须在指定的窗体上创建一个Graphics对象,才能调用Graphics类的方法画图。
357 0
C# GDI+编程之Graphics类
|
1月前
|
C# 开发者
C# 一分钟浅谈:Code Contracts 与契约编程
【10月更文挑战第26天】本文介绍了 C# 中的 Code Contracts,这是一个强大的工具,用于通过契约编程增强代码的健壮性和可维护性。文章从基本概念入手,详细讲解了前置条件、后置条件和对象不变量的使用方法,并通过具体代码示例进行了说明。同时,文章还探讨了常见的问题和易错点,如忘记启用静态检查、过度依赖契约和性能影响,并提供了相应的解决建议。希望读者能通过本文更好地理解和应用 Code Contracts。
35 3
|
1天前
|
存储 安全 编译器
学懂C#编程:属性(Property)的概念定义及使用详解
通过深入理解和使用C#的属性,可以编写更清晰、简洁和高效的代码,为开发高质量的应用程序奠定基础。
26 12