GDI + disegna lettere raggruppato insieme
-
26-10-2019 - |
Domanda
Mi sento come ho letto una domanda simile a questo, ma io non riesco a trovarlo, quindi si prega di chiudere se duplicato.
Sto cercando di disegnare il testo con Graphics::DrawString
con un font a spaziatura fissa (Consolas). Tuttavia, quando disegno del testo, le lettere non sono distribuiti uniformemente. Ecco come si presenta:
Come si può vedere, le lettere sono raggruppati in gruppi di due e tre. Ho letto questo articolo e pensavo di aver preso misure adeguate per evitare esso utilizzando StringFormat::GenericTypographic
, ma apparentemente no. Sono anche utilizzando TextRenderingHintClearTypeGridFit
perché tutti gli altri guardano come spazzatura (e non c'è TextRenderingHintClearType
senza la parte GridFit
).
Come posso disegnare il testo, come tutti gli altri programmi che disegnano il testo con un font a spaziatura fissa in modo che sembra giusto?
Soluzione
Il problema è che GDI + utilizza un diverso (e da tempo abbandonato) sistema di elaborazione del testo. A partire da .NET Framework 2.0, Microsoft ha cambiato tutti i controlli di utilizzare effettivamente GDI per il rendering del testo, piuttosto che GDI +. rendering del testo in GDI è con accelerazione hardware, e ha continuato a ottenere miglioramenti con il rendering dei caratteri, Uniscribe, legature. rendering del testo in GDI + non è con accelerazione hardware, e non ricevendo alcuna correzioni o miglioramenti.
GDI può anche disegnare anti-alias, uso o CLEARTYPE_QUALITY ANTIALIASED_QUALITY.
Ecco un confronto tra
- GDI + (
Graphics.DrawString
) - GDI (
TextRenderer.DrawText
)