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:

entrare descrizione dell'immagine qui

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?

È stato utile?

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)

entrare descrizione dell'immagine qui

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top