Condividi tramite


Linee cosmetiche

Una linea cosmetica è sempre larga di un pixel ed è disegnata usando un pennello a tinta unita. Viene eseguito il rendering in base alla convenzione GIQ (Grid Intersezione Quantizzazione), che determina quali pixel devono essere attivati per eseguire il rendering della linea cosmetica.

La figura seguente mostra una linea sovrapposta su una griglia rettangolare, in cui i pixel si trovano nei punti di intersezione della griglia. Per determinare quali pixel devono essere illuminati, immaginare un diamante, centrato sulla linea e scivolare lungo di esso. La larghezza e l'altezza del diamante sono esattamente uguali alla distanza tra i centri pixel adiacenti. Mentre il diamante si sposta lungo la linea, qualsiasi pixel il cui centro è completamente coperto dal diamante viene attivato. Se una linea passa attraverso un punto a metà tra due pixel adiacenti, il pixel da attivare dipende dalla pendenza della linea e dal modo in cui i pixel adiacenti sono orientati: orizzontalmente (affiancato) o verticalmente (uno sopra l'altro).

La tabella seguente riepiloga questi casi.

Pendenza della linea (valore assoluto) I pixel adiacenti sono orientati Risultato

Pendenza < 1

oppure
Pendenza > 1

Orizzontalmente

Luce del pixel al vertice sinistro del diamante.

Pendenza < 1

oppure
Pendenza > 1

Verticalmente

Luce del pixel al vertice superiore del diamante.

Pendenza = 1

Orizzontalmente

Luce del pixel al vertice superiore del diamante.

Pendenza = 1

Verticalmente

Luce del pixel al vertice destro del diamante.

La convenzione di diamante luci un pixel in ogni colonna per le linee con pendenza compresa tra -1 e 1 e un pixel in ogni riga per le linee con pendenza maggiore di 1 in valore assoluto. In questo modo, una linea cosmetica viene resa senza lacune.

I pixel di inizio e fine di una linea cosmetica sono anche determinati dalla convenzione di diamante. Una linea cosmetica è first-pixel-inclusive e last-pixel-exclusive; ovvero, se la linea inizia all'interno del diamante per un pixel, tale pixel è illuminata. Analogamente, se la linea termina all'interno del diamante per un pixel, tale pixel non è illuminata.

Il grafico seguente illustra la convenzione di diamante per una linea cosmetica.

Diagramma che illustra la convenzione di rombo GIQ per il rendering di linee cosmetiche.

Per il rendering di linee cosmetiche, la funzione DrvStrokePath segue la convenzione giQ diamond. La funzione DrvLineTo è un punto di ingresso facoltativo che un driver può fornire come ottimizzazione per le chiamate dell'applicazione alla funzione Microsoft Win32 LineTo . DrvLineTo è più semplice di DrvStrokePath perché supporta solo i punti finali interi e linee cosmetiche solide.

Per i dispositivi raster che supportano la modalità di combinazione R2_NOT, un'operazione raster binaria che modifica il colore di destinazione inverso, il driver deve usare il rendering esatto. Il rendering deve essere esatto anche per i dispositivi che richiedono il rendering sia da GDI che dal driver. Sono inclusi i dispositivi per i quali GDI disegna alcune bitmap e il driver disegna su altre superfici (a meno che i pixel non siano troppo piccoli per fare alcuna differenza visibile). Ciò include anche i dispositivi che richiedono GDI per gestire il ritaglio complesso.