介绍
这篇文章主要介绍了c#如何使用GDI +实现添加中心旋转(任意角度)的文字,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。
<强>需求强>
需求是要实现给图片添加任意角度旋转的文字,文字的旋转中心要是在文字区域中央,就像CSS的旋转函数一样的效果。如下:
<李>
把画板(图形对象)原点平移到矩形中心位置(x, y)
李> <李>在(x, y)位置绕原点旋转画板N度
李> <李>画板退回(- x - y)的距离
李>还是看不懂的同学看下面的图应该就明白了
//,//摘要: ,//,沿,point 参数中指定的点并通过预先计算该旋转,来顺时针旋转此,System.Drawing.Drawing2D.Matrix。 ,//,//参数: ,//角度: ,//,旋转角度(范围)(单位:度)。 ,//,//://大敌;,一个,System.Drawing.PointF,表示旋转中心。 ,[TargetedPatchingOptOut (“Performance  critical 用inline 却;能够type of method across NGen image boundaries")) ,public void  RotateAt (float 角,,PointF 点),
图形类属的变换性返回的就是矩阵对象,该属性可以,集。因此我们先获取原来的画板的矩阵,然后使用RotateAt方法旋转该矩阵,再把旋转后的矩阵赋值给画板就好了。
<强>具体实现强>
<强>添加任意角度文字方法强>
///, & lt; summary>///,图片添加任意角度文字(文字旋转是中心旋转,角度顺时针为正)///,& lt;/summary>///,& lt; param name=癷mgPath"在图片路径& lt;/param>///,& lt; param name=發ocationLeftTop"在文字左上角定位(x1, y1) & lt;/param>///,& lt; param name=癴ontSize"在字体大小,单位为像素& lt;/param>///,& lt; param name=皌ext"在文字内容& lt;/param>///,& lt; param name=癮ngle"在文字旋转角度& lt;/param>///,& lt; param name=癴ontName"在字体名称& lt;/param>///,& lt; returns>添加文字后的位图对象& lt;/returns> public Bitmap  AddText (string imgPath, string locationLeftTop,, int 字形大小,,string 文本,int angle =, 0,, string fontName =,“华文行楷“) { ,Image img =, Image.FromFile (imgPath); ,int width =, img.Width; ,int height =, img.Height; ,Bitmap bmp =, new 位图(宽度,高度); ,Graphics Graphics =, Graphics.FromImage (bmp); ,//画底图 ,graphics.DrawImage (img, 0, 0,,宽度,高度); ,Font Font =, new 字体(字体名,字形大小,,GraphicsUnit.Pixel); ,SizeF sf =, graphics.MeasureString(文本,字体);,//,计算出来文字所占矩形区域 ,//左上角定位 ,string[]的位置=,locationLeftTop.Split (& # 39; & # 39;); ,float x1 =, float.Parse(位置[0]); ,float y1 =, float.Parse(位置[1]); ,//进行文字旋转的角度定位 ,if (angle !=, 0) ,{ # region 才能法一:TranslateTransform平移,+,RotateTransform旋转/*,才能 ,,*,注意: ,,*,Graphics.RotateTransform的旋转是以图形对象的左上角为原点,旋转整个画板的。 ,,*,同时x, y坐标轴也会跟着旋转。即旋转后的x, y轴依然与矩形的边平行 ,,*,而Graphics.TranslateTransform方法,是沿着x, y轴平移的 ,,*,因此分三步可以实现中心旋转 ,,*,1。把画板(图形对象)平移到旋转中心 ,,*,2。旋转画板 ,,*,3。把画板平移退回相同的距离(此时的x, y轴仍然是与旋转后的矩形平行的) ,,*/////,才能把画板的原点(默认是左上角)定位移到文字中心//graphics.TranslateTransform才能(x1 +, sf.Width /, 2, y1 +, sf.Height /, 2);////,才能旋转画板//graphics.RotateTransform才能(角);////,才能回退画板x, y轴移动过的距离//graphics.TranslateTransform才能(- (+ x1 sf.Width /, 2),,,(时间+ y1 sf.Height /, 2)); # endregion才能 # region 才能法二:矩阵旋转 Matrix 才能;Matrix =, graphics.Transform; matrix.RotateAt才能(角,new PointF(时间+ x1 sf.Width /, 2, y1 +, sf.Height /, 2)); 时间=graphics.Transform 才能;矩阵; # endregion才能 ,} ,//写上自定义角度的文字 ,graphics.DrawString(字体,文本,还以为;new  SolidBrush (Color.Black), x1, y1); ,graphics.Dispose (); ,img.Dispose (); ,return 骨形态发生蛋白; }c#如何使用GDI +实现添加中心旋转(任意角度)的文字