Drawing, String Horizontal

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von RushDen.

    Drawing, String Horizontal

    Hallo

    mit diesem Code zeichne ich einen String in eine Grafik ein.

    VB.NET-Quellcode

    1. Dim stringFormat As New StringFormat()
    2. stringFormat.FormatFlags = StringFormatFlags.DirectionVertical
    3. g.DrawString("Druck", FA10n, Brushes.Black, 0, 300, stringFormat)


    Nun ist es aber so, dass er links ausgerichtet ist - ich meine unten = links.

    Kann man den Text auch so ausrichten, dass unten = rechts ?

    Gruß
    Michl
    Glaube du musst die Länge des Strings berechnen, dann eben berechnen, wo der String Starten muss. Verstehst du was ich meine ?
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Also du willst einen String rechtsbündig in einer Grafik, so habe ich das verstanden. Für dies gibt es keine Funktion. Du musst dir anhand der String Länge, berechnen wo dein String starten soll. Ein beispiel, die String Länge ist 150px und die höhe 22px

    VB.NET-Quellcode

    1. Dim strWidth as integer = 150
    2. Dim strHeight as Integer = 22
    3. Dim bmp as new Bitmap(1048,1048)
    4. Dim rect as new Rectangle(bmp.Width - strWidth,bmp.Height - strHeight,strWidth,strHeight)
    5. With Graphics.FromImage(bmp)
    6. .DrawString("Druck", FA10n, Brushes.Black,rect)
    7. End With
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Mach dir einfach ein "Custom Label". Hier ein Beispiel wie das mit dem "gedrehten" DrawString im Control_Paint funktioniert.

    VB.NET-Quellcode

    1. Public Class RotateLabel
    2. Inherits Control
    3. Public Sub New()
    4. Me.Size = New Size(25, 100)
    5. End Sub
    6. Private Sub Me_Resize(sender As Object, e As EventArgs) Handles Me.Resize
    7. Invalidate()
    8. End Sub
    9. Protected Overrides Sub OnPaint(e As PaintEventArgs)
    10. MyBase.OnPaint(e)
    11. With e.Graphics
    12. .FillRectangle(New SolidBrush(BackColor), 0, 0, Width, Height)
    13. .TranslateTransform(0, Height)
    14. .RotateTransform(270) 'Grad der drehung
    15. .DrawString(Text, Font, New SolidBrush(ForeColor), 0, 0)
    16. End With
    17. End Sub
    18. Private _text As String
    19. Public Overrides Property Text As String
    20. Get
    21. Return _text
    22. End Get
    23. Set(ByVal value As String)
    24. _text = value
    25. Invalidate()
    26. End Set
    27. End Property
    28. End Class
    @Derfuhr: Nicht Optimal! Er will auf ein Bild zeichnen... was bringt ihm da ein Control?!
    Ich Antworte nach bestem Wissen und Gewissen. Ich übernehme keine Garantie für die Richtigkeit oder Fehlerfreiheit meiner Texte.


    Ich konnte dir helfen?
    - Das ist schön :) Ich würde mich über ein "Hilfreich" freuen ^^
    Ups, liegt am Koffeinmangel :whistling: . Dann halt eine Function die das macht.

    VB.NET-Quellcode

    1. Private Function DrawStringOnImage(bmp As Bitmap, col As Color, str As String) As Bitmap
    2. Dim tmpBmp As New Bitmap(bmp.Width, bmp.Height)
    3. Using G As Graphics = Graphics.FromImage(tmpBmp)
    4. G.DrawImage(bmp, 0, 0)
    5. G.TranslateTransform(0, tmpBmp.Height)
    6. G.RotateTransform(270) 'Grad der drehung
    7. G.DrawString(str, New Font("Microsof Sans Serif", 25), New SolidBrush(col), tmpBmp.Width \ 2, tmpBmp.Height \ 2)
    8. End Using
    9. Return tmpBmp
    10. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Derfuhr“ ()

    Derfuhr schrieb:

    Dann halt eine Function die das macht.

    Menno :D !
    Kaum war ich mit Meiner fertig, haste das Ding schon reingeballert.
    Egal - doppelt hält besser :)

    VB.NET-Quellcode

    1. ''' <summary>
    2. ''' Vertikaler String in Bild
    3. ''' </summary>
    4. ''' <param name="Text"></param>
    5. ''' <param name="Breite"></param>
    6. ''' <param name="Hoehe"></param>
    7. ''' <param name="Schrift"></param>
    8. ''' <param name="Farbe"></param>
    9. ''' <param name="PosX"></param>
    10. ''' <param name="PosY"></param>
    11. ''' <returns></returns>
    12. ''' <remarks></remarks>
    13. Public Function DrawVerticalString(Text As String, Breite As Integer, Hoehe As Integer, Schrift As Font, Farbe As Brush, PosX As Integer, PosY As Integer) As Bitmap
    14. Dim bm As New Bitmap(Breite, Hoehe)
    15. Using g = Graphics.FromImage(bm)
    16. g.TranslateTransform(0, bm.Height)
    17. g.RotateTransform(270)
    18. g.DrawString(Text, Schrift, Farbe, PosX, PosY)
    19. Return bm
    20. End Using
    21. End Function

    Beispielaufruf:

    VB.NET-Quellcode

    1. PictureBox1.Image = DrawVerticalString("Druck", 500, 500, New Font("Arial", 32), Brushes.Black, 100, 100)

    LG,
    Bruno