Domanda

Ho sviluppato una GUI per un'applicazione casuale utilizzando WPF.Ho un sacco di controlli WPF pronti all'uso posizionati nella finestra dell'applicazione.Non ho personalizzato nulla, non ho usato bitmap, ecc.

Quando si esegue l'applicazione e si esegue lo zoom utilizzando l'applicazione Magnifier in Windows 7 (Win key + Plus key, la GUI ingrandita mostra pixel. Probabilmente mi sbaglio, perché non posso spiegarlo altrimenti, ma WPF non dovrebbe fornire vettore come controllare il rendering?

Grazie per aver partecipato alla discussione.

Lettura bonus

È stato utile?

Soluzione

Ai tempi della distribuzione di Vista e quando WPF era nella versione 3.0, lo zoom con la lente d'ingrandimento integrata eseguiva effettivamente il ridimensionamento basato su vettori.

Questo ha smesso di funzionare quando è stato spedito il service pack 1 di WPF 3.5.(Funzionava nella versione 3.5 prima della sp1.) Il motivo per cui funzionava prima è che DWM (Desktop Window Manager), la parte di Windows responsabile della presentazione di tutto ciò che vedi sullo schermo, utilizza MILCORE.DLL per eseguire il rendering.Anche le versioni 3.0 e 3.5 di WPF utilizzavano questo stesso componente per il rendering: ciò significava che tutto il contenuto WPF era contenuto nativo, per così dire.(In effetti, su Windows XP, che non dispone di DWM, MILCORE.DLL è qualcosa che WPF inserisce nel tuo sistema a proprio vantaggio.Ma è integrato in Vista e Windows 7.) Quando WPF utilizzava MILCORE.DLL per il rendering su Vista, qualsiasi effetto applicato dal DWM come il ridimensionamento veniva applicato anche nel modo desiderato a WPF: si ridimensionava davvero senza pixelazione.

Sfortunatamente, non è più così.E il motivo è che WPF ha iniziato ad aggiungere nuove funzionalità di rendering.Nella 3.5 sp1, la nuova funzionalità in questione era il supporto per pixel shader personalizzati.Per consentire ciò, Microsoft ha dovuto rilasciare un aggiornamento al MIL.(Il Media Integration Layer - la parte che esegue il rendering vero e proprio.) Tuttavia, non erano realmente nella posizione di aggiornare MILCORE.DLL, perché fa parte di Windows: è così che tutto ciò che vedi sullo schermo arriva sullo schermo.Rilasciare una nuova versione di MILCORE.DLL significa effettivamente inviare un aggiornamento a Windows.La pianificazione del rilascio per Windows è indipendente da quella per .NET, quindi l'unico modo in cui il team WPF poteva ragionevolmente aggiungere nuove funzionalità era fornire un nuovo MIL.(In teoria avrebbero potuto farlo tramite Windows Update, ma poiché WPF è ora di proprietà di una divisione di Microsoft diversa da Windows, questo genere di cose non sembra accadere nella pratica.)

A partire da .NET 3.5 sp1, MIL si trova in una DLL diversa denominata wpf_gfx_vXXXX.dll dove vXXXX è il numero di versione.In .NET 4.0 è wpf_gfx_v0400.dll.

Il lato positivo è che WPF può aggiungere nuove funzionalità di rendering con ogni nuova versione, senza la necessità di aggiornare Windows stesso.Lo svantaggio è che il rendering di WPF non è più così strettamente integrato con Windows come lo era per un breve periodo quando è stato rilasciato Vista.E il risultato è, come hai visto, che l'ingrandimento non è più così divertente come lo era una volta.

Altri suggerimenti

L'applicazione di lente d'ingrandimento implementa il proprio rendering dell'immagine ingrandita, ecco perché vedi i pixel.WPF utilizza la grafica vettoriale, ma in questa situazione non è l'applicazione WPF stessa a eseguire il rendering dell'immagine ingrandita.

Se usi qualcosa del genere Curiosare puoi vedere il rendering della grafica vettoriale WPF ingrandita e scalata in azione.

Suppongo che la lente d'ingrandimento di Windows 7 scatti un'istantanea dell'interfaccia utente sullo schermo dell'applicazione effettiva e quindi la ingrandisca da sola (non costituisce un caso speciale per le applicazioni WPF).Ovviamente ciò a cui può accedere sono solo i pixel, non la grafica vettoriale che funziona dietro le quinte.

La lente d'ingrandimento di Windows 7 è basata sui pixel, ma c'è una differenza nella modalità lente d'ingrandimento a seconda che un tema Aero sia attivo o meno.

  • con il tema Areo lo zoom è pixelato.
  • senza il tema Areo lo zoom è attenuato (sfocato).

Solo con il tema Areo sono selezionabili altre visualizzazioni (tranne "Ancorata").

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