在VB.NET中以编程方式在文本上创建带阴影的图像

时间:2010-11-01 15:29:18

标签: asp.net vb.net .net-4.0 image-manipulation

我正在为我目前正在进行的项目构建内部网引擎,我想通过尽可能从代码生成标题图像来节省一些时间,但是,我会喜欢它来匹配我们的概念形象。

我想要实现的目标如下:

Some Text

我的问题是我不是最简单的如何从代码创建它。我可以做绝对的基础知识,但那就是它。

当谈到渐变背景和文本上的阴影时,我开始堕落。我可以将文本定位在较大的标题图像上,所以如果不能生成我所拥有的精确渐变,那么我有一个解决方法,但我真正想要实现的是带有字体的文本和投影。

我说假设使用“非标准”字体是安全的,我只需要在网络服务器上安装它吗?

感谢您提前提供任何帮助。

1 个答案:

答案 0 :(得分:4)

这是执行任务的代码,但它适用于WinForms。将它应用到Web服务器应该不难:

Imports System.Drawing
Imports System.Drawing.Drawing2D
Imports System.windows.Forms

Public Class Form1

    Sub Form1_Paint(ByVal sender As Object, _
                    ByVal e As PaintEventArgs) Handles MyBase.Paint

        'g is the graphics context used to do the drawing.'
        'gp is the path used to draw the circular gradient background'
        'f is a generic font for drawing'

        Using g = e.Graphics, gp As New GraphicsPath(), _
              f As New Font(FontFamily.GenericSansSerif, 20, FontStyle.Bold)

            'add the ellipse which will be used for the '
            'circular gradient to the graphics path '
            gp.AddEllipse(Me.ClientRectangle)

            'then create a path gradient brush from the graphics path '
            'created earlier to do the drawing on the background      '

            Using pgb As New PathGradientBrush(gp)
                'set the center colour '
                pgb.CenterColor = Color.White
                'and then make all the colours around it a different colour '
                pgb.SurroundColors = New Color() {Color.LightSteelBlue}

                'fill a rectangle with the border colour of the gradient brush'
                g.FillRectangle(Brushes.LightSteelBlue, Me.ClientRectangle)
                'and then draw the gradient on top'
                g.FillRectangle(pgb, Me.ClientRectangle)

                'The secret to shadowed text is that the shadow is drawn first'
                'and it is usually offset to the lower right of the main text '
                'so we draw the shadow with a shade of grey                   '
                g.DrawString("SOME TEXT", f, Brushes.Gray, 12, 12)
                'after which we draw the text itself'
                g.DrawString("SOME TEXT", f, Brushes.Black, 10, 10)
            End Using
        End Using
    End Sub
End Class

上面的代码直接绘制到表单上。 如果您想要绘制图像,请按如下所示修改代码:

Function GetImage(....) As Image
    Dim bmp As New Bitmap(200,200) 'you may use any size here'
    Dim bmpRect As New Rectangle(Point.Empty, bmp.Size)

    Using g = Graphics.FromImage(bmp), ...
        .....
    End Using

    return bmp
End Sub

请务必使用bmpRect代替Me.ClientSize

我希望这有效,因为这完全是WinForms。