Salve a tutti, dovrei:
1. acquisire i pixel di un file in una matrice
2. effettuare delle operazioni su questi dati,
3. creare una copia del file bitmap con la matrice di dati modificata.
Siccome la bitmap è a scale di grigi ed 8bit ogni, da come ho capito dal formato bitmap, c'è un solo valore da salvare nei dati e non 3 come per le RGB, giusto ?
Detto questo, per acquisire i pixel in una matrice di char faccio così, tralasciando le definizioni di header e quant'altro :
Anche se non ho capito bene il secondo for innestato che cosa fa, non l'ho fatto interamente io.codice:fseek(fd, hdr.offset - sizeof(hdr) - sizeof(infoHdr), SEEK_CUR); for(y = 0; y < infoHdr.height; y++){ for(x = 0; x < infoHdr.width; x++){ (*dst)[(y * infoHdr.width + x)] = fgetc(fd); } for(x = 0; x < (4 - (3 * infoHdr.width) % 4) % 4; x++) fgetc(fd); }
Detto questo passo direttamente al punto 3, magari per il punto 2 apro un 3d apposito poichè è abbastanza complesso,
quindi mettiamo che ho fatto delle modifiche sulla matrice,
devo creare un nuovo file bitmap con la nuova matrice di dati, e faccio così:
dove modded è la matrice di caratteri modificata.codice:a=fread(&hdr, sizeof(hdr), 1, origine); fwrite(&hdr, sizeof(hdr), 1, copy); a=fread(&infoHdr, sizeof(infoHdr), 1, origine); fwrite(&infoHdr, sizeof(infoHdr), 1, copy); fseek(copy, sizeof(hdr) + sizeof(infoHdr), SEEK_SET); fwrite(modded,256*256,1,copy);
Ora ho fatto una prova senza apportare modifiche alla matrice ed il problema è che la prima striscia superiore del nuovo file immagine, non è come dovrebbe, ma un pò sfalsata.
E' corretto quello che faccio e come lo faccio ??
Inoltre per poter operare sulla matrice di dati dell'immagine, opero delle conversioni da unsigned char to unsigned int e viceversa con dei semplici cast, e poi mi viene a creare un pò un macello sull'immagine,
anche in tal caso, a livello teorico se opero delle conversioni di questo tipo vado ad incidere sull'immagine ?
grazie per l'aiuto, e mi scuso se qualcosa non vi è chiaro, magari ve lo rispiego meglio,
il problema è un pò complesso da riassumere tutto insieme!

Rispondi quotando