Arpeda
29-10-2003, 15:45
ho un file pgm che inizia con i seguenti caratteri:
P5<spazio>768<spazio>576.<da qui iniziano i dati>
devo caricare questo file in memoria .. ho fato una struttura con i campi
ncols, nrows, data
per settare i valori della struttura uso questo codice:
char *numero = (char*) malloc (5 * sizeof(char));
file2 = fopen("frame.pgm","r");
if (fseek(file2, 3, SEEK_SET)<0) {
perror("Errore nella seek del file2");
exit (1);
}
fread(numero, 3, sizeof(char), file2); //width
due.ncols = atoi(numero);
fread(numero, 4, sizeof(char), file2); //height
due.nrows = atoi(numero);
if (fseek(file2, 15, SEEK_SET) < 0) {
perror("Errore nella seek del file2");
exit (1);
}
due.data = (unsigned char*) malloc (due.ncols * uno.nrows * sizeof(unsigned char));
fread(due.data, uno.ncols*uno.nrows, sizeof(unsigned char), file2);
due.rowinc = due.ncols * sizeof(unsigned char);
fclose(file2);
il codice funziona correttamente per il primo caricamento poi se provo a caricare una seconda immagine, su un'altra struttura, quando va a fare la prima fread si incarta e mi restituisce "7686"! ma come io gli ho detto di leggermi 3 caratteri e lui me ne restituisce 4?!?!
allora ho provato a fare la prima fread leggendo 2 caratteri e mi restituisce "76" (correttamente)
ho provato leggendo 4 caratteri e mi restituisce "768 " ....
la soluzione che ho trovato è:
deallocare numero prima di fare una nuova lettura da file, perchè la lettura del primo file settava numero a " 576" ... e quindi il 6 rimaneva a rompere le scatole ...
la cosa strana è che ho provato anche usando memset ed impostando numero a '\0' ma mi dava lo stesso problema ....
ciao
Arpeda
P5<spazio>768<spazio>576.<da qui iniziano i dati>
devo caricare questo file in memoria .. ho fato una struttura con i campi
ncols, nrows, data
per settare i valori della struttura uso questo codice:
char *numero = (char*) malloc (5 * sizeof(char));
file2 = fopen("frame.pgm","r");
if (fseek(file2, 3, SEEK_SET)<0) {
perror("Errore nella seek del file2");
exit (1);
}
fread(numero, 3, sizeof(char), file2); //width
due.ncols = atoi(numero);
fread(numero, 4, sizeof(char), file2); //height
due.nrows = atoi(numero);
if (fseek(file2, 15, SEEK_SET) < 0) {
perror("Errore nella seek del file2");
exit (1);
}
due.data = (unsigned char*) malloc (due.ncols * uno.nrows * sizeof(unsigned char));
fread(due.data, uno.ncols*uno.nrows, sizeof(unsigned char), file2);
due.rowinc = due.ncols * sizeof(unsigned char);
fclose(file2);
il codice funziona correttamente per il primo caricamento poi se provo a caricare una seconda immagine, su un'altra struttura, quando va a fare la prima fread si incarta e mi restituisce "7686"! ma come io gli ho detto di leggermi 3 caratteri e lui me ne restituisce 4?!?!
allora ho provato a fare la prima fread leggendo 2 caratteri e mi restituisce "76" (correttamente)
ho provato leggendo 4 caratteri e mi restituisce "768 " ....
la soluzione che ho trovato è:
deallocare numero prima di fare una nuova lettura da file, perchè la lettura del primo file settava numero a " 576" ... e quindi il 6 rimaneva a rompere le scatole ...
la cosa strana è che ho provato anche usando memset ed impostando numero a '\0' ma mi dava lo stesso problema ....
ciao
Arpeda