Condividi tramite


Direct2D e High-DPI

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

supporto High-DPI 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 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 in High-DPI visualizza.
  • 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 in DIP, che rende le risorse automaticamente indipendenti dalla risoluzione.
  • Usa uno spazio di coordinate a virgola mobile e antialiasing, in modo che qualsiasi contenuto possa essere ridimensionato a qualsiasi DPI arbitrario.

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

Windows 8 e High-DPI

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 del testo più rapido sui display con valori DPI elevati. Inoltre, è possibile impostare la modalità unità su pixel invece di DIP usando il metodo ID2D1DeviceContext::SetUnitMode. Se si imposta la modalità unità su pixel e 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 fisico del dispositivo. (La nomenclatura deriva dalla stampa, dove i punti sono il punto di inchiostro più piccolo che un processo di stampa può produrre). Poiché un monitor standard usato per avere 96 punti per pollice, un DPI pari a 96 significa che un pixel indipendente del dispositivo (o DIP) mappato 1:1 con un pixel fisico. Ad esempio, se il valore DPI era 96*2 = 192, un singolo DIP includerebbe due pixel fisici.

Ci sono molti motivi per cui le applicazioni non gestiscono necessariamente questo ridimensionamento correttamente; uno dei motivi più semplici è che richiede un lavoro aggiuntivo per individuare e usare questo valore scalare durante il rendering. In Direct2D il ridimensionamento viene applicato per impostazione predefinita. A causa di questo mapping, i pixel del dispositivo fisico potrebbero terminare a 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 in High-DPI visualizza