艺术字效果
- 格式:doc
- 大小:32.00 KB
- 文档页数:2
用ASP.NET在网页上实现艺术字效果
吴俊 《软件报》 2007.07.09
$T用过Word艺术字功能的人都知道,即使自己没有任何的美术功底,也可以在几分钟内制作出精彩的文字特效。与此
相类似,在ASP.NET平台上也可以借助GDI+的功能实现同样的艺术字效 果。文中用到的GDI+技术在《软件报》刊登的《用
GDI+构建ASP.NET中的动态统计图表》中有所涉及,请不熟悉此技术的读者朋友自行参考上述文章。 今天我们就来学习几
款精彩的艺术字效果的实现。$E 制作渐变文字效果 由于GDI+本身提供了绘制渐变效果的 LinearGradientBrush笔刷对象,
我们只需要 在创建LinearGradientBrush对象时指定渐 变效果的颜色和方向,就可以绘制出所需的 效果了。下面就是具体实
现的示例代码: Private Function DrawBrushText(ByVal txt As String) As Bitmap Dim textSize As SizeF Dim g As Graphics
Dim myBrush As Brush Dim gradientRectangle As RectangleF Dim txtFont As New Font(fontName, fontsize,
FontStyle.Bold) Dim bmp As Bitmap=New Bitmap(mW idth, mHeight) ’从图片框创建Graphics对象并清除背景色。 g
=Graphics. Fromlmage(bmp) g. Clear (Color. White) ’设置图像质量参数 g.InterpolationMode=Drawing2D.Interpola
tionMode. HighQualityBicubic g.SmoothingMode=Drawing2D.Smoot hingMode. HighQuality g. Compositing Quality =
Drawing2D. Co mpositingQuality. HighQuality ’查找绘制示例文本所必需的Size。 textSize=g. MeasureString(txt,txtFont) ’
创建水平渐变LinearGradientBrush。 gradientRectangle=New RectangleF (New PointF(0,0), textSize) myBrush
=New LinearGradientBrush (gradientRectangle, Color.Red,_ Color. Yellow, LinearGradientMode. Horizontal) ’绘制
文本。 g. DrawString(txt, txtFont, myBrush,_ (mWidth-textSize. Width)/2,_ (mHeight-textSize. Height)/2)
myBrush. Dispose()’释放资源 g. Dispose() Return bmp End Function 需要说明的是,考虑到大多数情况下,绘 制的文
字位置要同时保持水平和垂直方向的 居中对齐。因此在绘制文字效果前,先使用了 Graphics对象MeasureString方法,由此
得 到表示文字大小的Size对象,之后在绘制 时,再通过画布和文字的尺寸计算出绘制的 起始坐标。 绘制阴影效果 现实生
活中,阴影是由不同角度的光照 投射到物体上产生的,并且会随着角度的差 异发生改变。也就是说,阴影可以看成是一个 物
体的影像在不同角度上的复制效果。对应 到阴影效果的艺术字就是要实现在相对原点 偏移一定距离后复制一份同样的文字。
为突 出效果复制的文字通常会使用灰色或黑色。 上述过程实现部分部分: textSize=g.MeasureString(txt,txtFont) ’一次
获得位置并以此来消除多余的计算。 xLocation=(mWidth-textSize.Width)/2 yLocation=(mHeight-textSize.Height)
/2 ’首先绘制阴影。 g. DrawString (txt, txtFont,shadowBrush,_ xLocation+5,yLocation+5) g.DrawStdng(txt,txtFont,
txtBrush, xLoca- tion,yLocation)’在阴影之上绘制主文本。 由于,在GDI+绘图过程中会按照先后 顺序依次覆盖先前绘
制的图案,因此必须先 绘制阴影效果,然后再绘制实际的文字中。 绘制立体效果 立体效果的艺术字和阴影效果非常相 似,
只不过立体效果的艺术字是一个连续的 绘制过程,就是在一定的偏移距离内,以一个 象素为单位重复绘制,从而构成一个完
整的 立体效果。同样的,绘制过程也需要先从最远 端开始,最后绘制实际的现实文本。 该过程具体实现部分代码如下: ’找
出绘制示例文本所需要的大小 textSize=g. MeasureString(txt,txtFont) xLocation=(mWidth-textSize.Width)/2 yLocation
=(mHeight-textSize. Height)/2 For i=8 To 0 Step-1 g.DrawShing(txt,txtFont,backgroundBrush,_ xLocation-i,
yLdcation+i) Next ’在黑色文本之上绘制主文本 g. DrawStdng(txt,txtFont, txtBrush, xLocation,yLocation) 绘制倒
影效果 与之前三种艺术字效果相比,倒影效果 要复杂一些。由于倒影效果是相对于原文字 实现翻转,为了保证文字翻转时不
影响到背 景图片,首先需要通过Graphics对象的 TranslateTransform方法将坐标原点移到计 算出来的文字尺寸的左上角顶
点。接下来,考 虑到文本翻转,除了计算文本自身的尺寸外, 还需要计算包括文字各行之间的行间距和字 体上、下边距在内
的其他尺寸,并依照得到的 数值计算出正文和反射文字绘制的坐标。上 述过程的实例部分代码如下: g.TranslateTransform
(xLocation,yLocation) Dim lineAscent As Integer Dim lineSpacing As Integer Dim lineHeight As Single lineAscent=txtFont.
FontFamily. GetCel IAscent(txtFont.Style) lineSpacing=txtFont. FontFamily. GetLi neSpacing(txtFont. Style) lineHeight
=txtFont. GetHeight(g) textHeight = lineHeight*lineAscent/ lineSpacing Dim lineDescent As Integer’用于反射下行字
符 lineDescent = txtFont. FontFamily. GetC ellDescent(txtFont.Style) textHeight=lineHeight*(lineAscent +
lineDescent)/lineSpacing g. DrawString(txt, txtFont, bdBrush, 0, -textHeight)’绘制主文本文字 ’绘制反射文字,
g. ScaleTransform(1,-1.OF)’仅在Y方向反射 g. DrawString(txt, txtFont, background- Brush,0,-textHeight)