2012-10-30 16 views
5

Sto sviluppando un'applicazione WPF ma ho notato che in certe dimensioni dei caratteri il testo non viene visualizzato correttamente come gli esempi visualizzati in Pannello di controllo -> Caratteri. Sto utilizzando font Segoe UI di grandi dimensioni (FontSize="36") e l'effetto è più evidente sulle linee verticali, ad es. una lettera "U" potrebbe essere leggermente più spessa su un lato rispetto all'altro. ).Qualità font WPF

La qualità del carattere migliora con determinate dimensioni dei caratteri, ad es. FontSize="48" (che credo sia l'equivalente di 36pt), ma l'utilizzo di un numero limitato di dimensioni dei caratteri non è sempre pratico.

posso migliorare la qualità dei caratteri, applicando le seguenti proprietà al TextBlock: -

TextOptions.TextFormattingMode="Display" TextOptions.TextRenderingMode="ClearType" 

Dato il miglioramento della qualità Sono curioso di sapere perché WPF non fa questo per tutto il testo, o è dovuto alle prestazioni? Stavo pensando di creare uno stile globale per applicarlo a tutti i controlli, o questo causerà un problema?

(Ho provato a caricare uno screenshot ma SO è necessario memorizzare le immagini con una bassa qualità e non è possibile distinguere il problema del carattere).

+0

Noi non (Imgur non) memorizzare le immagini con una bassa qualità. Se si salva un PNG e lo si carica, non diventerà un JPEG. Puoi anche collegare l'immagine a dimensione intera da quella in scala ridotta qui. – BoltClock

+0

Hai provato questo con altri tipi di carattere? – MisterMetaphor

+4

Credo che questo problema, compreso il motivo per cui il rendering di font WPF predefinito sia "sfocato", è adeguatamente risposto in http://stackoverflow.com/questions/190344/wpf-blurry-fonts-problem-solutions –

risposta

7

Questo è il blog post che il team di testo WPF ha scritto su questa funzione.

Nota per il TextFormattingMode:

Ideale metriche del testo ideali sono le metriche, che sono stati utilizzati per formato testo dopo l'introduzione di WPF. Queste metriche risultano nelle forme di glifi mantenendo alta fedeltà con i loro contorni dal file di carattere . Il posizionamento finale dei glifi non viene preso in considerazione quando crea bitmap di glifo o posiziona i glifi relativi ad altri .

Display In questa nuova modalità di formattazione, WPF utilizza le metriche di testo compatibili GDI . Ciò garantisce che ogni glifo abbia una larghezza di multipli di pixel interi ed è posizionato su pixel interi. L'uso delle metriche di testo compatibili con GET significa anche che le dimensioni dei glifi e l'interruzione della linea sono simili ai framework basati su GDI. Detto questo, le dimensioni degli glifi non sono l'unico input nell'algoritmo di interruzione di riga utilizzato da WPF. Anche se usiamo le stesse metriche di GDI, il nostro interruzione di linea non sarà esattamente uguale.

Dal momento che queste proprietà sono nuova in .NET 4.0, hanno mantenuto l'algoritmo originale WPF come di default, che è la modalità ideale.

Per la TextRenderingMode

Auto Questa modalità usa ClearType a meno che le impostazioni di sistema sono stati insieme per disabilitare specificamente ClearType sulla macchina.

Alias ​​ Non verrà utilizzato l'antialias per disegnare il testo.

Scala di grigi L'antialiasing in scala di grigi verrà utilizzato per disegnare il testo .

ClearType ClearType antialising verrà utilizzato per disegnare il testo.

Dato che Auto è l'impostazione predefinita, generalmente viene visualizzato il rendering ClearType.

Ora, poiché queste sono proprietà associate e sono ereditate, è possibile impostarle nella radice Window. Non è necessario creare un gruppo di Style s.

+1

La modifica di queste proprietà ha impatto sulle prestazioni, forse a causa di algoritmi più complessi? Inoltre, mi piacerebbe sapere se ci sono altri inconvenienti o svantaggi nella modifica di queste proprietà. –

+2

Nessuno del team WPF ha mai menzionato hit prestazionali per l'utilizzo di diverse modalità di rendering, quindi direi se c'è una penalizzazione delle prestazioni, è trascurabile. Per quanto riguarda gli aspetti negativi, penso che il principale sarebbe con ClearType. Ad esempio, non funziona bene sui monitor CRT. –

0

Ho notato piccoli problemi di prestazioni quando si gestiscono grandi quantità di dati (più di 10.000 articoli) quando ClearType è attivo. La modifica di TextFormattingMode to Display non ha alcun impatto visibile sulle prestazioni.

Detto questo, in tutte le mie app WPF utilizzo gli stili globali per migliorare il rendering del testo, a meno che l'impatto sulle prestazioni non sia abbastanza grande da rendere l'interfaccia utente più appiccicosa.