Создать изображение с тенью на тексте программно в VB.NET - PullRequest
1 голос
/ 01 ноября 2010

В настоящее время я создаю движок интрасети для проекта, который у меня сейчас есть, и я хотел бы сэкономить немного времени, генерируя изображения заголовков из кода, где это возможно, однако я бынравится, чтобы соответствовать нашему концептуальному изображению.

Чего я хотел бы достичь, это ниже:

Some Text

Моя проблема в том, что я не самый слабый, каксоздать это из кода.Я могу сделать абсолютные основы, но это все.

Я начинаю падать, когда дело доходит до градиентного фона и тени на тексте.Я могу с легкостью расположить текст на большом изображении заголовка, поэтому, если невозможно сгенерировать точный градиент, который у меня есть, у меня есть обходной путь, но я действительно хочу добиться текста с шрифтом.и отбрасываю тень.

Я бы сказал, что можно предположить, что для использования «нестандартного» шрифта мне просто нужно установить его на веб-сервере?

Спасибо залюбая помощь заранее.

1 Ответ

4 голосов
/ 01 ноября 2010

Вот код для выполнения задачи, но он предназначен для WinForms.Не должно быть сложным применить его к веб-серверу:

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.

...