Basislinie eines Textes ermitteln

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Hermann.

    Basislinie eines Textes ermitteln

    Hi Leute,
    wie kann man die Basislinie eines Textes ermitteln?
    Ich habe also einen Text (als String) und eine Font gegeben, und möchte die Basislinie ermitteln.
    Die Unterkante des Strings ist, denke ich, zu einfach, da z.B.: das kleine g, oder allgemeiner, Buchstaben mit Unterlänge mindestens auf, wenn nicht sogar unter der Basislinie sind.
    Ich hoffe, ihr könnt mir helfen,
    mfG,
    Hermann
    Hi,
    entschuldige bitte, dass ich so wenig geschrieben habe, aber das, was du gepostet hast, hat es ganz gut getroffen: Ich möchte diese Basislinie, welche ja auch zum Ausrichten von Buttons, Labels, ... benutzt wird, errechnen.
    Bin jetzt schon so weit, dass ich die Unerlänge und Oberlänge habe, aber, wider erwarten, funktioniert folgende Rechnung nicht:

    VB.NET-Quellcode

    1. Baseline = Gesamthöhe - Unterlänge

    Die Linie ist dann nähmlich genau in der Mitte :( und nicht, wie erwartet, unten drunter.
    Ich probiere morgen mal folgendes, ist mir grad erst eingefallen:

    VB.NET-Quellcode

    1. Baseline = Oberlänge

    Oder ist hier der Ansatz falsch?
    Du könntest mit MeasureCharacterRanges() die Region.Height Average / 2 nehmen.

    Ich habe 0 Ahnung ob das funktioniert ;)

    VB.NET-Quellcode

    1. 'Nur für MeasureString/CharacterRanges() !!!
    2. Using G = Label.CreateGraphics()
    3. Dim B() = G.MeasureCharacterRanges("ABCDEFGHI", Label.Font, Label.DisplayRectangle, StringFormat.GenericDefault)
    4. Dim AverageH As Single = B.Average(Function(x) x.GetBounds(G).Height)
    5. 'Form-Koordinaten Basis-Linie
    6. Dim MiddleY = Label.Location.Y + AverageH
    7. [..].DrawLine(Pens.Red,Label.Location.x,MiddleY,Label.Bounds.Right,MiddleY)
    8. End Using
    /nicht getestet
    Habe mal etwas rumgetüftelt. Die Linie, die du haben willst ist nicht "Oberlänge" relativ zum Zeichnen-Ursprung verschoben, sondern ungefähr um den Wert "Zeilenabstand". Je nach Schriftart hat das mal ein wenig vorbei, das ist aber denke ich normal und sollte garnicht auffallen. Hier mal eine etwas abgeänderte Skizze:



    lg^^