Mi chiedo se ci sia una libreria grafica che supporta il rendering RGB subpixel (come ClearType) per la grafica generale, non solo per il testo. Ciò consentirebbe praticamente di triplicare la risoluzione orizzontale e mettere la grafica su posizioni x del terzo pixel.RGB subpixel rendering per la grafica?
Mentre penso che questo sarebbe molto utile, non ho potuto trovare molto su internet su di esso, ad eccezione di quanto segue:
- How Sub-Pixel Font Rendering Works (ci sono alcune immagini di linea intorno alla metà)
- Subpixel rendering and image resizing (alcuni pensieri interessanti sull'applicazione del rendering subpixel al ridimensionamento delle bitmap)
C'è qualche libreria che implementa questo, o ci sono sforzi per portare qualcosa come questo alla biblioteca del Cairo, per esempio?
Aggiornamento:
mi riferisco in particolare a tecniche di rendering che tengano conto del fatto che usano schermi LCD attuali sub-pixel di colori diversi. Per fare un punto bianco, è possibile impostare tutti i subpixel a 'on' o 255. Una linea bianca sarebbe parecchi subpixel uno sopra l'altro:
...RGB...
...RGB...
...RGB...
...RGB...
...RGB...
...111...
(dove .
è un sub-pixel completamente nero, e R
, G
o B
sono sotto-pixel rossi, verdi o blu completamente illuminati). Poiché i nostri occhi non possono risolvere i sub-pixel, si fondono insieme per formare una linea bianca. Potrei però anche fare una linea bianca dalla seguente:
....GBR..
....GBR..
....GBR..
....GBR..
....GBR..
....111..
noti che è perfettamente tagliente, ma posizionato in x = 1 1/3 pixel. Questo non è possibile con le tecniche di rendering tradizionali che disegnano invece una linea bianca leggermente sfocata. Qui ad esempio R
= 70% acceso, r
= 30% acceso. Non ho lavorato fuori la matematica, questo è solo così si ottiene l'idea:
...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...RGBrgb...
...777333...
Un altro esempio è un pendio, che si può fare a) con pixel pieni, b) antialias, oppure c) con subpixel Rendering:
a) RGB...... b) RGB...... c) RGB......
RGB...... RGBrgb... .GBR.....
...RGB... rgbRGB... ..BRG....
...RGB... ...RGB... ...RGB...
...RGB... ...RGBrgb ....GBR..
......RGB ...rgbRGB .....BRG.
......RGB ......RGB ......RGB
Anche in questo caso, si noti che questo è solo un esempio di greggio per darvi l'idea generale, ma si vede che a) è jaggy o alias, b) è sfocata, e c) è tagliente come te può farlo su un LCD.
Realizzazioni reali di questo, per la visualizzazione dei caratteri (ClearType su Windows e il rendering subpixel in FreeType) hanno un algoritmo più sofisticato. Prendono in considerazione che i singoli sub-pixel sanguinano o brillano l'uno nell'altro, preservano l'intensità o l'energia del colore totale. Considera anche che la spaziatura subpixel non è uniforme (la spaziatura tra R e G, o G e B (nel pixel) può essere inferiore a quella tra B e R), e infine che alcuni display hanno layout di pixel completamente diversi.
Cairo supporta il posizionamento del sotto pixel. Tutte le coordinate sono a doppia precisione. Vedi [cairo_line_to] (http://www.cairographics.org/manual/cairo-Paths.html#cairo-line-to) per un esempio – mbonnin
Sono consapevole che puoi usare le coordinate non interi, ma mi riferisco al rendering subpixel RGB, non solo al rendering antialiasing. Il rendering RGB subpixel tiene conto del fatto che ciascun pixel su uno schermo LCD è composto da un sottopixel rosso, verde e blu. Aggiornerò la domanda con un po 'più di dettaglio – jdm
ok, capito. in realtà non sapevo che alcuni motori di font potessero fare questo (dubito che il freetype "spacchi" i pixel nei loro valori RGB, vero?). Anche questo dipenderebbe dalla reale configurazione della matrice rgb, quindi potrebbe finire per fare più male che bene su schermi come [nexus one] (http://arstechnica.com/gadgets/2010/03/secrets-of-the-nexus -ones-screen-science-color-and-hacks /) – mbonnin