C# Graphics类的用法
创始人
2025-05-28 16:20:45

1. Graphics.TranslateTransform

Graphics.TranslateTransform是一个用来移动绘图坐标系的方法,可以将绘图坐标系沿着指定的X和Y轴方向平移一定的距离。它的语法如下:

public void TranslateTransform(float dx, float dy);

其中,dx和dy分别表示在X轴和Y轴方向上移动的距离。如果dx和dy为正数,那么绘图坐标系会向右和向下移动;如果dx和dy为负数,那么绘图坐标系会向左和向上移动。

如果需要在多个方向上移动绘图坐标系,可以多次调用TranslateTransform方法。例如,要将绘图坐标系向右下方移动10个像素,可以这样写:

graphics.TranslateTransform(10, 10);

在调用TranslateTransform方法之后,所有后续的绘图操作都会在移动后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:

graphics.ResetTransform();

需要注意的是,TranslateTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要移动坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。

2. Graphics.RotateTransform

Graphics.RotateTransform是一个用来旋转绘图坐标系的方法,可以将绘图坐标系绕着指定的中心点旋转一定的角度。它的语法如下:

public void RotateTransform(float angle);

其中,angle表示旋转的角度,单位为度。如果angle为正数,那么绘图坐标系会顺时针旋转;如果angle为负数,那么绘图坐标系会逆时针旋转。

如果需要指定旋转的中心点,可以使用另一个重载的RotateTransform方法。它的语法如下:

public void RotateTransform(float angle, PointF point);

其中,angle表示旋转的角度,单位为度;point表示旋转的中心点。例如,要将绘图坐标系绕着原点逆时针旋转30度,可以这样写:

graphics.RotateTransform(-30);

在调用RotateTransform方法之后,所有后续的绘图操作都会在旋转后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:

graphics.ResetTransform();

需要注意的是,RotateTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要旋转坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。

3. Graphics.ScaleTransform

Graphics.ScaleTransform方法是一个用来缩放绘图坐标系的方法,可以将绘图坐标系沿着X和Y轴方向分别缩放一定的比例。它的语法如下:

public void ScaleTransform(float scaleX, float scaleY);

其中,scaleX和scaleY分别表示在X轴和Y轴方向上的缩放比例。如果scaleX和scaleY为1,那么绘图坐标系不会发生变化;如果scaleX和scaleY小于1,那么绘图坐标系会缩小;如果scaleX和scaleY大于1,那么绘图坐标系会放大。

如果需要指定缩放的中心点,可以使用另一个重载的ScaleTransform方法。它的语法如下:

public void ScaleTransform(float scaleX, float scaleY, float centerX, float centerY);

其中,scaleX和scaleY分别表示在X轴和Y轴方向上的缩放比例;centerX和centerY表示缩放的中心点。例如,要将绘图坐标系沿着X轴方向缩小一半,可以这样写:

graphics.ScaleTransform(0.5f, 1);

在调用ScaleTransform方法之后,所有后续的绘图操作都会在缩放后的坐标系中进行。如果需要还原坐标系到原始状态,可以使用Graphics.ResetTransform方法。例如:

graphics.ResetTransform();

需要注意的是,ScaleTransform方法对于所有后续的绘图操作都是有效的,因此必须在不需要缩放坐标系的时候及时还原坐标系。否则,后续的绘图操作可能会出现错误。

4. Graphics.DrawImage

Graphics.DrawImage是一个用来绘制图像的方法,可以将一个图像绘制到指定的位置和大小。它的语法如下:

public void DrawImage(Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit);

其中,image表示要绘制的图像;destRect表示目标矩形,即要将图像绘制到哪个位置和大小;srcRect表示源矩形,即要从图像中绘制哪个部分;srcUnit表示源矩形的单位,通常为像素。

如果要将整个图像绘制到目标矩形中,可以将srcRect设置为图像的整个区域,例如:

graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel);

如果要将图像缩放到目标矩形大小,可以先将srcRect设置为图像的整个区域,然后再调用Graphics.ScaleTransform方法对绘图坐标系进行缩放,例如:

graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel); graphics.ScaleTransform(destRect.Width / image.Width, destRect.Height / image.Height);

在调用DrawImage方法之前,可以使用Graphics.SmoothingMode、Graphics.InterpolationMode等属性来设置绘图的平滑模式和插值模式。例如,要使用高质量的平滑模式和插值模式绘制图像,可以这样写:

graphics.SmoothingMode = SmoothingMode.HighQuality; graphics.InterpolationMode = InterpolationMode.HighQualityBicubic; graphics.DrawImage(image, destRect, image.GetBounds(GraphicsUnit.Pixel), GraphicsUnit.Pixel);

