Buonasera. Ragazzi sto sbattendo la testa su questo problema che alla fine sono sicuro si rivelerà essere abbastanza semplice.
Sto tentando di scrivere una funzione che, dopo aver aperto un file .bmp, salva il valore di ogni pixel in un array di dimensione altezza_immagine*larghezza_immagine.
Al 10° byte dall'inizio del file ci dovrebbe essere il valore dell'offset da sommare all'inizio del file stesso per poter iniziare a leggere il valore di ogni pixel. Il problema è che quando tento di leggere il valore del primo pixel(si tratta di una immagine a 8 bit di profondità, quindi 1 byte per ogni pixel) mi viene fuori un valore negativo o comunque non veritiero. C'è qualche conversione che sto dimenticandomi di fare prima o dopo aver letto il valore? Probabilmente sarà un problema di casting...
Ecco la funzione:
void get_pixels(char path[]){
int i, j=0;
int offset;
char depth;
FILE *fp;
char bmp[5];
for(i=strlen(path)-4;i<strlen(path);i++){
bmp[j]=path[i];
j++;
}
if(strstr(bmp, ".bmp")==NULL){
printf("\nIndicare un file .bmp come immagine!\n");
exit(1);
}
fp = fopen(path, "r");
fseek(fp, 28, SEEK_SET);
fscanf(fp, "%c", &depth);
if(depth!=8){
printf("\nSelezionare una immagine a 8 bit!\n");
exit(2);
}
fseek(fp, 10, SEEK_SET);
fread(&offset, sizeof(offset), 1, fp);
printf("\n%d", offset);
fseek(fp, offset, SEEK_SET);
fscanf(fp, "%c", &pixels[0]);
printf("\n%d", pixels[0]);
fclose(fp);
}