15.3 绘制文字特效

  在Word中,文本编辑人员经常使用艺术字进行Word编辑和排版,艺术字在很大程度上丰富了排版功能和艺术效果,通过使用.NET Framework绘图类能够实现文字的艺术化效果从而丰富页面中的文本显示效果。

15.3.1 投影特效
  使用System.Drawing.Drawing2D和System.Drawing.Text能够进行文字投影特效。在制作文字投影特效前,首先需要使用命名空间System.Drawing.Drawing2D和System.Drawing.Text。在实现投影效果前,首先需要了解如何制作投影。
  投影特效的难度在于如何描述本体的影子。其实在画面上,影子是不可能像平常的描述一样呈现在图片上的,这也就是说,影子其实也是本体对象的另一种表现形式。首先,影子可以看作是本体的压缩和平移,在对本体进行压缩和平移后,从一定的角度上看就好像是本地的影子。其次,影子是没有颜色的,通常用灰色输出即可实现影子的效果。在制作投影特效时,需要使用到Matrix类,该类需要使用System.Drawing.Drawing2D和System.Drawing.Text命名空间,示例代码如下所示。
+展开
-C#
            using System.Drawing; //使用绘图类
            using System.Drawing.Drawing2D;//使用绘图类
            using System.Drawing.Text;

  引用了命名空间后,就可以使用相应的方法进行特效的制作,示例代码如下所示。
+展开
-C#
            Bitmap images = new Bitmap(600, 150); //创建Bitmap对象
            Graphics gr = Graphics.FromImage(images);//创建Graphics对象
            gr.Clear(Color.WhiteSmoke);//填充背景颜色
            gr.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;//设置文本输出质量
            gr.SmoothingMode = SmoothingMode.AntiAlias;
            Font newFont = new Font("宋体", 32);
            Matrix matrix = new Matrix();//执行投射 
            matrix.Shear(-1.5f, 0.0f);//执行缩放 
            matrix.Scale(1, 0.5f);//执行平移 
            matrix.Translate(130, 88);//执行坐标转换 
            gr.Transform = matrix;
            SolidBrush grayBrush = new SolidBrush(Color.Gray);
            SolidBrush colorBrush = new SolidBrush(Color.Red);
            string text = "ASP.NET 3.5开发大全"; //设置文字
            gr.DrawString(text, newFont, grayBrush, new PointF(0, 30));//绘制阴影
            gr.ResetTransform(); //图形变形
            gr.DrawString(text, newFont, colorBrush, new PointF(0, 40)); //绘制前景
            Response.ContentType = "image/jpeg"; //设置响应头,要不firefox会当做text/plain处理
            images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

  上述代码使用了Matrix类进行了倒影效果的实现,Matrix类封装表示几何变换的3 x 3仿射矩阵。Matrix类中常用的方法有:
1)Shear:通过预先计算比例向量,将指定的比例向量应用到此矩阵。
2)Scale:通过预先计算切变向量将指定的切变向量应用到此矩阵。
3)Translate:通过预先计算转换向量,将指定的转换向量应用到此矩阵。
  使用Matrix类能够进行对象的投射、缩放以及平移,并通过执行坐标转换呈现在图片中。作为投影特效,Matrix类通过将现有的对象进行转换、压缩、平移,并通过Graphics对象的DrawString方法进行输出,使之看上去向文字的投影效果一样,如图15-12所示。
实现文字的投影效果
图15-12 实现文字的投影效果

15.3.2 倒影特效
  在Photoshop中,可以很容易的实现倒影效果,通过GDI+同样也能够快捷的实现倒影效果。在实现倒影效果时,首先需要理清倒影是如何实现的,倒影同影子一样。在编程中,没有倒影的概念,其实倒影就是本体的另一种表现形式,与投影不同的是,投影是将本体进行压缩或拉伸,从一个角度来看成为影子的效果,而倒影其实就是本地的垂直旋转。
  在进行垂直旋转后,倒影通常情况下颜色要比本体要淡,这样才能真实的模拟倒影的效果,实现倒影效果示例代码如下所示。
+展开
-C#
            Brush shadowBrush = Brushes.LightBlue;//创建倒影笔刷
            Brush foreBrush = Brushes.Blue;//创建本体笔刷
            Font font = new Font("微软雅黑", Convert.ToInt16(40), FontStyle.Italic);//配置字体
            Bitmap images = new Bitmap(600, 150);
            Graphics gr = Graphics.FromImage(images);//创建Graphice
            gr.Clear(Color.WhiteSmoke);
            string text = "ASP.NET 3.5开发大全"; //设置文字
            SizeF size = gr.MeasureString(text, font);//设置矩形大小
            int posX = (600 - Convert.ToInt16(size.Width)) / 2;//设置平移坐标
            int posY = (150 - Convert.ToInt16(size.Height)) / 2; //设置平移坐标
            gr.TranslateTransform(posX, posY);//执行转换
            GraphicsState state = gr.Save();//图形保存
            gr.ScaleTransform(1, -1.0F); //图形变换
            gr.DrawString(text, font, shadowBrush, 0, -120);//输出倒影
            gr.Restore(state);//图形重置
            gr.DrawString(text, font, foreBrush, 0, 0);//输出本体
            Response.ContentType = "image/jpeg"; //设置响应头,要不firefox会当做text/plain处理
            images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

  倒影效果相对与投影效果来说比较简单,倒影效果只是将Graphics对象的矩形大小进行转换,然后通过平移操作进行翻转操作,翻转完成后直接输出倒影,而又因为倒影输出的文字比本体输出的文字要淡,看上去很像倒影的效果,如图15-13所示。
倒影效果
图15-13 倒影效果

15.3.3 旋转特效
  通过GDI+能够通过非常简单的代码实现非常酷的效果,例如旋转特效就是一个非常酷的效果,在进行旋转特效编写前,首先需要了解如何实现旋转特效的。如果要实现旋转特效,首先需要获取一段文字,该文字进行通过平移坐标原点进行变换,当需要实现旋转时,则通过循环不停的实现旋转平移,示例代码如下所示。
+展开
-C#
            Bitmap images = new Bitmap(400, 400); //创建Bitmap对象
            Graphics gr = Graphics.FromImage(images);//创建绘图对象
            gr.Clear(Color.WhiteSmoke);//格式化画布
            gr.SmoothingMode = SmoothingMode.AntiAlias;//设置边缘
            for (int i = 0; i <= 360; i += 20)//循环旋转
            {
                gr.TranslateTransform(200, 200);//变形
                gr.RotateTransform(i);//按角度变形
                Brush brush = Brushes.Red;//创建画笔
                Font font = new Font("微软雅黑", 12);//创建文字
                gr.DrawString("ASP.NET 3.5 开发大全 ", font, brush, 0, 0); //绘制文字
                gr.ResetTransform();//重置变形
            }
            Response.ContentType = "image/jpeg"; //设置响应头,要不firefox会当做text/plain处理
            images.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);

上述代码运行后如图15-14和图15-15所示。
旋转特效
图15-14 旋转特效
旋转半周
图15-15 旋转半周
  旋转特效就是按照循环不停的将本体进行循环并执行输出,在执行循环的过程中,因为圆的角度是360度的,所以循环时也需要循环360度,如果循环不被等于360,则会出现半周的情况,如图15-15所示。

加支付宝好友偷能量挖...


评论(1)网络
阅读(193)喜欢(0)Asp.Net/C#/WCF