需要注意的是,如果目标矩形的宽度或高度小于源矩形的宽度或高度,那么图像会被裁剪;如果目标矩形的宽度或高度大于源矩形的宽度或高度,那么图像会被拉伸。因此,要根据实际需求来设置目标矩形的大小和源矩形的位置和大小。

5. Graphics.Save

C# Graphics类的Save方法可以将绘制的图形保存到指定的文件中。该方法有多个重载形式,最常用的形式是:

public void Save(string filename, ImageFormat format);

其中,filename为要保存的文件名,format为图像格式,例如JPEG、PNG、BMP等。下面是一个示例:

using System.Drawing;
using System.Drawing.Imaging;// 创建一个位图对象
Bitmap bitmap = new Bitmap(400, 300);// 创建一个画布对象
Graphics g = Graphics.FromImage(bitmap);// 在画布上绘制一些图形
g.DrawLine(Pens.Red, new Point(0, 0), new Point(400, 300));
g.DrawRectangle(Pens.Blue, new Rectangle(100, 100, 200, 100));
g.DrawString("Hello, world!", new Font("Arial", 16), Brushes.Black, new PointF(50, 50));// 将绘制的图形保存到文件中
bitmap.Save("test.png", ImageFormat.Png);

在上述代码中,我们首先创建了一个位图对象和一个画布对象,然后在画布上绘制了一些图形。最后,调用Save方法将绘制的图形保存为PNG格式的文件。如果要保存为其他格式,只需将ImageFormat.Png替换为对应的格式即可。注意,在使用完Graphics对象之后,应该调用Dispose方法释放资源。

6. Graphics.Restore

C# Graphics类的Restore方法可以恢复图形状态,撤销上一次绘制操作。当我们在绘制图形时调用了Graphics对象的变换方法(如TranslateTransform、ScaleTransform、RotateTransform等),这些变换会对后续的绘制操作产生影响。如果需要撤销这些变换,可以使用Restore方法恢复到之前的状态。

7. Graphics.Clear

C# Graphics类的Clear方法可以清除图形表面,填充指定的颜色。该方法有多个重载形式,最常用的形式是:

public void Clear(Color color);

其中,color为要填充的颜色。下面是一个示例:

using System.Drawing;// 创建一个位图对象
Bitmap bitmap = new Bitmap(400, 300);// 创建一个画布对象
Graphics g = Graphics.FromImage(bitmap);// 清除画布表面,填充指定的颜色
g.Clear(Color.White);// 在画布上绘制一些图形
g.DrawLine(Pens.Red, new Point(0, 0), new Point(400, 300));
g.DrawRectangle(Pens.Blue, new Rectangle(100, 100, 200, 100));
g.DrawString("Hello, world!", new Font("Arial", 16), Brushes.Black, new PointF(50, 50));// 释放资源
g.Dispose();
bitmap.Save("test.png", ImageFormat.Png);

在上述代码中,我们首先创建了一个位图对象和一个画布对象,然后调用Clear方法清除画布表面,并填充白色。接着,在画布上绘制了一些图形。最后,调用Dispose方法释放资源,并将绘制的图形保存为PNG格式的文件。

8. Graphics.DrawLine

C# Graphics.DrawLine是一个用于绘制直线的方法。它是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。

DrawLine方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、起点坐标(x1, y1)、终点坐标(x2, y2)。Pen对象定义了线条的属性,如颜色、宽度等。

以下是一个使用DrawLine方法绘制一条直线的示例:

private void Form1_Paint(object sender, PaintEventArgs e)
{Pen pen = new Pen(Color.Black, 2);e.Graphics.DrawLine(pen, 10, 10, 100, 100);
}

在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并调用Graphics对象的DrawLine方法来绘制一条从(10,10)到(100,100)的直线。

9. Graphics.DrawRectangle

C# Graphics.DrawRectangle是一个用于绘制矩形的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。

DrawRectangle方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、左上角坐标(x, y)、宽度和高度。Pen对象定义了矩形边框的属性,如颜色、宽度等。

以下是一个使用DrawRectangle方法绘制一个矩形的示例:

private void Form1_Paint(object sender, PaintEventArgs e)
{Pen pen = new Pen(Color.Black, 2);Rectangle rect = new Rectangle(10, 10, 100, 100);e.Graphics.DrawRectangle(pen, rect);
}

10. Graphics.DrawRectangle

C# Graphics.DrawEllipse是一个用于绘制椭圆的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。

DrawEllipse方法有几个重载形式,但最基本的形式需要四个参数:Pen对象、左上角坐标(x, y)、宽度和高度。Pen对象定义了椭圆边框的属性,如颜色、宽度等。

以下是一个使用DrawEllipse方法绘制一个椭圆的示例:

