Domanda Problema dei font sfocati WPF - Soluzioni


Il problema è descritto e dimostrato sui seguenti link:

Spiegazione: Testo chiarezza in WPF. Questo link ha un confronto di font.

Vorrei raccogliere tutte le possibili soluzioni per questo problema. Microsoft Expression Blend utilizza WPF ma i caratteri sembrano leggibili.

  • Sfondo scuro come in Microsoft Expression Blend
  • Aumentare la dimensione del carattere e cambiare il carattere (Calibri ...) [Link]
  • Incorpora moduli di Windows [Link]
  • Utilizzare la classe TextRenderer GDI + e / o Windows Form per eseguire il rendering di un testo in una bitmap e quindi renderizzare quella bitmap come controllo WPF. [Link]

Ci sono altre soluzioni?

Questo problema verrà risolto in VS2010 (e WPF4) beta 2

Miglioramenti dello stack di testo di WPF 4.0

SEMBRA CHE ESSO È STATO FINALMENTE RISOLTO! 

Scott Hanselman's ComputerZen.com: WPF e Text Blurriness, ora con completa chiarezza
Blog di testo WPF: miglioramenti della chiarezza del testo WPF aggiuntivi


146
2017-10-10 06:50


origine


risposte:


Background tecnico

C'è un articolo approfondito su WPF Text rendering da uno dei WPF Text Program Manager su windowsclient.net: Testo chiarezza in WPF.

Il problema si riduce a WPF che richiede un renderizzatore di font con ridimensionamento lineare per animazioni fluide. Pure ClearType d'altra parte richiede un po 'di libertà con il font per spingere steli verticali nel prossimo pixel.

La differenza è evidente se si confronta il classico schema "a cascata". WinForms in basso a sinistra, WPF in alto a destra:

Anche se non sono un fan delle idiosincrasie di rendering dei font di WPF, posso immaginare il clamore se le animazioni saltassero come fanno nella cascata di Winforms.

Giocare con il registro

Di particolare interesse per me era il link all'articolo di MSDN "Impostazioni del Registro di sistema ClearType", che spiega le possibili regolazioni sul lato utente nel registro:

  • Livello ClearType: quantità di suggerimento subpixel
  • Livello gamma
  • Struttura dei pixel: come sono disposte le strisce di colore in un pixel di visualizzazione
  • Livello di contrasto del testo: regola la larghezza dei glyph stems per rendere il carattere più pesante

Giocare con queste impostazioni non ha davvero migliorato il problema sottostante, ma può aiutare riducendo l'effetto di bleeding del colore per gli utenti sensibili.

Un altro approccio

Il miglior consiglio che l'articolo di Text Clarity ha dato è stato l'aumento della dimensione del carattere e la modifica del font. Calibri funziona meglio di me rispetto all'interfaccia utente standard di Segoe. A causa della sua popolarità come font web, ho provato anche Verdana, ma ha un brutto salto di peso tra 14pt e 15pt che è molto visibile quando si animano le dimensioni del font.

WPF 4.0

WPF 4 avrà un supporto migliorato per influenzare il rendering dei caratteri. C'è un articolo sul blog di testo WPF spiegando i cambiamenti. Il più prominente, ci sono ora (almeno) tre diversi tipi di rendering del testo:

text rendering comparison

<brontolio> Questa dovrebbe essere una corda sufficiente per ogni designer. </ brontolare>


102
2017-10-10 08:31



.NET 4 ha finalmente una soluzione per la scarsa qualità di rendering del testo di WPF, ma è ben nascosto. Imposta quanto segue per ogni finestra:

TextOptions.TextFormattingMode="Display"

Il valore predefinito è "Ideale", che non è affatto il significato del nome.

Ci sono altre due opzioni in TextOptions, ovvero TextHintingMode e TextRenderingMode, ma entrambe hanno impostazioni predefinite sensibili.


118
2018-03-02 11:05



Ho incontrato un problema l'altro giorno quando ho usato un confine che aveva un DropShadowEffect applicato. Il risultato è stato che tutto il testo all'interno di quel bordo era estremamente sfocato. Non importa se il testo era all'interno di altri pannelli o direttamente sotto il bordo - qualsiasi blocco di testo figlio di un genitore che ha un Effetto applicato sembra essere interessato.

