-// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.99 2003/10/10 16:54:25 jpr Exp $
+// $Header: /cvs/public/gdcm/src/Attic/gdcmHeader.cxx,v 1.100 2003/10/14 11:53:16 jpr Exp $
#include "gdcmHeader.h"
guint16 zero;
fread(&zero, (size_t)2, (size_t)1, fp);
if ( fp ) {
- //ACR
- if( zero == 0x0008 || zero == 0x0800 )
+ //ACR -- or DICOM with no Preamble
+ if( zero == 0x0008 || zero == 0x0800 || zero == 0x0002 || zero == 0x0200)
return true;
//DICOM
fseek(fp, 126L, SEEK_CUR);
else {
l1=fgetc(jpg->infp);
l2=fgetc(jpg->infp);
- sztag=(l1*256)+l2-2; //tag lengh
+ sztag=(l1*256)+l2-2; //tag length
ouca=ftell(jpg->infp);
if (el==0xC3) {
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);
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;
//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*jpg->lSof.Wimg*sizeof(*jpg->DataImg));
- memset( jpg->DataImg,0,(jpg->lSof.Himg * jpg->lSof.Wimg * 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;iX<jpg->lSof.Wimg;iX++) // lit première ligne
+ for(iX=0;iX<dimX*jpg->lSof.NbComponent;iX++) // lit première ligne // *3
{
lbInc+=1;
if (lbInc>1)
for (iY=1;iY<jpg->lSof.Himg;iY++) //lit la suite
{
lbInc+=1;
- if (lbInc>(jpg->lSof.Himg*jpg->lSof.Wimg-1)) break;
- lPredicted= jpg->DataImg[lbInc-jpg->lSof.Wimg]; // se base % premier é ligne d'avant
+ 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) )
if ( jpg->DataImg[lbInc]<0)
jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask;
- for(iX=1;iX<jpg->lSof.Wimg;iX++)
+ for(iX=1;iX<jpg->lSof.Wimg*jpg->lSof.NbComponent;iX++) //*3
{
lbInc+=1;
- if (lbInc>(jpg->lSof.Himg*jpg->lSof.Wimg-1)) break;
+ 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])>>1;
+ 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);
jpg->DataImg[lbInc]= jpg->DataImg[lbInc]&mask;
lbInc+=1;
- if (lbInc>(jpg->lSof.Himg*jpg->lSof.Wimg-1)) return 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])>>1;
+ lPredicted=( jpg->DataImg[lbInc-1]+ jpg->DataImg[lbInc-jpg->lSof.Wimg*jpg->lSof.NbComponent])>>1; //*3
else
lPredicted= jpg->DataImg[lbInc-1];
}