private void Form1_Paint(object sender, PaintEventArgs e)
{Pen pen = new Pen(Color.Black, 2);Rectangle rect = new Rectangle(10, 10, 100, 200);e.Graphics.DrawEllipse(pen, rect);
}

在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并创建一个Rectangle对象表示左上角坐标为(10,10),宽度为100,高度为200的矩形,然后调用Graphics对象的DrawEllipse方法来绘制这个椭圆。

11. Graphics.DrawPolygon

C# Graphics.DrawPolygon是一个用于绘制多边形的方法。它也是从Graphics类中派生出来的,因此您需要实例化Graphics对象才能使用该方法。

DrawPolygon方法有几个重载形式,但最基本的形式需要两个参数:Pen对象和PointF数组。Pen对象定义了多边形边框的属性,如颜色、宽度等。而PointF数组则包含了多边形各个顶点的坐标。

以下是一个使用DrawPolygon方法绘制一个三角形的示例:

private void Form1_Paint(object sender, PaintEventArgs e)
{Pen pen = new Pen(Color.Black, 2);PointF[] points = { new PointF(100, 100), new PointF(150, 50), new PointF(200, 100) };e.Graphics.DrawPolygon(pen, points);
}

在这个示例中,我们创建了一个黑色宽度为2像素的Pen对象,并创建了一个包含三个顶点坐标的PointF数组,然后调用Graphics对象的DrawPolygon方法来绘制这个三角形。

12. Graphics.DrawString

C#中的Graphics.DrawString方法可以用于在指定位置绘制指定字符串。该方法通常与Graphics对象一起使用,该对象表示要在其上绘制的图形表面。

下面是Graphics.DrawString方法的语法:

public void DrawString(string s, Font font, Brush brush, float x, float y);

参数说明:

  • s:要绘制的字符串。
  • font:用于绘制字符串的字体。
  • brush:用于绘制字符串的画刷。
  • x 和 y:字符串的左上角位置坐标。

此外,还有其他重载版本的DrawString方法,它们可以接受不同的参数来控制字符串的布局、对齐方式、格式等。

13. Graphics.FillRectangle

C#中的Graphics.FillRectangle方法可以用于在指定矩形内绘制填充颜色。

下面是Graphics.FillRectangle方法的语法:

public void FillRectangle(Brush brush, float x, float y, float width, float height);

参数说明:

  • brush:用于填充矩形区域的画刷。
  • x 和 y:矩形左上角的位置坐标。
  • width 和 height:矩形的宽度和高度。

此外,还有其他重载版本的FillRectangle方法,它们可以接受不同的参数来控制填充颜色、矩形的圆角半径等。

14. Graphics.FillEllipse

C#中的Graphics.FillEllipse方法可以用于在指定矩形内绘制填充椭圆。

下面是Graphics.FillEllipse方法的语法:

public void FillEllipse(Brush brush, float x, float y, float width, float height);

参数说明:

  • brush:用于填充椭圆区域的画刷。
  • x 和 y:椭圆左上角的位置坐标。
  • width 和 height:椭圆的宽度和高度。

此外,还有其他重载版本的FillEllipse方法,它们可以接受不同的参数来控制填充颜色、椭圆的圆角半径等。

14. Graphics.FillPolygon

C# Graphics.FillPolygon 方法用于填充多边形。

方法语法如下:

public void FillPolygon (System.Drawing.Brush brush, System.Drawing.Point[] points);

其中,参数 brush 表示要用于绘制多边形的画刷(Brush),参数 points 是一个包含多边形顶点坐标的数组。顶点坐标按照连接顺序传递,即多边形的第一个点和最后一个点应该是相邻的。

以下是一个示例:

// 创建画布
Bitmap bmp = new Bitmap(300, 300);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.White);// 绘制一个三角形
Point[] points = { new Point(50, 50), new Point(150, 50), new Point(100, 150) };
SolidBrush brush = new SolidBrush(Color.Red);
g.FillPolygon(brush, points);// 将图像保存为文件
bmp.Save("triangle.png", ImageFormat.Png);

这段代码将创建一个大小为 300x300 的空白画布,并在上面绘制一个红色的三角形。最后将整个画布保存为一个 PNG 图像文件。

相关内容

热门资讯