La soluzione a questo caso particolare era di non inserire elementi all'interno del bordo che ha effetti, ma invece di usare una griglia (o qualsiasi altra cosa che supporti il ​​mettere il contenuto l'uno sopra l'altro) e posizionare un rettangolo nella stessa cella del testo (es. come un fratello nell'albero visivo) e mettere gli effetti su quello.

Così:

<!-- don't do this --->
<Border>
     <Border.Effect>
          <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
     </Border.Effect>
     <TextBlock Text="This Text Will Be Blurry" />
</Border>

<!-- Do this instead -->
<Grid>
  <Rectangle>
     <Rectangle.Effect>
          <DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
     </Rectangle.Effect>
  </Rectangle>
  <TextBlock Text="This Text Will Be Crisp and Clear" />
</Grid>

34
2017-10-27 15:31



Questo problema verrà risolto in VS2010 (e WPF4) beta 2:


10
2017-09-29 18:17



SnapToDevicePixels si applica solo alle forme WPF (linee, ecc.), Non al renderer di testo.

Non è disponibile alcuna soluzione a questo problema. Secondo Microsoft, il comportamento è "di progettazione".

Vedi anche Questo discussione sui forum Microsoft che discutono i problemi - ha ricevuto alcune risposte da MS che chiariscono la loro posizione sul problema.


6
2017-11-10 11:31



Dal punto di vista di uno sviluppatore, l'unica soluzione "nota" fino ad oggi è quella di utilizzare la classe TextRenderer di GDI + e / o Windows Form per eseguire il rendering di un testo in una bitmap e quindi renderizzare tale bitmap come controllo WPF. A parte le ovvie implicazioni sulle prestazioni, questo non allevia il problema per le applicazioni esistenti.

Ora ho creato un Biglietto Microsoft Connect per questo problema (con mia sorpresa, nonostante tutta la negatività, non c'era alcuna segnalazione di bug nel tracker designato).

Poiché questo è uno dei canali ufficiali di comunicazione di richieste e domande a Microsoft, consiglierei anche di esaminarlo per una risposta più rapida. Almeno, se si desidera che il problema venga affrontato in un modo o nell'altro, il voto per quel biglietto e / o la convalida del problema aiuteranno a richiamare l'attenzione di PM e ingegneri di Microsoft su questo problema, aumentando eventualmente la sua priorità percepita.


6
2017-11-12 07:04



Ho appena provato VS2010 beta, che è tutto fatto in WPF, e soffre di BADLY dal problema dei font sfocati. In particolare sui tooltip.

Ciò sembra fornire alcune prove del fatto che il WPF4 non risolverà il problema (semmai è peggio)


4
2018-05-19 21:26



Wow, non posso credere di aver finalmente i miei font WPF leggibili. E non posso nemmeno credere che non ci sia una finestra di dialogo delle opzioni per rendere facili queste modifiche mentre i valori predefiniti sono orribili sul mio display.

Queste impostazioni del registro (in decimale) ha funzionato per me e si avvicina di più al mio normale font cleartype:

  • ClearTypeLevel: 10 (principalmente aliasing in scala di grigi)
  • GammaLevel: 1300 (gamma più alta ha reso il carattere troppo sottile e stavo vedendo i colori nell'aliasing)

4
2018-06-10 16:55



Non lo vedo come un bug, ma la configurazione di default è davvero molto fastidiosa. Ecco una comparazione di tutte le combinazioni di

TextOptions.TextRenderingMode
TextOptions.TextFormattingMode
RenderOptions.ClearTypeHint

SnapToDevicePixels non fa alcuna differenza nel rendering del testo.

http://i.stack.imgur.com/cS3S2.png

Preferisco:

TextOptions.TextRenderingMode="Auto"
TextOptions.TextFormattingMode="Ideal"
RenderOptions.ClearTypeHint="Auto"

dove le linee verticali non sono mai sfocate.

Il font utilizzato è Open Sans Light, che può essere davvero bello se è ben utilizzato, come nell'ultima TeamViewer.

Per chi usa Mahapps.Metro, il problema è il TransitioningContentControl  https://github.com/MahApps/MahApps.Metro/issues/889


4
2018-04-20 15:12