Leggere informazioni da BMP

di il
3 risposte

Leggere informazioni da BMP

Salve a tutti ragazzi. Sto cercando di scrivere un programmino che sia in grado di memorizzare all'interno di una matrice i valori di ogni singolo pixel recuperati da un file in formato .bmp. Diciamo che i problemi sono sorti un po' prestino. Non riesco a capire bene dove iniziano, all'interno del file, le informazioni che mi interessano.
Allora, l'immagine in questione, intanto, è una semplice immaginetta 10x10 dove il primo pixel è nero(o quasi) e tutti gli altri sono bianchi. Un file BMP so che all'inizio ha la firma(2 byte), la dimensione(4 byte), un campo riservato(4 byte) e l'offset dell'immagine(4 byte); quest'ultimo dovrebbe indicare l'offset, in byte, dall'inizio del file, per arrivare all'inizio delle informazioni riguardanti i pixel, giusto? Quindi, facendo due calcoli, dopo i primi 10 byte dovrei trovare questo offset, quindi faccio:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define filename "pixel.bmp"

int main(){
FILE *fp;
int i, j=0;
char data;

	if(!(fp=fopen(filename, "r"))){
		printf("\nErrore durante l'apertura del file.\n");
		return 1;
	}

	fseek(fp, 10, 0);
	
	for(i=0;i<4;i++){
		fread(&data, sizeof(data), 1, fp);
		printf("%d\n", data);
	}
	
	fclose(fp);
	
return 0;
}
Per il mio file, il primo numero che mi ricavo alla posizione 10 è 82, quindi suppongo che dovrò semplicemente riscrivere, dentro la funzione fseek, 82 al posto di 10. Così facendo ho questo risultato:
2
0
0
0
2 dovrebbe indicare il valore del primo pixel, o mi sto sbagliando? E' questo l'inizio delle informazioni che mi servono?
Grazie in anticipo.

3 Risposte

  • Re: Leggere informazioni da BMP

    Ragazzi ho risolto da solo. Soltanto mi resta un altro problemuccio. Ovvero: come sono codificati i vari colori? Cioè, non ho i vari valori RGB, ma mi ritrovo soltanto due bytes per pixel, come faccio a capire questi valori come sono, "tradotti" in RGB? Per esempio, il bianco me lo porta come -1 127, mentre il nero 0 0.
  • Re: Leggere informazioni da BMP

    E' corretto ma nel tuo codice manca la seconda seek ...

    Ovviamente devi tenere conto del formato (tipo bitmap e profondità colori) per interpretare correttamente l'array dei colori. Studia bene quello che trovi in

    http://en.wikipedia.org/wiki/BMP_file_forma

    al punto

    Pixel storage

    e

    Pixel array (bitmap data)

    Attenzione ad usare un "unsigned char" e non un char per ottenere i dati.
  • Re: Leggere informazioni da BMP

    Attenzione ad usare un "unsigned char" e non un char per ottenere i dati.
    Ecco cosa mi fregava! XD A tutto il resto ci ero arrivato dopo un po', ma quello non mi veniva proprio in mente. Infatti al posto di 255 mi veniva -1... Grazie mille!
Devi accedere o registrarti per scrivere nel forum
3 risposte