编辑
2025-02-03
C# 应用
00
请注意,本文编写于 92 天前,最后修改于 92 天前,其中某些信息可能已经过时。

目录

摘要
正文

摘要

在计算机图形学中,坐标系统是非常重要的概念,因为它们用于定义图形的位置和方向。在 C# GDI+ 中,有三种不同的坐标系统,分别是全局坐标系统、页面(Page)坐标系统和设备坐标系统。这三种坐标系统各有不同的定义和用途。

全局坐标系统是最基本的坐标系统,用于表示整个图形世界中的位置。在这个坐标系统中,所有的图形元素都可以通过唯一的坐标表示。例如,一个矩形可以表示为(0, 0)到(10, 10)的整数坐标。

页面(Page)坐标系统是默认的坐标系统,它以页面左上角为原点,横向x轴向右为正方向,纵向y轴向下为正方向。在这个坐标系统中,图形元素的位置可以通过页面上的坐标来表示。例如,一个矩形可以表示为(10, 10)到(20, 30)的坐标。

设备坐标系统是可以指定特定测量单位的页面(Page)坐标系统。它与页面(Page)坐标系统相同,但是可以指定不同的测量单位。例如,可以将测量单位设置为厘米,以便在不同的屏幕上显示相同的图形元素。

GDI+ 还提供了三种不同的坐标转换方法,分别是 Graphics.TransformPoints()、Graphics.TransformRotation() 和 Graphics.TransformScale()。这些方法可以用来转换图形元素的位置、旋转和缩放,以便在不同的坐标系统中显示和操作它们。

坐标系统和坐标转换是 C# GDI+ 中非常重要的概念,它们可以帮助我们在图形世界中准确地表示和操作图形元素。通过熟练掌握这些概念和方法,我们可以更加高效地创建和操作图形,实现更加丰富多彩的应用程序。

正文

点结构:Point和PointF

C#
Point p1 = new Point(0, 0); this.Location = p1; PointF p2 = new PointF(0, 0);

image.png

区别在于一个整形,一个浮点

尺寸结构Size和SizeF

C#
Size s = new Size(100, 200); this.Size = s; SizeF s1 = new SizeF(100, 200);

image.png

矩形结构Rectangle和RectangleF

结构Rectangle和RectangleF用来表示一个矩形,常用属性如下:

  • Top、Left,Bottom, Right:Rectangle结构坐标
  • Width、Height:获取或设置此Rectangle结构的宽、高度。
  • Size:获取或设置此Rectangle的大小。
  • X、Y:获取或设置此Rectangle结构左上角的x,Y坐标。
C#
//参数为矩形左上角坐标的点结构location和代表矩形宽和高的Size结构size Rectangle(Point location,Size size);//参数也可为PointF和SizeF //参数为矩形左上角x和y坐标,宽,高 Rectangle(int X,int Y,int width,int height);//X和Y也可为float

路径类GraphicsPath

C#
base.OnPaint(e); Graphics g = e.Graphics; g.FillRectangle(Brushes.White, this.ClientRectangle); GraphicsPath path = new GraphicsPath(); path.AddLine(10, 50, 300, 50); path.AddEllipse(new Rectangle(50,50,200,200)); path.AddLine(10, 250, 300, 250); path.CloseAllFigures(); g.DrawPath(Pens.Red, path); path.Dispose(); g.Dispose();

image.png

区域类Region类

C#
base.OnPaint(e); Graphics g = e.Graphics; g.FillRectangle(Brushes.White, this.ClientRectangle); GraphicsPath path = new GraphicsPath(); path.AddLine(10, 50, 300, 50); path.AddBezier(10,100,10,250,300,100, 300, 250); path.AddLine(10, 250, 300, 250); path.CloseAllFigures(); g.DrawPath(Pens.Red, path); Region reg = new Region(path); g.FillRegion(Brushes.DarkBlue, reg); path.Dispose(); g.Dispose();

image.png

C#
base.OnPaint(e); Graphics g = e.Graphics; Rectangle rect1 = new Rectangle(50, 10, 50, 130); Rectangle rect2 = new Rectangle(10, 50, 130, 50); //设置Region为第一个矩形 Region reg = new Region(rect1); //用Rect2提取Region中的交集 reg.Intersect(rect2); g.FillRegion(Brushes.Orange, reg); g.DrawRectangle(Pens.Black, rect1); g.DrawRectangle(Pens.Black, rect2);

image.png

本文作者:rick

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!