在计算机图形学中,坐标系统是非常重要的概念,因为它们用于定义图形的位置和方向。在 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);
区别在于一个整形,一个浮点
尺寸结构Size和SizeF
C#Size s = new Size(100, 200);
this.Size = s;
SizeF s1 = new SizeF(100, 200);
矩形结构Rectangle和RectangleF
结构Rectangle和RectangleF用来表示一个矩形,常用属性如下:
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();
区域类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();
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);
本文作者:rick
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!