Newsgroup: it.comp.hardware
Titolo: Risoluzione, DAC, refresh, colori, aarrrrghhh!!!

Non sono mai riuscito a trovare una risposta soddisfacente a tale
quesito. Accetto volentieri i vostri suggerimenti.
Premessa
------------
Un normale monitor per PC, in un dato istante, decide di che colore
accendere un pixel in base a tre segnali elettrici che gli giungono su
altrettanti cavetti inseriti nel cavo che collega il monitor stesso
alla scheda video. I tre segnali sono relativi alle intensità del
rosso, del verde, e del blu, sommando i quali si riesce ad ottenere
quasi tutti i colori che l'occhio è in grado di distinguere.
Ognuno di questi segnali può assumere 256 diversi valori, vale a dire
che ognuno dei colori che può essere visualizzato dal monitor per un
qualsiasi pixel può essere scomposto in una componente di rosso, una
di verde e una di blu, e le intensità di ognuno di questi colori sarà
sempre compresa tra 0 e 255.
I possibili colori sono dunque 256*256*256 = 16777216, abbreviato da
ora in poi in 16M. Il monitor, in sostanza, "vive" a 16M di colori,
nel senso che legge sempre, per ogni pixel, questi tre valori, li
mixa, e riproduce il colore corrispondente.
Eppure in tutti i computer è possibile selezionare la "profondità di
colore" tra 256 colori (8 bit = 1 byte), 65536 colori (16 bit = 2
byte) o high color, e 16M colori (24 bit = 3 byte) o true color.
(Tralasciamo per semplicità altre combinazioni, tanto il discorso fila
lo stesso). Da ora in poi 64k = 65536.
Io ho sempre fatto un calcolo di questo tipo: a 256 colori per ogni
pixel ci vuole un byte, a 64k colori per ogni pixel ci vogliono due
byte, e a 16M colori per ogni pixel ci vogliono 3 byte. Ad esempio per
un'immagine 640x480x64k ci vogliono 640x480x2 byte, per un'altra
1024x768x16M ce ne vogliono 1024x768x3 di byte, etc...
Questi byte, però, dove finiscono? Sono quelli di cui il computer ha
bisogno per disegnare l'immagine in una memoria da qualche parte nel
PC. La suddetta immagine viene poi letta dalla scheda video e inviata
al monitor. Per trasformare i dati che costituiscono l'immagine (cioè
il colore di ogni pixel) da byte memorizzati in memoria ai tre segnali
elettrici di cui il monitor ha bisogno, si utilizza un convertitore
digitale analogico (abbreviato in DAC).
Tale DAC deve quindi effettuare una traduzione per ogni pixel da
disegnare, partendo o da 8, o da 16, o da 24 bit e arrivando sempre ai
tre segnali analogici. Quando esso ha tradotto tutti i pixel di
un'immagine, questa sarà stat disegnata sullo schermo.
Poichè l'immagine viene ridisgnata parecchie volte al secondo, questo
DAC deve fare una fatica sempre maggiore a mano a mano che aumentiamo
il numero di volte al secondo in cui l'immagine viene ridisegnata (la
frequenza di refresh), oppure la risoluzione dello schermo.
Tutti ciò è in linea con il nostro senso comune, che ci dice infatti
che per risoluzioni e frequenze di refresh maggiori ci vogliono DAC
più veloci (la loro velocità si misura in MHz, ovvero in milioni di
traduzioni al secondo).
Il punto è il seguente: io non sono mai riuscito a capire cosa succede
quando noi non usiamo 16M di colori, ma un numero inferiore, ad
esempio 256.
Ipotesi 1
-----------
Usarne 256 significa che nella stessa immagine non ne possono
coesistere più di tanti, ma non pone alcun vincolo su quali!
Io ho 16M colori, ne scelgo 256 che mi stanno simpatici, e con questi
disegno un'immagine. In pratica invento un codice: ho una tabella di
256 righe, e ad ogni riga corrisponde un dato colore, ovvero una certa
configurazione di rosso, verde e blu, ovvero un gruppo di 3 byte.
Quando il computer dice di usare per un certo pixel il colore numero
217, io vado nella tabella, leggo i tre byte contenuti nella riga
numero 217 e spedisco questi tre byte al monitor.
In questo modo io decido di usare solo 256 colori, e le mie immagini
anzichè dover essere descritte da 3 byte per pixel, necessitano solo
di un byte per pixel.
Piccolo dettaglio: se così fosse, per il DAC non farebbe nessuna
differenza se io decidessi di usare 256 colori anziché 16M, visto che
dopo la traduzione lui si vedrebbe comunque presentarsi una sfilza di
3 byte da tradurre nei soliti tre valori analogici.
Seconda cosa, la tabella (nell'esempio di 256 * 3 byte, ma potrebbe
anche essere di 65536 * 3 byte) dove dovrebbe essere? E questo
meccanismo non rallenterebbe la macchina, che per ogni pixel dovrebbe
andare a leggere nella tabella il colore corrispondente?
Non mi convince questa ipotesi.
Ipotesi 2
-----------
Non posso scegliere quali sono i 256 colori, ma semplicemente mi si
riducono le possibili tonalità di rosso, verde e blu. Supponiamo di
averne solo 8 per il rosso ed il blu e 4 per il verde. Poichè 8
tonalità richiedono 3 bit e 4 solo 2, ho in tutto che con 8 bit,
ovvero un byte, posso codificare uno tra questi 256 colori.
A questo punto il DAC deve  inserire i 3 bit del rosso nei primi 3 bit
di un byte e mettere a 0 gli altri 5, fare la stessa cosa con il blu,
e fare qualcosa di simile, con 6 zeri di riempimento, per il verde,
poi codificare questi tre byte et voilà!, abbiamo i soliti tre segnali
analogici. Fatica sempre lo stesso...
Non ho però bisogno della tabella di traduzione!
Tutto ciò contrasta però con la mia visione delle cose. Se setto la
scheda video a 256 colori riesco a visualizzare le immagini più
disparate, proprio come se io potessi effettivamente scegliere 256
colori tra 16M da far vedere contemporaneamente sullo schermo.
Anche questa seconda ipotesi, quindi, non mi convince.
Conclusione
-----------------
Per quello che sono riuscito a mettere insieme, dunque, il DAC non se
ne frega niente della profondità di colore tanto per lui è lo stesso.
E' influenzato solo dalla risoluzione e dalla frequenza di refresh. Ma
non so se sia vero...
Questa da me inventata tabella di traduzione esiste veramente, o no? E
se si, dove?
E mo? C'è qualcuno che ne sa qualcosa?
Salutoni, Piero.

Considerazioni e correzioni a quanto detto :
-In realta' tu non scegli fra 16M colori ma tra 256K colori (6 bit
rosso, 6 bit verde e 6 bit blu). La tabella della quale parli si chiama
palette ed e' lunga 6*3*256 bit 
-Rallenta molto di piu' raddoppiare o triplicare il numero dei bytes da
maneggiare in memoria video. L'overhead introdotto dalla tecnica della
palette e' minimo. 
-Essendo quasi giusta la prima ipotesi, la seconda e' sbagliata.
-senza la palette ho solo 256 colori fissi, che non andrebbero bene
neppure per disegnare col paint.
-La "buona visione" delle immagini utilizzando 256 colori avviene grazie
a degli algoritmi di dithering che ti permettono di simulare un numero
di colori elevato utilizzandone 256 e utilizzando molto la tecnica delle
retinature.
 
Spero di averti chiarito le idee. 
Ciao
								Max