![]() |
2° LABORATORIO: FORMATO BMP |
![]() |
Il formato BMP
Il formato BMP è uno dei
formati più semplici (sviluppato congiuntamente da Microsoft e IBM) ed è particolarmente diffuso sulle piattaforme Windows e OS/2. Un file BMP è un
file bitmap, ovvero registra un'immagine sotto forma di tabella di punti (pixel).
Gestisce i colori sia in RGB oppure mediante una palette indicizzata.
Il formato BMP è stato studiato in maniera tale da ottenere un bitmap
indipendente dalla periferica di visualizzazione (DIB, Device independent
bitmap).
La struttura di un file bitmap è la seguente :
- Titolo del file (in inglese File header)
- Titolo del bitmap (in inglese Information Header)
- Palette (opzionale)
- Corpo dell'immagine
Titolo del file (dall'inizio al 14-esimo byte)
Il titolo del file fornisce
delle informazioni:
- sul tipo di file (Bitmap),
- la sua dimensione
- dove cominciano le informazioni riguardanti l'immagine vera e propria.
Il titolo ha un tracciato composto quindi da questi quattro campi :
OFFSET | DIMENSIONE | DESCRIZIONE |
CODICE C |
||
00 inizio | 2 byte |
La firma (su due byte) [magic number], indica che si tratta di un
file BMP. I valori ammessi sono: BM => indica che si tratta di un Bitmap Windows. BA => indica che si tratta di un Bitmap OS/2. CI => indica che si tratta di un'icona di colore OS/2 CP => indica che si tratta di un puntatore di colore OS/2 IC => indica che si tratta di un'icona OS/2. PT => indica che si tratta di un puntatore OS/2. |
il comando fseek in C consente di spostarsi all'interno di un file indicando la posizione in byte. il comando fread serve per leggere all'interno di un file. Una volta letto il programma si posiziona alla fine dell'area che è stata appena letta per cui è pronto a leggere l'informazione successiva. Un parametro di fread è rappresentato dal numero di byte da leggere |
||
02° byte | 4 byte - int | La dimensione totale del file in byte (codificato a 4 byte) | |||
06° byte | 4 byte | Un campo riservato (su 4 byte) | |||
10° byte | 4 byte - int |
L'offset dell'immagine (su 4 Byte) , cioè dopo quanti byte (rispetto all'inizio) cominciano i dati che descrivono, punto per punto, l'immagine registrata |
Titolo dell'immagine (dal 14-esimo al 54 byte)
Il titolo dell'immagine fornisce delle informazioni sulle caratteristiche dell'immagine tra cui le sue dimensioni in pixel e i suoi colori. Il titolo dell'immagine ha un tracciato composto da queste voci :
OFFSET | DIMENSIONE | DESCRIZIONE | CODICE C | ||
14-esimo byte | 4 byte -int |
dimensione della sezione titolo dell'immagine in byte
(codificata su 4 byte). Alcuni dei valori esadecimali possibili sono i seguenti: a) 28 per Windows 3.1x, 95, NT,…, (40 byte) b) 0C per OS/2 1.x (12 byte) c) F0 per OS/2 2.x (64 byte) d) 6C per Windows 95, NT40,…, (40 byte) e) 7C per Windows 98/2000 (124 byte) |
il comando fseek in C consente di spostarsi all'interno di un file indicando la posizione in byte.
|
||
18-esimo byte | 4 byte - int | La larghezza dell'immagine (a 4 byte), cioè il numero di pixel orizzontale | |||
22-esimo byte | 4 byte - int | L'altezza dell'immagine (a 4 byte), cioè il numero di pixel verticale | |||
26-esimo byte | 2 byte - short | Il numero di piani (a 2 byte). Questo valore vale sempre 1 | |||
28-esimo byte | 2 byte - short |
La profondità di codifica
(bpp=bit per pixel) del colore (su 2 byte), ovvero il numero di bit usati
per codificare il colore. |
|||
30-esimo byte | 4 byte - int |
Il metodo di compressione (a 4 byte). Questo valore vale: a) 0 quando l'immagine non è compressa b) 1 per codifica RLE di 8 bit per pixel c) 2 per codifica RLE da 4 bit per pixel d) 3 per codifica BITFIELDS, significa che il colore è codificato con una tripla maschera rappresentata dalla palette e) 4 indica che il bitmap contiene un JPEG f) 5 indica che il bitmap contiene un PNG |
|||
34-esimo byte | 4 byte - int | La dimensione totale dell'immagine in byte (a 4 byte) esclusa le parti relative alle prime 3 sezioni | |||
38-esimo byte | 4 byte - int | La risoluzione orizzontale (a 4 byte) espressa in pixel per metro orizzontale | |||
42-esimo byte | 4 byte - int | La risoluzione verticale (su 4 byte) espressa in pixel per metro verticale | |||
46-esimo byte | 4 byte - int | Il numero di colori definiti nella palette (su 4 byte). Se vale 0 tutti i colori saranno utilizzati. | |||
50-esimo byte | 4 byte - int | Il numero di colori della palette (su 4 byte) che devono essere considerati importanti per la visualizzazione dell'immagine. Questo campo vale 0 quando tutti i colori hanno la medesima importanza |
Palette dell'immagine
La palette è opzionale. Quando
è presente, contiene 4 byte per ognuna delle
sue entrate ed esattamente:
- La componente blu (su un byte da 0 a 255)
- La componente verde (su un byte da 0 a 255)
- La componente rossa (su un byte da 0 a 255)
- Un campo riservato (su un byte) con tutti i bit posti a zero
Codifica dell'immagine
La codifica dell'immagine si
effettua scrivendo successivamente i bit corrispondenti ad ogni pixel. La
lettura delle info relative ad ogni pixel avviene linea
per linea cominciando dal pixel in basso a sinistra.
- Le immagini a 2 colori usano 1 bit per pixel, il che significa che un byte
permette di codificare 8 pixel
- Le immagini a 16 colori usano 4 bit per pixel, il che significa che un byte
permette di codificare 2 pixel
- Le immagini a 256 colori usano 8 bit per pixel, il che significa che un byte
codifica ogni pixel
- Le immagini in true color (rgb) usano 24 bit per pixel, il che significa che bisogna
avere 3 byte per codificare ogni pixel, assicurandosi di rispettare l'ordine di
alternanza blu, verde e rosso (si noti che la notazione è invertita rispetto
alla RGB).
Ogni linea di pixel dell'immagine deve essere descritta mediante un numero totale di byte multiplo
di 4. Se non è questo il caso, la linea deve essere completata con degli 0 in
modo da rispettarne il criterio appena indicato.
Analizziamo ora in dettaglio byte per byte un file bitmap 2 x 2 a 24 bit.
Esempio a 24 Bit 2x2 |
![]() |
Offset | Size | Hex Value | Valore | Descrizione |
---|---|---|---|---|
FILE HEADER | ||||
0h | 2 |
42 4D |
"BM" | Sigla |
2h | 4 |
46 00 00 00 |
70 Bytes | Dimensione del file |
6h | 2 |
00 00 00 00 |
riservato | Riservato |
Ah | 4 |
36 00 00 00 |
54 bytes | Scostamento (offset) in bytes dove inizia l'immagine bitmap vera e propria |
DIB HEADER | ||||
Eh | 4 |
28 00 00 00 |
40 bytes | lunghezza in byte di questo header. |
12h | 4 |
02 00 00 00 |
2 pixels | Larghezza in pixel del bitmap |
16h | 4 |
02 00 00 00 |
2 pixels | Altezza in pixel del bitmap |
1Ah | 2 |
01 00 |
1 piani | numero di piani - vale sempre 1 |
1Ch | 2 |
18 00 |
24 bits | Numero di bit (colore) per pixel |
1Eh | 4 |
00 00 00 00 |
0 | Nessuna compressione |
22h | 4 |
10 00 00 00 |
16 bytes | Dimensione in byte dell'immagine bitmap senza le 3 sezioni iniziali |
26h | 4 |
13 0B 00 00 |
2,835 pixels/metro | Risoluzione orizzontale in px al mt |
2Ah | 4 |
13 0B 00 00 |
2,835 pixels/metro | Risoluzione verticale in px al mt |
2Eh | 4 |
00 00 00 00 |
0 | Numero di colori da considerare nella palette (0 indica tutti) |
32h | 4 |
00 00 00 00 |
0 | zero indica che tutti i colori sono importanti |
INIZIO DEL BITMAP | ||||
36h | 3 |
00 00 FF |
0 0 255 | Rosso, Pixel (1,0) |
39h | 3 |
FF FF FF |
255 255 255 | Bianco, Pixel (1,1) |
3Ch | 2 |
00 00 |
0 0 | Riempimento con zeri poiché ogni linea deve contenere un multiplo di 4 byte |
3Eh | 3 |
FF 00 00 |
255 0 0 | Blu, Pixel (0,0) |
41h | 3 |
00 FF 00 |
0 255 0 | Verde, Pixel (0,1) |
44h | 2 |
00 00 |
0 0 | Riempimento con zeri poiché ogni linea deve contenere un multiplo di 4 byte |
LABORATORIO: (clicca qui per scaricare i files necessari) |
Consideriamo 4 file BMP 7x7 pixel con 2, 24(=16), 28(=256) e 224 colori.
Si osservino le dimensioni in byte (+ colori sono rappresentati maggiore è la dimensione dell'immagine). Per analizzare i contenuti utilizziamo l'eseguibile che abbiamo appena scaricato. Tale eseguibile è ottenuto compilando con DEVC++ il seguente sorgente
#include <stdio.h> #include <stdlib.h> // Variabili globali parametri BMP int iOffSet, i_w, i_h, headers_size,nBit; unsigned char Palette[1024]; // 4 byte x 256 colori void bin8(int n, char bina[]) { int i; for (i=0 ; i < 8 ; i++) { bina[7-i]=(n % 2)+'0'; n = (n - (n % 2) ) /2; } } void DumpFile(char *Nf) { unsigned char BitMap[64000L]; char dig[3], bina[8]; unsigned char d; int LungRow, nByte; int n=0, b=0,l; // Dimensione riga: multiplo di 4 byte LungRow=( (i_w*nBit)+(32-(i_w*nBit)%32) )/8; FILE *fpo; if ( (fpo=fopen(Nf,"rb"))==NULL ) { printf("File non trovato!!"); return; } fseek(fpo,iOffSet,0); printf("---------------------------------------------\n"); printf("SEZIONE --> Bitmap data dell'immagine\n"); printf("---------------------------------------------\n"); nByte=nBit/8; if (nByte<1) nByte=1; l=fread(BitMap, sizeof(unsigned char), LungRow, fpo); while (l == LungRow) { for ( n=0 ; n < LungRow ; n++) { if ( (nBit==24) || (nBit==8) ) { if (b==0) printf("["); printf("%02X",BitMap[n]); if (b==(nByte-1)) printf("]"); b=(b+1) % nByte; } else if (nBit==4) { sprintf(dig, "%02X", BitMap[n]); printf("[%c] [%c] ",dig[0],dig[1]); } else if (nBit==1) { l=(int)BitMap[n]; bin8(l,bina); printf("[%s]",bina); } } printf("\n"); l=fread(BitMap, sizeof(unsigned char), LungRow, fpo); } while (!feof(fpo)); printf("------------------------------------------------"); fclose(fpo); } void InfoBMP(char *Nf) { int n, j; FILE *fpo; fpo=fopen(Nf,"rb"); printf("################################################\n"); printf("# File: %s\n",Nf); printf("############################### vers. 1.1 ######\n"); // Variabili per leggere int int_var; short short_var; float float_var; char char_2[2]; printf("---------------------------------------------\n"); printf("SEZIONE --> Titolo del File\n"); printf("---------------------------------------------\n"); fseek(fpo,0,0); n = fread(char_2,2, 1, fpo); printf(" - Firma : %c%c\n",char_2[0],char_2[1]); fseek(fpo,2,0); fread(&int_var, 1, sizeof(int), fpo); printf(" - Dimensione File : %d\n",int_var); fseek(fpo,10,0); fread(&int_var, 1, sizeof(int), fpo); printf(" - Offset : %d\n",int_var); iOffSet=int_var; printf("---------------------------------------------\n"); printf("SEZIONE --> Titolo dell'immagine\n"); printf("---------------------------------------------\n"); fseek(fpo,14,0); n = fread(&int_var,sizeof(int), 1, fpo); printf(" - Dimensione Header Immagine : %d\n",int_var); headers_size=int_var+14; n = fread(&int_var,sizeof(int), 1, fpo); printf(" - Larghezza : %d\n",int_var); i_w=int_var; n = fread(&int_var,sizeof(int), 1, fpo); printf(" - Altezza : %d\n",int_var); i_h=int_var; fseek(fpo,28,0); n = fread(&short_var,sizeof(short), 1, fpo); printf(" - nr. bit per colore : %hd\n",short_var); nBit=short_var; n = fread(&int_var,sizeof(int), 1, fpo); if (int_var==0) printf(" - tipo compressione : Nessuna\n"); else if (int_var==1) printf(" - tipo compressione : RLE 8 Bit\n"); else if (int_var==2) printf(" - tipo compressione : RLE 4 Bit\n"); else if (int_var==3) printf(" - tipo compressione : Bitfields\n"); else printf(" - tipo compressione : %d\n",int_var); fread(&int_var, 1, sizeof(int), fpo); printf(" - bytes immagine senza header: %d\n",int_var); printf("---------------------------------------------\n"); printf("SEZIONE --> Palette dell'immagine\n"); printf("---------------------------------------------\n"); if (headers_size==iOffSet) printf(" - Palette : Non presente\n"); else { fseek(fpo,headers_size,0); fread(Palette, sizeof(unsigned char), iOffSet-headers_size, fpo); for (n=0, j=0 ; n <( (iOffSet-headers_size)/4 ); n++) { printf("%02X^col. :%02lX",n, Palette[j++]); printf("%02lX",Palette[j++]); printf("%02lX | ",Palette[j++]); if ( ( (n+1) % 4)==0) printf("\n"); j++; } } printf("\n"); fclose(fpo); DumpFile(Nf); } int main(int argc, char *argv[]) { nBit=atoi(argv[1]); if (nBit==1) InfoBMP(".\\bmp7x7_01bit.bmp"); else if (nBit==4) InfoBMP(".\\bmp7x7_04bit.bmp"); else if (nBit==8) InfoBMP(".\\bmp7x7_08bit.bmp"); else if (nBit==24) InfoBMP(".\\bmp7x7_24bit.bmp"); else printf("Numeri ammessi: 1, 4, 8, 24"); } |
Analizziamo ora l'output prodotto per ogni singolo file bmp
File: bmp7x7_01bit.bmp
![]() |
|
OUTPUT | OSSERVAZIONI |
C:\arch_def_1\Scuola\sitoBrescianet>info_bmp
1 ################################################ # File: .\bmp7x7_01bit.bmp ############################### vers. 1.1 ###### --------------------------------------------- SEZIONE --> Titolo del File --------------------------------------------- - Firma : BM - Dimensione File : 90 - Offset : 62 --------------------------------------------- SEZIONE --> Titolo dell'immagine --------------------------------------------- - Dimensione Header Immagine : 40 - Larghezza : 7 - Altezza : 7 - nr. bit per colore : 1 - tipo compressione : Nessuna - bytes immagine senza header: 28 --------------------------------------------- SEZIONE --> Palette dell'immagine --------------------------------------------- 00^col. :000000 | 01^col. :FFFFFF | --------------------------------------------- SEZIONE --> Bitmap data dell'immagine --------------------------------------------- [00000000][00000000][00000000][00000000] [00111000][00000000][00000000][00000000] [00010000][00000000][00000000][00000000] [00010000][00000000][00000000][00000000] [00110000][00000000][00000000][00000000] [00010000][00000000][00000000][00000000] [00000000][00000000][00000000][00000000] ------------------------------------------------ |
a) la codifica dell'immagine appare
ribaltata infatti la registrazione parte dal pixel in basso a sinistra. b) per ogni riga mi servono 7 pixel * 1 bit = 7 bit. Poiché il numero di byte per riga deve essere un multiplo di 4 devo aggiungere 25 bit fittizi in fondo c) La palette è composta da due colori (bianco e nero) indicizzati con la posizione 0 e 1. Nella mappa di bit al posto del colore viene inserita la posizione nella palette del colore corrispondente. |
File: bmp7x7_04bit.bmp
![]() |
|
OUTPUT | OSSERVAZIONI |
C:\arch_def_1\Scuola\sitoBrescianet>info_bmp
4 ################################################ # File: .\bmp7x7_04bit.bmp ################################################ --------------------------------------------- SEZIONE --> Titolo del File --------------------------------------------- - Firma : BM - Dimensione File : 146 - Offset : 118 --------------------------------------------- SEZIONE --> Titolo dell'immagine --------------------------------------------- - Dimensione Header Immagine : 40 - Larghezza : 7 - Altezza : 7 - nr. bit per colore : 4 - tipo compressione : Nessuna - bytes immagine senza header: 28 --------------------------------------------- SEZIONE --> Palette dell'immagine --------------------------------------------- 00^col. :000000 | 01^col. :000080 | 02^col. :008000 | 03^col. :008080 | 04^col. :800000 | 05^col. :800080 | 06^col. :808000 | 07^col. :808080 | 08^col. :C0C0C0 | 09^col. :0000FF | 0A^col. :00FF00 | 0B^col. :00FFFF | 0C^col. :FF0000 | 0D^col. :FF00FF | 0E^col. :FFFF00 | 0F^col. :FFFFFF | --------------------------------------------- SEZIONE --> Bitmap data dell'immagine --------------------------------------------- [C] [C] [C] [0] [A] [A] [A] [0] [C] [C] [C] [0] [A] [A] [A] [0] [C] [C] [C] [0] [A] [A] [A] [0] [0] [0] [0] [0] [0] [0] [0] [0] [F] [F] [F] [0] [9] [9] [9] [0] [F] [F] [F] [0] [9] [9] [9] [0] [F] [F] [F] [0] [9] [9] [9] [0] ------------------------------------------------ |
a) si noti come la codifica dei colori
dell'immagine utilizzi l'indice della palette b) l'indice della palette parte da 0 c) Per ogni riga mi servono 7 pixel * 4 bit = 28 bit. Poiché il numero di byte per riga deve essere un multiplo di 4 byte devo aggiungerne 4 bit in fondo |
File: bmp7x7_08bit.bmp
![]() |
|
OUTPUT | OSSERVAZIONI |
C:\arch_def_1\Scuola\sitoBrescianet>info_bmp
8 ################################################ # File: .\bmp7x7_08bit.bmp ################################################ --------------------------------------------- SEZIONE --> Titolo del File --------------------------------------------- - Firma : BM - Dimensione File : 1134 - Offset : 1078 --------------------------------------------- SEZIONE --> Titolo dell'immagine --------------------------------------------- - Dimensione Header Immagine : 40 - Larghezza : 7 - Altezza : 7 - nr. bit per colore : 8 - tipo compressione : Nessuna - bytes immagine senza header: 56 --------------------------------------------- SEZIONE --> Palette dell'immagine --------------------------------------------- 00^col. :000000 | 01^col. :000080 | 02^col. :008000 | 03^col. :008080 | 04^col. :800000 | 05^col. :800080 | 06^col. :808000 | 07^col. :C0C0C0 | 08^col. :C0DCC0 | 09^col. :F0CAA6 | 0A^col. :002040 | 0B^col. :002060 | 0C^col. :002080 | 0D^col. :0020A0 | 0E^col. :0020C0 | 0F^col. :0020E0 | 10^col. :004000 | 11^col. :004020 | 12^col. :004040 | 13^col. :004060 | 14^col. :004080 | 15^col. :0040A0 | 16^col. :0040C0 | 17^col. :0040E0 | 18^col. :006000 | 19^col. :006020 | 1A^col. :006040 | 1B^col. :006060 | 1C^col. :006080 | 1D^col. :0060A0 | 1E^col. :0060C0 | 1F^col. :0060E0 | 20^col. :008000 | 21^col. :008020 | 22^col. :008040 | 23^col. :008060 | 24^col. :008080 | 25^col. :0080A0 | 26^col. :0080C0 | 27^col. :0080E0 | 28^col. :00A000 | 29^col. :00A020 | 2A^col. :00A040 | 2B^col. :00A060 | 2C^col. :00A080 | 2D^col. :00A0A0 | 2E^col. :00A0C0 | 2F^col. :00A0E0 | 30^col. :00C000 | 31^col. :00C020 | 32^col. :00C040 | 33^col. :00C060 | 34^col. :00C080 | 35^col. :00C0A0 | 36^col. :00C0C0 | 37^col. :00C0E0 | 38^col. :00E000 | 39^col. :00E020 | 3A^col. :00E040 | 3B^col. :00E060 | 3C^col. :00E080 | 3D^col. :00E0A0 | 3E^col. :00E0C0 | 3F^col. :00E0E0 | 40^col. :400000 | 41^col. :400020 | 42^col. :400040 | 43^col. :400060 | 44^col. :400080 | 45^col. :4000A0 | 46^col. :4000C0 | 47^col. :4000E0 | 48^col. :402000 | 49^col. :402020 | 4A^col. :402040 | 4B^col. :402060 | 4C^col. :402080 | 4D^col. :4020A0 | 4E^col. :4020C0 | 4F^col. :4020E0 | 50^col. :404000 | 51^col. :404020 | 52^col. :404040 | 53^col. :404060 | 54^col. :404080 | 55^col. :4040A0 | 56^col. :4040C0 | 57^col. :4040E0 | 58^col. :406000 | 59^col. :406020 | 5A^col. :406040 | 5B^col. :406060 | 5C^col. :406080 | 5D^col. :4060A0 | 5E^col. :4060C0 | 5F^col. :4060E0 | 60^col. :408000 | 61^col. :408020 | 62^col. :408040 | 63^col. :408060 | 64^col. :408080 | 65^col. :4080A0 | 66^col. :4080C0 | 67^col. :4080E0 | 68^col. :40A000 | 69^col. :40A020 | 6A^col. :40A040 | 6B^col. :40A060 | 6C^col. :40A080 | 6D^col. :40A0A0 | 6E^col. :40A0C0 | 6F^col. :40A0E0 | 70^col. :40C000 | 71^col. :40C020 | 72^col. :40C040 | 73^col. :40C060 | 74^col. :40C080 | 75^col. :40C0A0 | 76^col. :40C0C0 | 77^col. :40C0E0 | 78^col. :40E000 | 79^col. :40E020 | 7A^col. :40E040 | 7B^col. :40E060 | 7C^col. :40E080 | 7D^col. :40E0A0 | 7E^col. :40E0C0 | 7F^col. :40E0E0 | 80^col. :800000 | 81^col. :800020 | 82^col. :800040 | 83^col. :800060 | 84^col. :800080 | 85^col. :8000A0 | 86^col. :8000C0 | 87^col. :8000E0 | 88^col. :802000 | 89^col. :802020 | 8A^col. :802040 | 8B^col. :802060 | 8C^col. :802080 | 8D^col. :8020A0 | 8E^col. :8020C0 | 8F^col. :8020E0 | 90^col. :804000 | 91^col. :804020 | 92^col. :804040 | 93^col. :804060 | 94^col. :804080 | 95^col. :8040A0 | 96^col. :8040C0 | 97^col. :8040E0 | 98^col. :806000 | 99^col. :806020 | 9A^col. :806040 | 9B^col. :806060 | 9C^col. :806080 | 9D^col. :8060A0 | 9E^col. :8060C0 | 9F^col. :8060E0 | A0^col. :808000 | A1^col. :808020 | A2^col. :808040 | A3^col. :808060 | A4^col. :808080 | A5^col. :8080A0 | A6^col. :8080C0 | A7^col. :8080E0 | A8^col. :80A000 | A9^col. :80A020 | AA^col. :80A040 | AB^col. :80A060 | AC^col. :80A080 | AD^col. :80A0A0 | AE^col. :80A0C0 | AF^col. :80A0E0 | B0^col. :80C000 | B1^col. :80C020 | B2^col. :80C040 | B3^col. :80C060 | B4^col. :80C080 | B5^col. :80C0A0 | B6^col. :80C0C0 | B7^col. :80C0E0 | B8^col. :80E000 | B9^col. :80E020 | BA^col. :80E040 | BB^col. :80E060 | BC^col. :80E080 | BD^col. :80E0A0 | BE^col. :80E0C0 | BF^col. :80E0E0 | C0^col. :C00000 | C1^col. :C00020 | C2^col. :C00040 | C3^col. :C00060 | C4^col. :C00080 | C5^col. :C000A0 | C6^col. :C000C0 | C7^col. :C000E0 | C8^col. :C02000 | C9^col. :C02020 | CA^col. :C02040 | CB^col. :C02060 | CC^col. :C02080 | CD^col. :C020A0 | CE^col. :C020C0 | CF^col. :C020E0 | D0^col. :C04000 | D1^col. :C04020 | D2^col. :C04040 | D3^col. :C04060 | D4^col. :C04080 | D5^col. :C040A0 | D6^col. :C040C0 | D7^col. :C040E0 | D8^col. :C06000 | D9^col. :C06020 | DA^col. :C06040 | DB^col. :C06060 | DC^col. :C06080 | DD^col. :C060A0 | DE^col. :C060C0 | DF^col. :C060E0 | E0^col. :C08000 | E1^col. :C08020 | E2^col. :C08040 | E3^col. :C08060 | E4^col. :C08080 | E5^col. :C080A0 | E6^col. :C080C0 | E7^col. :C080E0 | E8^col. :C0A000 | E9^col. :C0A020 | EA^col. :C0A040 | EB^col. :C0A060 | EC^col. :C0A080 | ED^col. :C0A0A0 | EE^col. :C0A0C0 | EF^col. :C0A0E0 | F0^col. :C0C000 | F1^col. :C0C020 | F2^col. :C0C040 | F3^col. :C0C060 | F4^col. :C0C080 | F5^col. :C0C0A0 | F6^col. :F0FBFF | F7^col. :A4A0A0 | F8^col. :808080 | F9^col. :0000FF | FA^col. :00FF00 | FB^col. :00FFFF | FC^col. :FF0000 | FD^col. :FF00FF | FE^col. :FFFF00 | FF^col. :FFFFFF | --------------------------------------------- SEZIONE --> Bitmap data dell'immagine --------------------------------------------- [FC][FC][FC][00][FA][FA][FA][00] [FC][FC][FC][00][FA][FA][FA][00] [FC][FC][FC][00][FA][FA][FA][00] [00][00][00][00][00][00][00][00] [FF][FF][FF][00][F9][F9][F9][00] [FF][FF][FF][00][F9][F9][F9][00] [FF][FF][FF][00][F9][F9][F9][00] ------------------------------------------------ |
a) si noti come la codifica dei colori
dell'immagine utilizzi l'indice della palette b) l'indice della palette parte da 0 c) per ogni riga mi servono 7 pixel * 8 bit = 7 byte. Poiché il numero di byte per riga deve essere un multiplo di 4 devo aggiungerne un byte fittizio in fondo |
File: bmp7x7_24bit.bmp
![]() |
|
OUTPUT | OSSERVAZIONI |
C:\arch_def_1\Scuola\sitoBrescianet>info_bmp 24 ################################################ # File: .\bmp7x7_24bit.bmp ################################################ --------------------------------------------- SEZIONE --> Titolo del File --------------------------------------------- - Firma : BM - Dimensione File : 222 - Offset : 54 --------------------------------------------- SEZIONE --> Titolo dell'immagine --------------------------------------------- - Dimensione Header Immagine : 40 - Larghezza : 7 - Altezza : 7 - nr. bit per colore : 24 - tipo compressione : Nessuna - bytes immagine senza header: 168 --------------------------------------------- SEZIONE --> Palette dell'immagine --------------------------------------------- - Palette : Non presente --------------------------------------------- SEZIONE --> Bitmap data dell'immagine --------------------------------------------- [FF0000][FF0000][FF0000][000000][00FF00][00FF00][00FF00][000000] [FF0000][FF0000][FF0000][000000][00FF00][00FF00][00FF00][000000] [FF0000][FF0000][FF0000][000000][00FF00][00FF00][00FF00][000000] [000000][000000][000000][000000][000000][000000][000000][000000] [FFFFFF][FFFFFF][FFFFFF][000000][0000FF][0000FF][0000FF][000000] [FFFFFF][FFFFFF][FFFFFF][000000][0000FF][0000FF][0000FF][000000] [FFFFFF][FFFFFF][FFFFFF][000000][0000FF][0000FF][0000FF][000000] ------------------------------------------------- |
a) si noti come la codifica dei colori
dell'immagine parta dal pixel in basso a sinistra. b) il colore è espresso in modo ribaltato BGR c) non è definita alcuna palette nella codifica a 24 bit d) per ogni riga mi servono 7 pixel * 24 bit = 21 byte. Poiché il numero di byte per riga deve essere un multiplo di 4 byte devo aggiungerne tre fittizi in fondo |