财经时评|以创新厚度重塑汽车产... 作者 远山中国汽车工业协会与工业和信息化部近期针对行业“内卷式”竞争的联合发声,为持续蔓延的价格战按...
恒生指数午盘下跌2.20%,恒... 6月2日午盘,香港恒生指数下跌2.20%,报22778.45点;恒生科技指数下跌2.43%,报504...
“以旧换新”带货1万亿,中国何... “美国想让制造业回流成为中国的样子,一个踏实劳作的‘生产者社会’;而中国想努力扩大消费成为美国的样子...
恒指半日跌2.2% 恒指半日跌... 【恒指半日跌2.2%】截至午间收盘,香港恒生指数下跌2.20%,报22778.45点;恒生科技指数下...
“成分之争”舆论战升级,巨子生... 重组胶原蛋白成分之争的舆论战再度升级。美妆博主 "大嘴博士" (郝宇)近日连续发文质疑,巨子生物(0...
汇川技术新注册《InoCube... 证券之星消息,近日汇川技术(300124)新注册了《InoCube-InoData数据分析系统V1....
博将控股多家所投企业荣登202... 博将控股多家所投企业荣登2025杭州独角兽与准独角兽榜单 2025年4月24日,由民建浙江省委会、浙...
刚刚,A50直线跳水!亚太股市... 6月2日,亚太股市开盘后持续走弱。富时中国A50期货开盘跌0.6%,截至目前跌幅1.91%。 截至...
问界、智界、享界、尊界,202... 2025鸿蒙智行:四界表现鸿蒙智行作为国内造车新势力的主流品牌,一共规划了“五界”车型,包括:问界、...
花样年控股:重组支持协议的最后... 6月1日,花样年控股(01777.HK)公告称,公司2024年4月29日所订立的重组支持协议的最终截...
蜜雪集团股价创上市以来新高 蜜... 新京报贝壳财经讯 6月2日,港股蜜雪集团盘中涨超7%,股价刷新上市新高。
美单边关税让全球经济面临更大不... 美国征收关税的对象和标准可能随意变更,其关税政策具有不可预测性。无论是外国企业,还是美国本土企业,都...
桃李面包创始人向其两儿子转让3... 5月30日晚间,桃李面包(沪市代码:603866)公告称,公司控股股东及实际控制人吴志刚通过大宗交易...
前4月东莞重大项目完成投资42... 本期看点:前4月东莞重大项目完成投资429.09亿元;长联科技募投项目提升年产至2.77万吨;广东省...
恒生指数跌幅扩大至2%,医药、... 6月2日,恒生指数跌幅扩大至2%,医药、地产、能源板块跌幅居前,美中嘉和跌超14%,石四药集团跌近1...
港股、A50飘绿,亚太市场多数... 早间,亚太市场多数下跌。港股、A50集体下跌其中,恒生指数、恒生科技指数开盘跌幅扩大, 港股生物技术...
雷军看好的两兄弟,要IPO了 ... 2021年夏,小米产业园办公室内,雷军饶有兴致地打量眼前一对兄弟,“为什么张波是创始人,董事长却是张...
圣阳股份涨1.66%,成交额9... 5月30日,圣阳股份涨1.66%,成交额9.82亿元,换手率15.03%,总市值66.67亿元。 异...
“龙舟溪游”点燃江南西商圈消费... 5月31日至6月2日,海珠区江南中街道一年一度的节假日消费体验活动如约而至。今年“龙舟溪游・与你童在...
恒生指数开盘跌1.06%,恒生... 6月2日,恒生指数开盘跌1.06%报23043.10点,恒生科技指数跌1.33%,恒生中国企业指数跌...
*ST天喻实控人被刑事立案 此... 5月30日,*ST天喻(300205.SZ)发布公告称,公司收到武汉市公安局送达的《立案告知书》,公...
“玩”出更多花样——“六一”礼... 能交流、讲故事的毛绒玩偶,融入中国文化、科技元素的拼插积木,电影《哪吒2》衍生开发的各类公仔……“六...
5月十大牛股出炉:中邮科技逾1... 截至5月30日收盘,沪指月内累计涨2.09%,深证成指累计涨1.42%,创业板指累计涨2.32%。在...
恒生指数止步周线七连阳,IPO... 南方财经全媒体记者 袁思杰 实习生武桐羽 香港报道上周(5月26日-5月30日),港股震荡回调,主要...
新势力车企5月放榜:零跑汽车登... 近期,国内多家主流自主汽车企业纷纷发布了5月份的销售数据。造车新势力5月交付成绩也出炉,第一名依然是...
最新!2025新势力5月销量出... 5月新势力表现如何?2025年5月的销售周期刚刚过去,不少造车新势力厂商的销量数据,已经新鲜出炉。数...
两家A股公司,收终止上市决定 又有两家A股上市公司收到股票终止上市决定,6月10日进入退市整理期。 上述自律监管决定书指出,因2...
重磅,事关教育强国,主力提前埋... 数据是个宝数据宝投资少烦恼这些产业的景气度处于上升期。《求是》杂志发表文章《加快建设教育强国》6月1...
阳光诺和“二刷”收购 80后富... 《投资者网》蔡俊时隔2年后,阳光诺和(688621.SH,下称“公司”)再拟收购同一个资产。实际上,...