Condividi tramite


Direct2D e DPI elevato

La scrittura di un'applicazione compatibile con DPI è la chiave per rendere coerente l'aspetto di un'interfaccia utente in un'ampia gamma di impostazioni di visualizzazione DPI elevate. Un'applicazione che non riconosce dpi, ma è in esecuzione in un'impostazione di visualizzazione con valori DPI elevati può risentire di molti artefatti visivi, tra cui il ridimensionamento non corretto degli elementi dell'interfaccia utente, il testo ritagliato e le immagini sfocate. Aggiungendo il supporto nell'applicazione per la consapevolezza dei valori DPI, la presentazione dell'interfaccia utente dell'applicazione è più prevedibile, rendendola più visivamente accattivante e più facile da leggere per gli utenti. Fortunatamente, Direct2D semplifica la scrittura di applicazioni che funzionano bene in valori DPI elevati. In questo argomento sono contenute le sezioni seguenti.

Supporto di valori DPI elevati in Direct2D

Direct2D offre le funzionalità seguenti per l'uso di scenari con valori DPI elevati:

  • Rispetta automaticamente il valore DPI di sistema durante la creazione di una destinazione di rendering con finestra, purché il manifesto dell'applicazione indichi che l'applicazione gestisce correttamente i valori DPI. Per informazioni su come dichiarare che l'applicazione è compatibile con DPI, vedere Come assicurarsi che l'applicazione venga visualizzata correttamente nei display con valori DPI alti.
  • Esprime le coordinate in DIP (Device Independent Pixel), che consente all'applicazione di ridimensionarsi automaticamente quando cambia l'impostazione DPI.
  • Consente alle bitmap di avere un DPI e di ridimensionarle correttamente tenendo conto del dpi. Questa funzionalità può essere usata anche per mantenere le icone a risoluzioni diverse.
  • Esprime la maggior parte delle risorse nei DIP, che rende le risorse automaticamente indipendenti dalla risoluzione.
  • Usa uno spazio di coordinate a virgola mobile e l'antialiasing, in modo che qualsiasi contenuto possa essere ridimensionato in qualsiasi DPI arbitrario.

La pipeline grafica Direct2D è progettata per la scalabilità da 96 DPI a 1200DPI.

Windows 8 e DPI elevato

A partire da Windows 8, sono disponibili funzionalità aggiuntive per il supporto di valori DPI elevati.

Se il valore DPI del contesto di dispositivo è sufficientemente elevato, Direct2D modifica la soglia usata per abilitare l'anti-aliasing verticale del testo. Ciò comporta un rendering più rapido del testo su schermi CON VALORI DPI elevati. Inoltre, è possibile impostare la modalità unità su pixel anziché su DIP usando il metodo ID2D1DeviceContext::SetUnitMode . Se si imposta la modalità unità su pixel e il valore DPI del contesto di dispositivo sulla dpi dello schermo, l'ottimizzazione è ancora abilitata.

Che cos'è un DIP?

Un pixel indipendente dal dispositivo (DIP) è un pixel logico che esegue il mapping ai pixel del dispositivo fisico tramite un valore DPI scalare. DPI è l'acronimo di punti per pollice, dove un punto rappresenta un pixel di dispositivo fisico. (La tipografia deriva dalla stampa, dove i punti sono il punto inchiostro più piccolo che un processo di stampa può produrre). Poiché un monitor standard usava 96 punti per pollice, un DPI pari a 96 significava che un pixel indipendente (o DIP) del dispositivo mappato 1:1 con un pixel fisico. Ad esempio, se il valore DPI era 96*2 = 192, un singolo DIP includerà due pixel fisici.

Esistono molti motivi per cui le applicazioni non gestiscono necessariamente questa scalabilità correttamente; uno dei motivi più semplici è che richiede lavoro aggiuntivo per individuare e usare questo valore scalare durante il rendering. In Direct2D la scalabilità viene applicata per impostazione predefinita. A causa di questo mapping, i pixel del dispositivo fisico potrebbero finire in coordinate DIP frazionarie, motivo per cui Direct2D usa uno spazio di coordinate a virgola mobile.

physical pixel = (dip × DPI) / 96

Per convertire un pixel fisico in un DIP, usare questa formula:

dip = (pixel fisico × 96) / DPI

Nota

A partire da Windows 8, è possibile impostare la modalità unità su pixel anziché su DIP usando il metodo ID2D1DeviceContext::SetUnitMode.

 

Come assicurarsi che l'applicazione venga visualizzata correttamente nei display con valori DPI alti