CALCOLO DELLA MEMORIA NECESSARIA PER GESTIRE UN'IMMAGINE BITMAP

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

per trasformare in moltiplicare per
1 pollice centimetri 2,54
1 piede metri 0,3048
1 iarda metri 0,9144 
1 braccio metri 1,83 
1 pertica metri 5,03 
1 catena metrica metri 20,11 
1 furlong metri 201,17 
1 miglio chilometri 1,6093 
1 miglio marino chilometri 1,85315 
1 lega chilometri 5,55978
per trasformare in moltiplicare per
1 centimetro pollici 0,3937
1 metro piedi 3,2808
1 metro iarde 1,0933
1 metro braccio 0,5464
1 metro pertica 0,1988
1 metro catena metrica 0,0497
1 metro furlong 0,00497
1 chilometro miglia 0,6214
1 chilometro miglia marine 0,5396
1 chilometro leghe 0,1798