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 di High-DPI in direct2D
- Windows 8 e DPI elevato
- Che cos'è un DIP?
- argomenti correlati
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.
Argomenti correlati