Moin,
ich poste dies bei "sprachübergreifende Themen", weil es zwar um ein Analyseprogramm geht, aber auch um Jpegs an sich.
Ich habe von hier Code, der die Blocklänge und die Position des eigentlichen Motivs in der Jpeg-Datei findet.
Es kommt bei einigen Bildern vor, dass nichts gefunden wird. Ich kann leider kein Muster erkennen. Ich kann nicht sagen
Also Zeile 31 – er erkennt kein 0xFF
Was sagt das über die Datei aus? Bild corrupt?
ich poste dies bei "sprachübergreifende Themen", weil es zwar um ein Analyseprogramm geht, aber auch um Jpegs an sich.
Ich habe von hier Code, der die Blocklänge und die Position des eigentlichen Motivs in der Jpeg-Datei findet.
Es kommt bei einigen Bildern vor, dass nichts gefunden wird. Ich kann leider kein Muster erkennen. Ich kann nicht sagen
- es kommt nur bei Screenshots vor,
- oder bei Internetbildern,
- oder Smartphonebildern,
- oder Bildern, die von einem Bearbeitungsprogramm (GIMP) stammen.
Also Zeile 31 – er erkennt kein 0xFF
Was sagt das über die Datei aus? Bild corrupt?
C-Quellcode
- [/font]//Gets the JPEG size from the array of
- data passed to the function, file reference:
- http://www.obrador.com/essentialjpeg/headerinfo.htm
- static char get_jpeg_size(unsigned char* data, unsigned int data_size, unsigned short *width, unsigned short *height) {
- //Check for valid JPEG image
- int i=0; // Keeps track of the position within the file
- if(data[i] == 0xFF && data[i+1] == 0xD8 && data[i+2] == 0xFF && data[i+3] == 0xE0) {
- i += 4;
- // Check for valid JPEG header (null terminated JFIF)
- if(data[i+2] == 'J' && data[i+3] == 'F' &&
- data[i+4] == 'I' && data[i+5] == 'F' && data[i+6] ==
- 0x00) {
- //Retrieve the block length of the first block since the first block will not contain the size of file
- unsigned short block_length = data[i] * 256 + data[i+1];
- while(i<data_size) {
- i+=block_length; //Increase the file index to get to the next block
- if(i >= data_size) return false; //Check to protect against segmentation faults
- if(data[i] != 0xFF) return false; //Check that we are truly at the start of another block
- if(data[i+1] == 0xC0) { //0xFFC0 is the "Start of frame" marker which contains the file size
- //The structure of the 0xFFC0 block is quite simple [0xFFC0][ushort length][uchar precision][ushort x][ushort y]
- *height = data[i+5]*256 + data[i+6];
- *width = data[i+7]*256 + data[i+8];
- return true;
- }
- else
- {
- i+=2; //Skip the block marker
- block_length = data[i] * 256 + data[i+1]; //Go to the next block
- }
- }
- return false; //If this point is reached then no size was found
- }else{ return false; } //Not a valid JFIF string
- }else{ return false; } //Not a valid SOI header
- }[font='arial,helvetica,sans-serif']