- // ----------------- SingleFrame/Multiframe JPEG
-
- long fragmentBegining; // for ftell, fseek
-
- bool b = gdcmHeader::IsJPEG2000();
-
- bool res = true;
- guint16 ItemTagGr,ItemTagEl;
- int ln;
-
- // Position on begining of Jpeg Pixels
-
- fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
- fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
- }
- fread(&ln,4,1,fp);
- if(GetSwapCode())
- ln=SwapLong(ln); // Basic Offset Table Item length
-
- if (ln != 0) {
- // What is it used for ?!?
- char *BasicOffsetTableItemValue = (char *)malloc(ln+1);
- fread(BasicOffsetTableItemValue,ln,1,fp);
- }
-
- // first Fragment initialisation
- fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
- fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
- }
-
- // parsing fragments until Sequence Delim. Tag found
-
- while ( ( ItemTagGr == 0xfffe) && (ItemTagEl != 0xe0dd) ) {
-
- // --- for each Fragment
-
- fread(&ln,4,1,fp);
- if(GetSwapCode())
- ln=SwapLong(ln); // Fragment Item length
-
- fragmentBegining=ftell(fp);
-
- if (b)
- res = (bool)gdcm_read_JPEG2000_file (destination); // Not Yet written
-
- else if (IsJPEGLossless()) { // JPEG LossLess : call to xmedcom JPEG
-
- JPEGLosslessDecodeImage (fp,
- (unsigned short *)destination,
- GetPixelSize()*8* GetSamplesPerPixel(),
- ln);
-
- res=1; // in order not to break the loop
-
- } // ------------------------------------- endif (IsJPEGLossless())
-
- else { // JPEG Lossy : call to xmedcon JPEG
- // (just to see if it works) --> it does NOT !
- /*
- JPEGLosslessDecodeImage (fp,
- (unsigned short *)destination,
- GetPixelSize()*8* GetSamplesPerPixel(),
- ln);
-
- */
- // JPEG Lossy : call to IJG 6b
-
- if (GetBitsStored() == 8) {
- res = (bool)gdcm_read_JPEG_file (destination); // Reading Fragment pixels
- } else {
- res = (bool)gdcm_read_JPEG_file12 (destination);// Reading Fragment pixels
- }
-
-
- }
-
- if (!res) break;
-
- destination = (char *)destination + taille * nBytes; // location in user's memory
- // for next fragment (if any)
-
- fseek(fp,fragmentBegining,SEEK_SET); // To be sure we start
- fseek(fp,ln,SEEK_CUR); // at the begining of next fragment
-
- ItemTagGr = ItemTagEl =0;
- fread(&ItemTagGr,2,1,fp); // Reading (fffe) : Item Tag Gr
- fread(&ItemTagEl,2,1,fp); // Reading (e000) : Item Tag El
- if(GetSwapCode()) {
- ItemTagGr=SwapShort(ItemTagGr);
- ItemTagEl=SwapShort(ItemTagEl);
- }
-
- } // endWhile parsing fragments until Sequence Delim. Tag found
-
- return res;
-}