用GDI+使文字轻松旋转

用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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值