misterx
18-04-2002, 15:09
Ho scritto questo semplice programma il cui scopo è di prelevare da un file JPEG le dimensioni, in pixel, dell'immagine in esso
contenuta.
Ha però i seguenti problemi:
a) non mi è possibile conoscere a priori il numero di chunck presenti nel file
b) non so se sto agendo in modo pulito e corretto
Fate delle prove con differenti JPEG e noterete subito le differenze
Quando il chunck è uno solo, le dimensioni delle immagini vengono riportate nel modo corretto: no se si è in presenza di due o addirittura più chunck.
La morale è che desidererei ottenere del codice più pulito; potrei inserire un piccolo loop in modo da scansare i chunk superflui ma
sono sicuro che esiste un'altra strada più pulita.
Magari tra di voi c'è chi conosce la struttura dei file JPEG.
Spero di essere stato chiaro, altrimenti; chiedete pure.
ecco il codice:
#include<stdio.h>
main() // qui potete mettere i consueti: main(int argc, char *argv[])
{
FILE *fp;
int c, oldc = 0, JpegHeight, JpegWidth, test = 0;
fp = fopen("miojpeg.jpg","rb");
if(!fp) exit(20);
// test per conoscere quante sequenze 0xFF e 0x0C esistono nel file
// l'ultima sequenza, dopo 3 BYTE contiene le dimensioni H/W dell'immagine
while ( (c = fgetc(fp) ) != EOF)
{
if(oldc == 0xFF && c == 0xC0) test++;
oldc = c;
}
printf("Chunck Trovati: %d\n",test);
fclose(fp);
// riapro nuovamente il file
fp = fopen("miojpeg.jpg","rb");
if(!fp) exit(20);
// ricerco la sequenza di byte 0xFF e 0x0C
while ( (c = fgetc(fp) ) != EOF)
{
if(oldc == 0xFF && c == 0xC0) break;
oldc = c;
}
// salto tre BYTE
c = fgetc(fp); c = fgetc(fp); c = fgetc(fp);
// leggo 2 byte in una word
JpegHeight = (fgetc(fp) << 8) | (fgetc(fp) << 0);
JpegWidth = (fgetc(fp) << 8) | (fgetc(fp) << 0);
// mando in display il risultato
printf("Larghezza: %d\n",JpegWidth);
printf("Altezza: %d\n", JpegHeight);
fclose(fp);
contenuta.
Ha però i seguenti problemi:
a) non mi è possibile conoscere a priori il numero di chunck presenti nel file
b) non so se sto agendo in modo pulito e corretto
Fate delle prove con differenti JPEG e noterete subito le differenze
Quando il chunck è uno solo, le dimensioni delle immagini vengono riportate nel modo corretto: no se si è in presenza di due o addirittura più chunck.
La morale è che desidererei ottenere del codice più pulito; potrei inserire un piccolo loop in modo da scansare i chunk superflui ma
sono sicuro che esiste un'altra strada più pulita.
Magari tra di voi c'è chi conosce la struttura dei file JPEG.
Spero di essere stato chiaro, altrimenti; chiedete pure.
ecco il codice:
#include<stdio.h>
main() // qui potete mettere i consueti: main(int argc, char *argv[])
{
FILE *fp;
int c, oldc = 0, JpegHeight, JpegWidth, test = 0;
fp = fopen("miojpeg.jpg","rb");
if(!fp) exit(20);
// test per conoscere quante sequenze 0xFF e 0x0C esistono nel file
// l'ultima sequenza, dopo 3 BYTE contiene le dimensioni H/W dell'immagine
while ( (c = fgetc(fp) ) != EOF)
{
if(oldc == 0xFF && c == 0xC0) test++;
oldc = c;
}
printf("Chunck Trovati: %d\n",test);
fclose(fp);
// riapro nuovamente il file
fp = fopen("miojpeg.jpg","rb");
if(!fp) exit(20);
// ricerco la sequenza di byte 0xFF e 0x0C
while ( (c = fgetc(fp) ) != EOF)
{
if(oldc == 0xFF && c == 0xC0) break;
oldc = c;
}
// salto tre BYTE
c = fgetc(fp); c = fgetc(fp); c = fgetc(fp);
// leggo 2 byte in una word
JpegHeight = (fgetc(fp) << 8) | (fgetc(fp) << 0);
JpegWidth = (fgetc(fp) << 8) | (fgetc(fp) << 0);
// mando in display il risultato
printf("Larghezza: %d\n",JpegWidth);
printf("Altezza: %d\n", JpegHeight);
fclose(fp);