2013-04-04 18 views
8

Sto usando la funzione GraphicsPath.AddString(), ma disegna il testo con un po 'di spazio attorno al testo. Qualche idea su come disegnare la stringa senza quel padding, solo i percorsi del testo?Come disegnare una stringa senza riempimento

Il mio codice è simile a questo:

GraphicsPath gp = new GraphicsPath(); 

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

g.DrawPath(pen, gp); 
+2

Cosa hai impostato in FormatFlags nel parametro StringFormat? – plinth

+0

grazie al plinto per la risposta, lo StringFromat è _format = StringFormat.GenericDefault; c'è qualcosa che può risolvere il problema nelle bandiere? – MHMr

+0

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

risposta

2

Quello che sta accadendo è il sotto il cofano che probabilmente sta usando Graphics.MeasureString(), dalla documentazione:

GDI + aggiunge una piccola quantità (1/6 em) a ciascuna estremità di ogni stringa visualizzata. Questo 1/6 em consente> per i glifi con estremità sporgenti (come la 'f' in corsivo), e fornisce anche GDI + una piccola quantità di margine per facilitare l'espansione della griglia.

L'azione predefinita di DrawString lavorerà contro di voi in visualizzazione corre adiacente:

In primo luogo lo StringFormat predefinito aggiunge un extra di 1/6 em a ciascuna estremità di ogni uscita; In secondo luogo, quando le larghezze grigliate sono inferiori a quelle progettate, la stringa è in grado di contrarre fino a un em. Per evitare questi problemi:

Passare sempre MeasureString e DrawString a StringFormat in base a typographic> StringFormat (GenericTypographic). Impostare Graphics TextRenderingHint su TextRenderingHintAntiAlias. Questo metodo di rendering> utilizza il posizionamento degli glifo anti-aliasing e sub-pixel per evitare la necessità di eseguire il grid-fitting e> è quindi intrinsecamente indipendente dalla risoluzione.

Quindi sembra che si dovrebbe essere in grado di risolvere questo problema utilizzando il StringFormat corretto.