2010-11-01 17 views
1

Je suis actuellement en train de construire un moteur intranet pour un projet que je suis en train de réaliser, et je voudrais gagner un peu de temps en Générer des images d'en-tête à partir de code lorsque cela est possible, cependant, je voudrais qu'il corresponde à notre image de concept.Créer une image avec ombre portée sur du texte par programmation dans VB.NET

Ce que je voudrais réaliser est ci-dessous:

Some Text

Mon problème est que je n'ai pas la moindre comment créer ce à partir du code. Je peux faire les bases absolues, mais c'est à peu près tout.

Je commence à tomber quand il s'agit de l'arrière-plan dégradé et l'ombre portée sur le texte. Je peux m'en sortir en positionnant le texte sur l'image d'en-tête la plus grande, donc s'il n'est pas possible de générer le gradient exact que j'ai ici, alors j'ai un travail pour ça, mais ce que je veux vraiment, c'est le texte et laissez tomber l'ombre.

Je dirais qu'il est sûr de supposer que pour utiliser une police «non standard», je devrais simplement l'installer sur le serveur Web?

Merci pour toute aide à l'avance.

Répondre

3

Voici le code pour effectuer la tâche mais pour WinForms. Il ne devrait pas être difficile de l'appliquer à un serveur 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 

Le code ci-dessus dessine directement sur le formulaire. Si vous souhaitez attirer une image au lieu, modifiez le code comme suit:

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 

Et assurez-vous d'utiliser bmpRect au lieu de Me.ClientSize. Je souhaite que cela fonctionne car il s'agit entièrement de WinForms.

+0

Si je décidais de ne pas inclure l'arrière-plan sur l'image, est-ce que je pourrais rendre l'image du texte transparente? – LiamGu

+0

Modifier bitmap bitmap déclarer la ligne à 'Dim bmp comme nouveau bitmap (200,200, Imaging.PixelFormat.Format32bppArgb)' et ignorer le code de dessin en arrière-plan. –