2013-04-04 15 views
8

Używam funkcji GraphicsPath.AddString(), ale rysuje tekst z małą ilością miejsca wokół tekstu. Każdy pomysł, jak narysować ciąg bez tego dopełnienia, tylko ścieżki tekstu?Jak narysować ciąg bez dopełnienia

Mój kod to tak:

GraphicsPath gp = new GraphicsPath(); 

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, 
    boundsRectangle, format); 

g.DrawPath(pen, gp); 
+2

Co ustawiłeś w FormatFlags w parametrze StringFormat? – plinth

+0

cokół za odpowiedź, StringFromat to _format = StringFormat.GenericDefault; czy coś może rozwiązać problem w flagach? – MHMr

+0

http://stackoverflow.com/questions/118686/measurestring-pads-the-text-on-the-left-and-the-right –

Odpowiedz

2

Co dzieje się to pod maską jest prawdopodobnie używając Graphics.MeasureString(), od dokumentacji:

GDI + dodaje niewielką ilość (1/6 em) do każdego końca każdego wyświetlanego łańcucha. Ta 1/6 em pozwala> na glify z wystającymi końcówkami (np. Kursywą "f"), a także daje GDI + niewielką ilość luzu, aby pomóc w rozszerzeniu dopasowania siatki.

Domyślna akcja sznurkiem będzie działać przeciwko tobie w wyświetlaniu sąsiednich tras:

pierwsze domyślny StringFormat dodaje dodatkowy 1/6 em na każdym końcu każdego wyjścia; Po drugie, gdy szerokości dopasowanej siatki są mniejsze niż zaprojektowane, ciąg może zawierać umowę o wartości aż do wartości em. Aby uniknąć takich problemów:

Zawsze przekazuj MeasureString i DrawString StringFormat na podstawie typograficznego> StringFormat (GenericTypographic). Ustaw Graphics TextRenderingHint na TextRenderingHintAntiAlias. Ta metoda renderowania używa antyaliasingu i sub-pikselowego pozycjonowania glifów, aby uniknąć konieczności dopasowywania siatki i> jest zatem z natury niezależna od rozdzielczości.

Wygląda na to, że powinieneś być w stanie to naprawić za pomocą poprawnego StringFormat.