PDA

View Full Version : [C++] Altezza e lunghezza di un'immagine JPG


Loprix
05-09-2003, 21:53
Ho disperato bisogno di determinare a tempo di esecuzione lunghezza ed altezza (in piexel) di un'immagine JPEG... (dovrò compilare con il Visual C++ 6.0)
Grazie a ki saprà darmi una mano.... ;)

mjordan
05-09-2003, 22:35
Originariamente inviato da Loprix
Ho disperato bisogno di determinare a tempo di esecuzione lunghezza ed altezza (in piexel) di un'immagine JPEG... (dovrò compilare con il Visual C++ 6.0)
Grazie a ki saprà darmi una mano.... ;)

Prova un po questo:

http://www.tonec.com/download4.html

Loprix
06-09-2003, 01:43
Originariamente inviato da mjordan
Prova un po questo:

http://www.tonec.com/download4.html

grazie ma... ehm... volevo evitare i controlli ActiveX (soprattutto quelli A PAGAMENTO....)

cionci
06-09-2003, 09:34
Se ne hai voglia: http://www.wotsit.org/download.asp?f=itu-1150PDF

Loprix
06-09-2003, 10:27
Originariamente inviato da cionci
Se ne hai voglia: http://www.wotsit.org/download.asp?f=itu-1150PDF
ehm... il link diretto nn va (sai, vogliono ke si guardino i loro banner pubblicitari...) cmq. ho trovato lo zip, ora gli dò un'occhiata, ti faccio sapere... grazie, 6 er mejo.......:cool: :cool:

Loprix
07-09-2003, 18:26
OK, ho letto le specifiche del formato ed ho scritto (ahimé) tutto solo la funzione... La riporto sperando possa essere utile a qualcun altro... :D
La funzione ritorna 0 in caso di successo, un codice di errore altrimenti.


#include <stdio.h>

#define SUCCESS 0x00
#define IO_ERR 0x01
#define BAD_FORMAT 0x02

inline int test(unsigned short c){
return (c == 0xC0 ||
c == 0xC1 ||
c == 0xC2 ||
c == 0xC3 ||
c == 0xC5 ||
c == 0xC6 ||
c == 0xC7 ||
c == 0xC9 ||
c == 0xCA ||
c == 0xCB ||
c == 0xCD ||
c == 0xCE ||
c == 0xCF );
}

int GetJPEGSize(char* filename, short& X, short& Y){
const int SIZE = 300; // dimensione del buffer
int ret, n = 0;
unsigned char buff[SIZE]; // buffer di lettura
X = Y = 0;
FILE * pFile = fopen(filename,"rb");
if (pFile == NULL)
return IO_ERR;
ret = fread (buff,1,SIZE,pFile);
ret -= 8; // SOF deve essere nei primi (ret-8) bytes
fclose (pFile);
// cerco il flag SOF: Y si trova dopo 5 bytes e X dopo 7
while (n<ret && !(buff[n]== 0xFF && test(buff[n+1]))){
n++;
}
if (n>=ret) return BAD_FORMAT; // FLAG SOF non trovato
Y = (buff[n+5]<<8)|(buff[n+6]);
X = (buff[n+7]<<8)|(buff[n+8]);
return SUCCESS;
}

cionci
07-09-2003, 18:45
Grande ;)

mjordan
07-09-2003, 19:03
Bravissimo. Così si fa ;) Sei un grande ;)

Loprix
07-09-2003, 19:07
Originariamente inviato da cionci
Grande ;)
Beh... in rete non ho trovato nulla già pronto... :( cmq. fanno sempre piacere i complimenti del :ave: maestro

Loprix
07-09-2003, 19:10
Originariamente inviato da mjordan
Bravissimo. Così si fa ;) Sei un grande ;)

Ma mi state prendendo in giro?? :wtf:

cionci
07-09-2003, 19:13
No...bravo davvero... Si studia e poi si scrive il codice...magari per te è normale...ma non per qualche persona che frequenta questo forum :)

Loprix
07-09-2003, 19:25
Originariamente inviato da cionci
No...bravo davvero... Si studia e poi si scrive il codice...magari per te è normale...ma non per qualche persona che frequenta questo forum :)

Beh... senza lo studio non si fa molta strada... Programmare non vuol dire solo mettere insieme 4 funzioni scritte da altri... :rolleyes:

Buona serata a tutti... ho bisogno di uscire, le DirectShow® delle DirectX 9.0 mi stanno facendo impazzireeeee!!!!! :ncomment:
Ciauz...

mjordan
07-09-2003, 19:39
Originariamente inviato da Loprix
Beh... senza lo studio non si fa molta strada... Programmare non vuol dire solo mettere insieme 4 funzioni scritte da altri... :rolleyes:

Buona serata a tutti... ho bisogno di uscire, le DirectShow® delle DirectX 9.0 mi stanno facendo impazzireeeee!!!!! :ncomment:
Ciauz...
:mano: