Ragazzi, premetto che non sapevo assolutamente dove piazzare questa discussione, perché non tratta pienamente di programmazione ma allo stesso tempo non se ne discosta nemmeno più di tanto, quindi scusatemi in anticipo.
Ecco il mio problema. Ho scritto una funzione che legge il valore dei pixel di una immagine. Per farlo ha bisgono di verificare che l'immagine sottopostagli è in formato .bmp e che la profondità del colore sia a 8 bit. In un comune file .bmp, l'informazione riguardante la profondità del colore si trova al 28° byte del file binario, il problema è che se cerco di leggere tale valore da un file .bmp creato da Photohop ottengo uno '0' al posto di un '8' come valore della profondità, al 28° byte. Qualcuno può aiutarmi a risolvere il mio problema? Suppongo che i file gestiti da Photoshop salvino le informazioni al loro interno in modo differente, ma al riguardo googlando non ho trovato niente che mi sia stato d'aiuto...
In ogni caso, la funzione che uso per leggere i pixel è la seguente:
codice:
void get_pixels(char path[]){
FILE *fp;
int i, j=0, dim=0, count=0;
int offset;
unsigned char depth=NULL;
char bmp[5];
fp = fopen(path, "rb");
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);
}
fseek(fp, 28, SEEK_SET);
fread(&depth, sizeof(depth), 1, fp);
printf("\n%d", 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);
dim=(4-(ima_lar % 4))+ima_lar;
j=0;
fseek(fp, offset, SEEK_SET);
for(i=0;i<ima_alt*dim;i++){
if(count!=ima_lar){
fread(&pixels[j], sizeof(char), 1, fp);
printf("\n%d: %d", j+1, pixels[j]);
j++;
count++;
}else{
fseek(fp, 1, SEEK_CUR);
count=0;
}
}
fclose(fp);
}
Vi ringrazio anticipatamente per la collaborazione...