From fc41bb9afa4edfc95108e8fe9ab8c2554835dd0f Mon Sep 17 00:00:00 2001 From: jpr Date: Mon, 27 Oct 2003 14:01:12 +0000 Subject: [PATCH] removal of now useless LibIDO Jpeg Lossless .h and .cxx --- src/Makefile.am | 8 +- src/gdcmFile.cxx | 43 +++-- src/gdcmHeaderHelper.cxx | 7 +- src/gdcmJpegIdo.cxx | 384 --------------------------------------- src/gdcmParse.cxx | 1 - src/iddcmjpeg.h | 60 ------ 6 files changed, 38 insertions(+), 465 deletions(-) delete mode 100644 src/gdcmJpegIdo.cxx delete mode 100644 src/iddcmjpeg.h diff --git a/src/Makefile.am b/src/Makefile.am index aad63b01..f073d71b 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -30,8 +30,7 @@ libgdcm_la_SOURCES= \ gdcmJpeg12.cxx \ gdcmJpeg2000.cxx \ gdcmRLE.cxx \ - gdcmParse.cxx \ - gdcmJpegIdo.cxx + gdcmParse.cxx libgdcmincludedir = $(includedir) libgdcminclude_HEADERS = \ @@ -50,6 +49,5 @@ libgdcminclude_HEADERS = \ gdcmFile.h EXTRA_DIST = \ - gdcmUtil.h \ - gdcmIdo.h \ - iddcmjpeg.h + gdcmUtil.h + diff --git a/src/gdcmFile.cxx b/src/gdcmFile.cxx index af62cd8f..ed51d698 100644 --- a/src/gdcmFile.cxx +++ b/src/gdcmFile.cxx @@ -2,7 +2,6 @@ #include "gdcmFile.h" #include "gdcmUtil.h" -#include "iddcmjpeg.h" // for the 'LibIDO' Jpeg LossLess #include "jpeg/ljpg/jpegless.h" ///////////////////////////////////////////////////////////////// @@ -40,10 +39,10 @@ gdcmFile::gdcmFile(const char * filename) /** * \ingroup gdcmFile * \brief calcule la longueur (in bytes) A ALLOUER pour recevoir les - * pixels de l'image - * ou DES images dans le cas d'un multiframe - * ATTENTION : il ne s'agit PAS de la longueur du groupe des Pixels - * (dans le cas d'images compressees, elle n'a pas de sens). + * pixels de l'image ou DES images dans le cas d'un multiframe + * + * ATTENTION : il ne s'agit PAS de la longueur du groupe des Pixels + * (dans le cas d'images compressees, elle n'a pas de sens). * * @return longueur a allouer */ @@ -58,8 +57,10 @@ void gdcmFile::SetPixelDataSizeFromHeader(void) { nb = atoi(str_nb.c_str() ); if (nb == 12) nb =16; } - lgrTotale = GetXSize() * GetYSize() * GetZSize() * (nb/8)* GetSamplesPerPixel(); - std::string str_PhotometricInterpretation = gdcmHeader::GetPubElValByNumber(0x0028,0x0004); + lgrTotale = GetXSize() * GetYSize() * GetZSize() + * (nb/8)* GetSamplesPerPixel(); + std::string str_PhotometricInterpretation = + gdcmHeader::GetPubElValByNumber(0x0028,0x0004); if ( str_PhotometricInterpretation == "PALETTE COLOR " ) { lgrTotale*=3; } @@ -412,7 +413,7 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { // PhotometricInterpretation=PALETTE COLOR // and heuristic has to be found :-( - int planConf=GetPlanarConfiguration(); + int planConf=GetPlanarConfiguration(); // 0028,0006 // Whatever Planar Configuration is, // "PALETTE COLOR " implies that we deal with the palette. @@ -524,7 +525,7 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { // See PS 3.3-2003 C.11.1.1.2 p 619 // int mult; - if ( GetLUTNbits()==16 && nb==8) mult=2; // See PS 3.3 + if (GetLUTNbits()==16 && nb==8) mult=2; // See PS 3.3 else mult=1; // if we get a black image, let's just remove the '+1' @@ -541,11 +542,25 @@ size_t gdcmFile::GetImageDataIntoVector (void* destination, size_t MaxSize) { free(newDest); - } else { // need to make RGB Pixels (?) - // from grey Pixels (?!) - // and Gray Lut (!?!) - unsigned char *lutGray =(unsigned char *)GetPubElValVoidAreaByNumber(0x0028,0x1200); - // Well . I'll wait till I find such an image + } else { + // need to make RGB Pixels (?) + // from grey Pixels (?!) + // and Gray Lut (!?!) + //unsigned char *lutGray =(unsigned char *)GetPubElValVoidAreaByNumber(0x0028,0x1200); + + // Well . I'll wait till I find such an image + + // or Segmented Green Palette Color Lookup Table Data and so on + + // Oops! I get one (gdcm-US-ALOKA-16.dcm) + // No idea how to manage it :-( + // Segmented xxx Palette Color are *more* than 65535 long ?!? + + // WARNING : quick and dirty trick to produce a single plane Grey image + // See also gdcmHeaderHelper::GetNumberOfScalarComponents() + lgrTotale /=3; + return lgrTotale; + // end of dirty trick } break; } diff --git a/src/gdcmHeaderHelper.cxx b/src/gdcmHeaderHelper.cxx index c1f38406..a5f78136 100644 --- a/src/gdcmHeaderHelper.cxx +++ b/src/gdcmHeaderHelper.cxx @@ -1,4 +1,4 @@ -// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.13 2003/10/24 14:34:22 malaterre Exp $ +// $Header: /cvs/public/gdcm/src/Attic/gdcmHeaderHelper.cxx,v 1.14 2003/10/27 14:01:12 jpr Exp $ #include "gdcmHeaderHelper.h" @@ -109,6 +109,11 @@ int gdcmHeaderHelper::GetNumberOfScalarComponents() { PhotometricInterpretation.find("MONOCHROME1") < PhotometricInterpretation.length() || PhotometricInterpretation.find("MONOCHROME2") < PhotometricInterpretation.length() ) return 1; + // WARNING : quick and dirty trick to produce a single plane Grey image + // See also gdcmFile::GetImageDataIntoVector() + // if(GetPubElValVoidAreaByNumber(0x0028,0x1201)==NULL) return 1; // Lut Red + // end of dirty trick + return 3; } //---------------------------------------------------------------------------- diff --git a/src/gdcmJpegIdo.cxx b/src/gdcmJpegIdo.cxx deleted file mode 100644 index 6a4d2575..00000000 --- a/src/gdcmJpegIdo.cxx +++ /dev/null @@ -1,384 +0,0 @@ -#include "iddcmjpeg.h" -#include - -static ClbJpeg* ClbJpegAlloc(void); -static void ClbJpegInit (ClbJpeg *); -static int ClbJpegDecodeDiff(ClbJpeg *); -static BOOL ClbJpegDecodeData(ClbJpeg *); -static int ClbJpegReadBit(ClbJpeg *); -static BOOL ClbJpegReadHeader(ClbJpeg *); -static BOOL ClbJpegStart(ClbJpeg *,FILE *); -static BOOL ClbJpegFillHuffTable(ClbJpeg *); - -void _IdDcmJpegFree(ClbJpeg *jpg) { - free(jpg->DataImg); - free(jpg); -} - -ClbJpeg * _IdDcmJpegRead (FILE * fp){ - ClbJpeg * jpg=NULL; - //printf("entree ds _IdDcmJpegRead depuis gdcm\n"); - jpg=ClbJpegAlloc(); - if(!jpg) { - printf("Fail to ClbJpegAlloc \n"); - return(NULL); - } - ClbJpegInit (jpg); - if(!ClbJpegStart(jpg, fp)) { - printf("Fail to ClbJpegStart \n"); - return (NULL); - } - return (jpg); -} - -static void ClbJpegInit (ClbJpeg *jpg) { - int n; - for (n=0;n<256;n++) { - jpg->lHuffTable[n].HufCode=0; - jpg->lHuffTable[n].HufSz =0; - jpg->lHuffTable[n].HufVal =0; - } - jpg->ValCurByte =0; - jpg->PosCurBit =10; - jpg->MarkerFound =0; - jpg->RestartInterval=0; -} - -static ClbJpeg *ClbJpegAlloc(void) { - ClbJpeg * jpg; - jpg = (ClbJpeg *)malloc(sizeof(ClbJpeg)); - ClbJpegInit(jpg); - return jpg; -} - -static BOOL ClbJpegFillHuffTable(ClbJpeg *jpg) { - unsigned char c; - //int testindex=0; - int n=0; - int NiDHT=0; - int indexY=0; - int k, Code, Si, i; - - for (c=0;c<255;c++) - jpg->RawDHTstart[c]=0; - - c=fgetc(jpg->infp); - - jpg->MaxHuffSz =0; - jpg->MaxHuffVal=0; - - for (n=1;n<17;n++) { - jpg->RawDHT[n]=fgetc(jpg->infp); - NiDHT+=jpg->RawDHT[n]; - if (jpg->RawDHT[n]!=0) - jpg->MaxHuffSz=n; - } - for(n=1;n<16;n++) { - if(jpg->RawDHT[n]>0) { - jpg->RawDHTstart[n]=indexY+1; - for (i=1;i<(jpg->RawDHT[n]+1);i++) { - indexY+=1; - c=fgetc(jpg->infp); - jpg->lHuffTable[indexY].HufVal=c; - jpg->MaxHuffVal=c; - jpg->lHuffTable[indexY].HufSz=n; - } - } - } - k=1; - Code=0; - - Si=jpg->lHuffTable[k].HufSz; - - while(1) { - if (k>=NiDHT) break; - while( Si==jpg->lHuffTable[k].HufSz) { - jpg->lHuffTable[k].HufCode=Code; - Code+=1; - k+=1; - } - if (klHuffTable[k].HufSz>Si) { - Code=Code<<1; - Si+=1; - } - } - } - return 1; -} - -static BOOL ClbJpegStart(ClbJpeg *jpg, FILE *inputfp) { - jpg->infp=inputfp; - if (!ClbJpegReadHeader(jpg)) { - printf("Fail to ClbJpegReadHeader\n"); - return 0; - } - //printf("sortie ClbJpegReadHeader\n"); - if (!ClbJpegDecodeData(jpg)) { - printf("Fail to ClbJpegDecodeData\n"); - return 0; - } - //printf("sortie ClbJpegDecodeData\n"); - return 1; -} - -static BOOL ClbJpegReadHeader(ClbJpeg *jpg) { - unsigned char gr; - unsigned char el; - unsigned char l1, l2; - unsigned int sztag; - long ouca=0; - BOOL HeaderEnd=0; - BOOL isLossLess=0; - - int tp; - - gr=fgetc(jpg->infp); //FF - el=fgetc(jpg->infp); //D8 - - while(!HeaderEnd) { - gr=fgetc(jpg->infp); - if(gr!=0xFF) { - printf("gr!=0xFF (=%02x)\n",gr); - return 0; - } - el=fgetc(jpg->infp); - - if ( (el==0xFF) || (el==0x01) || (el==0xD8) ||(el==0xD9) ||( (el>=0xD0) && (el<=0xD7) )) - ; - else { - l1=fgetc(jpg->infp); - l2=fgetc(jpg->infp); - sztag=(l1*256)+l2-2; //tag length - ouca=ftell(jpg->infp); - - if (el==0xC3) { - jpg->lSof.precision=fgetc(jpg->infp); - - l1=fgetc(jpg->infp); - l2=fgetc(jpg->infp); - jpg->lSof.Himg=(l1*256)+l2; - - //printf("%x %x Himg %d\n",l1,l2,jpg->lSof.Himg); - - l1=fgetc(jpg->infp); - l2=fgetc(jpg->infp); - jpg->lSof.Wimg=(l1*256)+l2; - - //printf("%x %x Wimg %d\n",l1,l2,jpg->lSof.Wimg); - - jpg->lSof.NbComponent=fgetc(jpg->infp); - //printf("NbComponent %d\n", jpg->lSof.NbComponent); - - jpg->lSof.SofTabPos=ftell(jpg->infp); - - isLossLess=1; // TRUE - } - - if (el==0xC4) { - ClbJpegFillHuffTable(jpg); - } - if (el==0xDA) { - jpg->lSos.CompCount=fgetc(jpg->infp); - for (tp=0;tplSos.CompCount;tp++) { - jpg->lSos.CompId=fgetc(jpg->infp); - jpg->lSos.CompDc=fgetc(jpg->infp); - } - jpg->lSos.SpectralSelStart=fgetc(jpg->infp); - jpg->lSos.SpectralSelEnd=fgetc(jpg->infp); - jpg->lSos.SuccessiveAp=fgetc(jpg->infp); - jpg->lSos.Sospttrans=(jpg->lSos.SuccessiveAp & 16); - HeaderEnd=1; - } - if (el==0xDD) { - l1=fgetc(jpg->infp); - l2=fgetc(jpg->infp); - jpg->RestartInterval=(l1*256)+l2; - } - - fseek(jpg->infp,(ouca+sztag),0); - } - } - - if (!isLossLess) { - printf("NOT isLossLess\n"); - return 0; - } - return 1; -} - -static int ClbJpegReadBit(ClbJpeg *jpg) { - int r=0; - unsigned char c; - if(jpg->PosCurBit>8) // need lire octet suivant - { - jpg->ValCurByte=fgetc(jpg->infp); - if (jpg->ValCurByte==0xFF) - { - c=fgetc(jpg->infp);// est 00 ou restart marker: a skiper - if (c!=0) - { - jpg->ValCurByte=fgetc(jpg->infp); - jpg->PosCurBit=1; - jpg->MarkerFound=1; - return 0; - } - } - jpg->PosCurBit=2; - return (jpg->ValCurByte>>7); - } - else - { - r=(1&(jpg->ValCurByte>>(8-jpg->PosCurBit))); - jpg->PosCurBit+=1; - return r; - } -} - - -static BOOL ClbJpegDecodeData(ClbJpeg *jpg) -{ - int iX,iY; - int lbInc=0; - unsigned int mask; - int dimX; - - int lPredicted=(1<<(jpg->lSof.precision-1-jpg->lSos.Sospttrans)); - dimX=jpg->lSof.Wimg; - - jpg->ValCurByte=jpg->lSos.SuccessiveAp; - jpg->PosCurBit=9; - - if (jpg->lSof.precision==8) - mask=0xFF; - if (jpg->lSof.precision==12) - mask=0xFFF; - if (jpg->lSof.precision==16) - mask=0xFFFF; - -//printf("jpg->lSof.precision : %d\n",jpg->lSof.precision ); -//printf("sizeof(*jpg->DataImg) : %d\n",sizeof(*jpg->DataImg) ); - - jpg->DataImg=(int*)malloc(jpg->lSof.Himg*dimX*sizeof(*jpg->DataImg)*jpg->lSof.NbComponent); // *3 - memset( jpg->DataImg,0,(jpg->lSof.Himg * dimX * sizeof(*jpg->DataImg)*jpg->lSof.NbComponent)); // *3 - - if (!jpg->RestartInterval) - { - //printf("il N'y a PAS un define interval\n"); - for(iX=0;iXlSof.NbComponent;iX++) // lit première ligne // *3 - { - lbInc+=1; - if (lbInc>1) - lPredicted= jpg->DataImg[lbInc-1]; - jpg->DataImg[lbInc]=lPredicted+ClbJpegDecodeDiff(jpg); - - if ( jpg->DataImg[lbInc] > ((1<<(jpg->lSof.precision))-1) ) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - if ( jpg->DataImg[lbInc]<0) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - } - - for (iY=1;iYlSof.Himg;iY++) //lit la suite - { - lbInc+=1; - if (lbInc>(jpg->lSof.Himg*dimX*jpg->lSof.NbComponent-1)) break; //*3 - lPredicted= jpg->DataImg[lbInc-jpg->lSof.Wimg*jpg->lSof.NbComponent];//*3 // se base % premier é ligne d'avant - jpg->DataImg[lbInc]=lPredicted+ClbJpegDecodeDiff(jpg); - - if ( jpg->DataImg[lbInc] > ((1<<(jpg->lSof.precision))-1) ) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - if ( jpg->DataImg[lbInc]<0) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - - for(iX=1;iXlSof.Wimg*jpg->lSof.NbComponent;iX++) //*3 - { - lbInc+=1; - if (lbInc>(jpg->lSof.Himg*jpg->lSof.Wimg*jpg->lSof.NbComponent-1)) break;//*3 - if (jpg->lSos.SpectralSelStart==7) // si spectral - lPredicted=( jpg->DataImg[lbInc-1]+ jpg->DataImg[lbInc-jpg->lSof.Wimg*jpg->lSof.NbComponent])>>1; //*3 - else - lPredicted= jpg->DataImg[lbInc-1]; // se base%pixel juste avant - jpg->DataImg[lbInc]=lPredicted+ClbJpegDecodeDiff(jpg); - - if ( jpg->DataImg[lbInc] > ((1<<(jpg->lSof.precision))-1) ) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - if ( jpg->DataImg[lbInc]<0) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - - } - } - } - else // il y a un define interval - { - //printf("il y a un define interval\n"); - while(1) - { - jpg->MarkerFound=0; - lPredicted=(1<<(jpg->lSof.precision - 1 - jpg->lSos.Sospttrans)); - for (iY=0;iYRestartInterval;iY++) - { - jpg->DataImg[lbInc]=lPredicted+ClbJpegDecodeDiff(jpg); - - if ( jpg->DataImg[lbInc] > ((1<<(jpg->lSof.precision))-1) ) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - if ( jpg->DataImg[lbInc]<0) - jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask; - - lbInc+=1; - if (lbInc>(jpg->lSof.Himg*jpg->lSof.Wimg*jpg->lSof.NbComponent-1)) return 1; //*3 - - if (jpg->lSos.SpectralSelStart==7) // si spectral - lPredicted=( jpg->DataImg[lbInc-1]+ jpg->DataImg[lbInc-jpg->lSof.Wimg*jpg->lSof.NbComponent])>>1; //*3 - else - lPredicted= jpg->DataImg[lbInc-1]; - } - while (!jpg->MarkerFound) - { - ClbJpegReadBit(jpg); // skip bits restant avant restart marker - } - } - } - return 1; -} - -static int ClbJpegDecodeDiff(ClbJpeg *jpg) { - int lInput; - int lInputBits; - int lHufVal; - int lDiff; - int lI; - int resultat; - lHufVal = 666; - lInput = 0; - lInputBits = 0; - - while (1) { - lInputBits+=1; - lInput=(lInput<<1)+ClbJpegReadBit(jpg); - if (jpg->RawDHT[lInputBits]!=0) { - for(lI=jpg->RawDHTstart[lInputBits];lI<(jpg->RawDHTstart[lInputBits]+jpg->RawDHT[lInputBits]);lI++) { - if (lInput==jpg->lHuffTable[lI].HufCode) - lHufVal=jpg->lHuffTable[lI].HufVal; - } - } - if (lInputBits>=jpg->MaxHuffSz) - lHufVal=jpg->MaxHuffVal; - if (lHufVal<255) break; - } - if (lHufVal==0) resultat= 0; - - if ( (lHufVal>0) && (lHufVal<16)) { - lDiff=0; - if( ClbJpegReadBit(jpg)==1) { - for (lI=1;lI // for FILE -#include - -#define BOOL int - -typedef struct { - int HufSz; - int HufCode; - int HufVal; -} HuffTable; - - -typedef struct { - unsigned char precision; - int Himg; - int Wimg; - unsigned char NbComponent; - long SofTabPos; -} Sof; - - -typedef struct { - unsigned char CompCount; - unsigned char CompId; - unsigned char CompDc; - unsigned char SpectralSelStart; - unsigned char SpectralSelEnd; - unsigned char SuccessiveAp; - unsigned char Sospttrans; - long SofTabPos; -} Sos; - - -typedef struct { - unsigned long RestartInterval; - BOOL MarkerFound; - int MaxHuffVal; - int MaxHuffSz; - int* DataImg; - unsigned char RawDHT[256]; - unsigned char ValCurByte; - unsigned char PosCurBit; - FILE* infp; - unsigned char RawDHTstart[256]; - Sof lSof; - Sos lSos; - HuffTable lHuffTable[256]; -} ClbJpeg; - - -ClbJpeg*_IdDcmJpegRead (FILE *); -void _IdDcmJpegFree (ClbJpeg *); - - -// - - - - - -- 2.45.1