Il formato bitmap è relativamente semplice, il problema è che per fare quello che chiedi dovresti conoscerlo.

Essenzialmente se consideriamo la versione 3 (lasciando perdere la 4 e la 5) dovrai innanzitutto andarti a leggere dal file bitmap i due header: BITMAPFILEHEADER e BITMAPINFOHEADER. In particolare dovrai conoscere l'offset dalla mappa dei pixel (per sapere da dove iniziare a riempire la tua matrice) e la profondità dell'immagine (poichè le bitmap con 1, 4 e 8 bit per pixel contengono una tavolozza dei colori subito dopo il secondo header, mentre le bitmap con 16, 24 o 32 bit per pixel utilizzano la rappresentazione del colore attraverso le componenti cromatiche RGB).

Ti faccio un esempio per renderti più chiare le idee, supponi di avere una bitmap 8 bit per pixel con tavolozza.

a) BITMAPFILEHEADER: Sono esattamente 14 bytes, gli ultimi 4 rappresentano l'offset del primo byte della mappa dei pixel.

b) BITMAPINFOHEADER: Sono esattamente 40 bytes, la profondità (BitCount - 8 bit per pixel la trovi nel 14-esimo e 15-esimo byte).

c) Palette (tavolozza): Sono le 256 componenti RGB:

Se ad esempio le prime due componenti sono:
255 255 255
0 0 0

Significa che nella successiva mappa dei pixel se trovi 1 il colore corrispondente è il bianco(255, 255, 255); se trovi 2 il colore corrispondente è il nero(0, 0, 0).


Se non ci fosse stata la palette avresti trovato appunto al posto degli indici (1, 2, ... ) le intere componenti cromatiche.

Studiati il formato.

Ps: su MSDN trovi classi già implementate per poter lavorare con questo tipo di formato, a meno che tu non decida di fartene una per conto tuo.

Ciao