Consideriamo un ipotetico monitor composto da 6x6 pixel. Supponiamo che sul
monitor sia visualizzata la seguente immagine:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Per memorizzare/gestire questa immagine è necessario abbinare ad
ogni colore una particolare combinazione di bit. I colori necessari sono 4.
Mi bastano
quindi 2 bit per codificare ogni colore. L'abbinamento colore/codifica in
bit prende il nome di palette. Un esempio di palette applicabile al nostro esempio potrebbe
essere il seguente.
Combinazioni di 2 bit |
Esempio di PALETTE | |
00 | GRIGIO | |
01 | ROSSO | |
10 | VERDE | |
11 | BLU |
Nella memoria video l'immagine del nostro esempio verrebbe rappresentata con questa sequenza di bit
01 |
01 |
01 |
01 |
01 |
01 |
01 |
10 |
10 |
10 |
10 |
01 |
01 |
11 |
00 |
00 |
10 |
01 |
01 |
11 |
00 |
00 |
10 |
01 |
01 |
11 |
11 |
11 |
10 |
01 |
01 |
01 |
01 |
01 |
01 |
01 |
I bit totali utilizzati sono 72 (6x6x2). Quindi mi bastano 9 byte (72/8) per gestire la figura del nostro esempio. Naturalmente per registrare l'immagine nel computer, oltre alla codifica dei colori dei singoli pixel, dovremo aggiungere anche la palette utilizzata.
Come calcolo la quantità di memoria video necessaria per gestire un'immagine bitmap/monitor
Consideriamo un monitor composto da NxM pixels con C colori (profondità di colore). Il numero di bit minimo necessario per rappresentare C colori è k dove k è il più piccolo intero per cui vale la seguente relazione.
2k >=C |
PS: Si noti che 2k corrisponde al numero di combinazioni che posso creare con k bit. Ad ogni combinazione di k bit abbinerò uno dei colori appartenenti alla palette utilizzata.
esempio:
Supponiamo che i colori presenti siano 8 (quindi C vale 8). Il numero di bit minimo (k) per codificare questi colori è 3. Infatti 23>=8 (si noti che il numero di combinazioni disponibili con 3 bit è 23).
Ad ogni combinazione di 3 bit posso associare un colore. Ecco
due esempi di palette a 3 bit:
Combinazioni di 3 bit |
1° Esempio di PALETTE | 2° Esempio di PALETTE | ||
000 | NERO | BIANCO | ||
001 | GIALLO | AZZURRO | ||
010 | VERDE | FUCSIA | ||
011 | ROSSO | BLU | ||
100 | GRIGIO | NERO | ||
101 | MARRONE | GRIGIO | ||
110 | VIOLA | GIALLO | ||
111 | BIANCO | ROSSO |
Supponiamo di avere in memoria video i seguenti bit
001 | 011 | 001 |
011 | 001 | 011 |
011 | 011 | 011 |
011 | 001 | 011 |
Se carico la prima palette a video apparirà la seguente figura:
001 | 011 | 001 |
011 | 001 | 011 |
011 | 011 | 011 |
011 | 001 | 011 |
mentre se carico la seconda palette otterrò questa:
001 | 011 | 001 |
011 | 001 | 011 |
011 | 011 | 011 |
011 | 001 | 011 |
Si noti come, a secondo della palette caricata, i colori cambiano mentre i profili delle figure restano invariate nella figura.
Esempi di esercizi richiesti durante le interrogazioni:
Domanda 1:
Si consideri un monitor 8x8 con 7 colori. Fornire una
palette
di vostra fantasia e la
sequenza di bit caricata nella memoria video che mostri, su questo monitor, la
lettera iniziale del vostro cognome.
Soluzione:
una palette di nostra fantasia potrebbe essere la seguente:
Combinazioni di 3 bit |
Esempio di PALETTE | |
000 | NERO | |
001 | GIALLO | |
010 | VERDE | |
011 | ROSSO | |
100 | GRIGIO | |
101 | MARRONE | |
110 | VIOLA | |
111 | NON USATO |
X |
Questa è la possibile mappa di bit in memoria video che visualizza la lettera
iniziale del nostro cognome (la colorazione evidenzia i colori corrispondenti
alla palette proposta)
100 | 100 | 100 | 001 | 001 | 001 | 100 | 100 |
100 | 100 | 001 | 100 | 100 | 100 | 100 | 100 |
100 | 100 | 001 | 100 | 100 | 100 | 100 | 100 |
100 | 100 | 100 | 001 | 001 | 100 | 100 | 100 |
100 | 100 | 100 | 100 | 100 | 001 | 100 | 100 |
100 | 100 | 100 | 100 | 100 | 001 | 100 | 100 |
100 | 100 | 100 | 100 | 100 | 001 | 100 | 100 |
100 | 100 | 001 | 001 | 001 | 100 | 100 | 100 |
Domanda 2:
Quanti Kbyte di memoria video sono necessari per gestire un monitor 800x600 con 126 colori ?
Soluzione:
Il primo intero k per cui vale la relazione 2k
>=126 è 7 per cui mi bastano 7 bit per rappresentare i 126 colori
richiesti. In altre parole devo riservare 7 bit per ogni pixel. L'immagine ha
800x600 (480.000) pixel. Poiché ogni pixel richiede 7 bit mi servono
800x600x7 bit (3.360.000) per gestire il mio monitor. Sapendo
che un Kbyte = 1024x8 bit la soluzione è
(800x600x7)/(1024x8) = 410,15625 kbyte.
Domanda 3:
Quanti Mbyte di memoria video sono necessari per gestire un monitor
1024x768
che utilizza lo standard RGB ?
Soluzione:
La scala RGB utilizza 24 bit (vedi Nota 0) ed esattamente: 8 bit per le tonalità di rosso, 8 bit per quelle di verde e 8 bit per quelle del blu. Ogni pixel RGB richiede quindi 24 bit ovvero 3 byte.
Il nostro monitor RGB richiede pertanto 1024x768x3 byte= 2.359.296 byte di memoria video. Poiché un Mbyte=1024x1024 byte segue che (1024x768x3)/(1024x1024) ovvero 2,25 Mbyte rappresenta la soluzione richiesta.
Nota 0: In un computer i colori vengono gestiti tramite una combinazione di tre diversi colori "primari": Rosso, Verde e Blu. Dalla miscelazione delle loro diverse tonalità vengono rappresentati tutti i colori che vediamo su un monitor. RGB è l'acronimo di Red, Green e Blue (rosso, verde e blu). Si tratta di una codifica universale per il colore basata sull'utilizzo di 24 bit (3 byte) dove ogni byte contiene il valore corrispondente all'intensità di ogni componente di colore. I primi 8 bit indicano la tonalità di rosso, dal 9° al 16° bit quella di verde e dal 17° al 24° quella del blu.
Nella tabella successiva abbiamo la rappresentazione binaria dei colori principali.
Colore risultante |
Codifica Binaria |
Hex |
DEC |
|||||||||||||||||||||||
ROSSO | VERDE | BLU | ||||||||||||||||||||||||
Nero | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | #000000 | 0.0.0 |
Rosso | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | #FF0000 | 255.0.0 |
Verde | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | #00FF00 | 0.255.0 |
Blu | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | #0000FF | 0.0.255 |
Bianco | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | #FFFFFF | 255.255.255 |
Giallo | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | #FFFF00 | 255.255.0 |
Magenta | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | #FF00FF | 255.0.255 |
Ciano | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | #00FFFF | 0.255.255 |
Domanda 4:
La mia scheda video ha 4Mbyte. Il mio monitor ha una risoluzione di 1280x800 pixel. Quanti colori C posso gestire con quella scheda ?
Soluzione:
In un Mbyte ho 1024x1024x8 bit. Quindi i bit disponibili
nella mia scheda sono 4x1024x1024x8. Il numero di bit disponibile per ogni pixel è:
k = Nr di bit disponibili per ogni pixel = |
Totale bit nella scheda video |
= |
(4x1024x1024x8) bit |
=32,768 bit per pixel |
Totale pixel | (1280x800) pixel |
Essendo il bit un'unità di misura indivisibile devo trascurare la parte decimale
del risultato per cui per ogni pixel posso riservare 32 bit. Il numero di colori
C che posso codificare (e quindi gestire) per questo monitor è 2k
= 232
(4.294.967.296) colori.
Domanda 5:
Calcolare la dimensione del buffer (memoria di transito) in Mbyte di una stampante che deve memorizzare un'intera pagina A4 ad una risoluzione di 300 dpi (punti per pollice) con 256 tonalità di grigio.
Soluzione:
Un foglio A4 ha una dimensione in cm pari a 21x29,7 (vedi Nota2). Ora un cm è 0,3937 pollici per cui un foglio A4 ha una superficie in pollici2 (in2) pari a (21x0,3937)x(29,7x0,3937) in2 (96,673306653 in2). Poiché il dpi è un'unità di misura lineare segue che per ogni in2 la densità dei punti è 3002.
Il numero totale di pixel presenti con questa risoluzione è (21x0,3937)x(29,7x0,3937)x3002 (8.700.597 - la parte decimale 0,59877 è stata omessa poiché il pixel è un'unità indivisibile).
256 tonalità di grigio sono come 256 colori differenti. Il primo intero k per cui vale la relazione 2k >=256 è 8 per cui mi servono 8 bit=1 byte per rappresentare le 256 tonalità di grigio. In altre parole ogni pixel richiede un byte. Essendo (21x0,3937)x(29,7x0,3937)x3002 i pixel presenti segue che la memoria richiesta in byte sia lo stesso numero: (21x0,3937)x(29,7x0,3937)x3002.
Ora un Mbyte è 1024x1024 byte per cui la soluzione è: (21x0,3937)x(29,7x0,3937)x3002/(1024x1024) [8,29753589630126953125] MByte.
Nota 1: dpi è l'acronimo di Dot Per Inches, in italiano punti per pollice, ovvero il numero di punti presenti in 2,54 cm lineari, e non quadrati come si potrebbe tendenzialmente pensare. Osservando l'immagine sottostante ci si rende conto di come, all'aumentare dei dpi, aumenti la qualità di un'immagine.
Nota 2: Il formato DIN è un formato standard
dei fogli di carta in tutto il mondo, eccetto Stati Uniti e Canada (la sigla DIN
sta per Deutsches Institut für Normung ovvero Istituto tedesco per la
standardizzazione). A0 è stato definito prendendo in considerazione un foglio
dalla superficie di 1 m² le cui proporzioni sono tali da consentire
l'ottenimento di tutti gli altri formati per dimezzamento mantenendo sempre le stesse proporzioni.
Nome | Dimensioni (mm) |
Superficie (m² circa) |
---|---|---|
A0 | 841x1189 | 1 |
A1 | 594x841 | 1/2 = 1/21 |
A2 | 420x594 | 1/4 = 1/22 |
A3 | 297x420 | 1/8 = 1/23 |
A4 | 210x297 | 1/16 = 1/24 |
A5 | 148x210 | 1/32 = 1/25 |
A6 | 105x148 | 1/64 = 1/26 |
Nota 3: Tabella di conversione
|
|