现在的位置: 首页 > 综合 > 正文

用GDI+使文字轻松旋转

2013年01月11日 ⁄ 综合 ⁄ 共 1426字 ⁄ 字号 评论关闭
用GDI+使文字轻松旋转



下载本文代码
见资源

在老式的Windows图形设备接口中制作旋转文字会是一件痛苦费力的工作,但在.NET中它会变得很简单。
by Bill Wagner

图1.
图1.在.NET中旋转文字

还记得在典型的Windows程序中用GDI(一种老式的图形设备API)来实现文字旋转是件多么麻烦的事吗?首先你得设置旋转字体 - 它只能在几种平台下实现。而当你想要将文字居中显示的时候会更麻烦,因为显示该段文字大小的函数对旋转字体不起作用。你必须将文字水平放置,再测量其大小,然后建一个新的旋转字体,最后把它画出来。

使用GDI+会大大地简化操作过程。Microsoft在新的图形设备接口实现中创建了一种一致的图形模型,它通过一套C++类来实现。

我写了一个简单的例子来说明用GDI+实现文字旋转是多么地容易。在例子中我把文字画在窗体的中间位置,它能够以任何角度进行旋转。GDI+中的两个特性使绘制过程变得简单:图形平移(graphics translations)和图形旋转(graphics rotations)。

要将文字居中显示,只需转换坐标系(coordinates)使原点(origin)置于窗体的中间位置:

Size sz = MyWindow.Size;
Point Middle = new Point (sz.Width / 2, 
   sz.Height / 2);
e.Graphics.TranslateTransform 
   (Middle.X, Middle.Y);

通过继续变换来实现简单的旋转:

e.Graphics.RotateTransform (_angle);

当位置调整好以后,你就可以绘制文字了:

StringFormat format = new StringFormat 
   (StringFormatFlags.NoClip);
format.Alignment = 
   StringAlignment.Center;
format.LineAlignment = 
   StringAlignment.Center;
e.Graphics.DrawString 
   ("A simple TextString ", f, 
   Brushes.Black, 0, 0, format);

StringFormat对象控制着该字符串的对齐方式。这里,我选中了居中位置。

现在你能够以任何角度旋转字体了。在运行这段代码时,你会发现当它旋转到正45度角的时候,看起来却像是负45度角(见图1)。记住在GDI中标准的坐标系是y坐标向下的,在这种坐标系上,正角度的旋转是沿水平轴顺时针旋转的。

从这个例子可以看出,使用.NET的GDI+ API使得图形处理变得更简单更一致。点此下载源代码并修改转换角度。你会发现你能够以任何角度在任何平台绘制文字,这同样适用于以任何角度旋转任何其他形状的图形。


关于作者:

Bill Wagner是SRT Solutions的Windows技术专家。他是Visual Studio Magazine的撰稿编辑,也是The C# Core Language Little Black Book一书的作者,这是一本C#开发人员的高级参考书。在16年的软件开发实践中,Bill在许多项目中都是重要的开发人员。他曾为工程和商务应用程序、桌面和Web环境开发过软件。他在2D和3D图象和多媒体软件方面也很有经验,包括为The Lion King Animated Storybook开发的视频回放引擎。他的联系方式是wwagner@SRTSolutions.com

抱歉!评论已关闭.