Program: gdcm
Module: $RCSfile: WriteDicomAsJPEG.cxx,v $
Language: C++
- Date: $Date: 2006/01/27 10:03:23 $
- Version: $Revision: 1.10 $
+ Date: $Date: 2007/05/23 14:18:04 $
+ Version: $Revision: 1.14 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
// Item tag:
uint16_t group = 0xfffe;
uint16_t elem = 0xe000;
- gdcm::binary_write(*fp, group);
- gdcm::binary_write(*fp, elem);
+ GDCM_NAME_SPACE::binary_write(*fp, group);
+ GDCM_NAME_SPACE::binary_write(*fp, elem);
// Item Length
uint32_t dummy = 0x12345678;
size_t offset = fp->tellp();
JpegPair jp;
jp.first = offset;
v.push_back(jp);
- gdcm::binary_write(*fp, dummy);
+ GDCM_NAME_SPACE::binary_write(*fp, dummy);
}
// PS 3.5, page 66
// Item tag:
uint16_t group = 0xfffe;
uint16_t elem = 0xe000;
- gdcm::binary_write(*fp, group);
- gdcm::binary_write(*fp, elem);
+ GDCM_NAME_SPACE::binary_write(*fp, group);
+ GDCM_NAME_SPACE::binary_write(*fp, elem);
// Item Length
uint32_t item_length = 0x0000;
- gdcm::binary_write(*fp, item_length);
+ GDCM_NAME_SPACE::binary_write(*fp, item_length);
}
// Item tag:
uint16_t group = 0xfffe;
uint16_t elem = 0xe000;
- gdcm::binary_write(*fp, group);
- gdcm::binary_write(*fp, elem);
+ GDCM_NAME_SPACE::binary_write(*fp, group);
+ GDCM_NAME_SPACE::binary_write(*fp, elem);
// Item Length
uint32_t item_length = numFrag*4; // sizeof(uint32_t)
- gdcm::binary_write(*fp, item_length);
+ GDCM_NAME_SPACE::binary_write(*fp, item_length);
// Just prepare the space
start = fp->tellp(); //to be able to rewind
for(int i=0; i<numFrag;++i)
{
uint32_t dummy = 0x0000;
- gdcm::binary_write(*fp, dummy);
+ GDCM_NAME_SPACE::binary_write(*fp, dummy);
}
}
{
const JpegPair &jp = *i;
if(i == v.begin() ){ assert( jp.first - first.first == 0); }
- gdcm::binary_write(*fp, jp.first - first.first);
- std::cerr << "Updating Table:" << jp.first - first.first << std::endl;
+ uint32_t offset = jp.first - first.first;
+ GDCM_NAME_SPACE::binary_write(*fp, offset);
+ //std::cerr << "Updating Table:" << jp.first - first.first << std::endl;
}
}
{
const JpegPair &jp = *i;
fp->seekp( jp.first );
- gdcm::binary_write(*fp, jp.second );
- std::cerr << "Updating:" << jp.first << "," << jp.second << std::endl;
+ uint32_t length = jp.second;
+ GDCM_NAME_SPACE::binary_write(*fp, length );
+ //std::cerr << "Updating:" << jp.first << "," << jp.second << std::endl;
}
}
// sequence terminator
uint16_t group = 0xfffe;
uint16_t elem = 0xe000;
- gdcm::binary_write(*fp, group);
- gdcm::binary_write(*fp, elem);
+ GDCM_NAME_SPACE::binary_write(*fp, group);
+ GDCM_NAME_SPACE::binary_write(*fp, elem);
uint32_t length = 0x0;
- gdcm::binary_write(*fp, length);
+ GDCM_NAME_SPACE::binary_write(*fp, length);
// Jpeg is done, now update the frag length
UpdateJpegFragmentSize(fp, v);
*/
if (sample_pixel == 3)
{
+ assert( sample_pixel == 1 );
row_stride = image_width * 3;/* JSAMPLEs per row in image_buffer */
}
else
static int i = 0;
JpegPair &jp = v[i];
jp.second = end-beg;
- std::cerr << "DIFF: " << i <<" -> " << end-beg << std::endl;
+
+ if( ((end-beg) % 2) )
+ {
+ fp->put( '\0' );
+ jp.second += 1;
+ }
+ assert( !(jp.second % 2) );
+ std::cerr << "DIFF: " << i <<" -> " << jp.second << std::endl;
+
++i;
//JpegPair &jp = v[0];
std::cerr << "Using quality: " << quality << std::endl;
// Step 1 : Create the header of the image
- gdcm::File *f = gdcm::File::New();
- f->SetLoadMode ( gdcm::LD_ALL ); // Load everything
+ GDCM_NAME_SPACE::File *f = GDCM_NAME_SPACE::File::New();
+ f->SetLoadMode ( GDCM_NAME_SPACE::LD_ALL ); // Load everything
f->SetFileName( filename );
f->Load();
- gdcm::FileHelper *tested = gdcm::FileHelper::New( f );
+ GDCM_NAME_SPACE::FileHelper *tested = GDCM_NAME_SPACE::FileHelper::New( f );
std::string PixelType = tested->GetFile()->GetPixelType();
int xsize = f->GetXSize();
int ysize = f->GetYSize();
WriteDICOMItems(of, JpegFragmentSize);
CreateOneFrame(of, pImageData, fragment_size, xsize, ysize, zsize,
samplesPerPixel, quality, JpegFragmentSize);
+ assert( !(fragment_size % 2) );
pImageData += fragment_size;
}
CloseJpeg(of, JpegFragmentSize);
// Step 1 : Create the header of the image
- gdcm::File *fileToBuild = gdcm::File::New();
+ GDCM_NAME_SPACE::File *fileToBuild = GDCM_NAME_SPACE::File::New();
std::ostringstream str;
// Set the image size
str.str("");
str << xsize;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0011); // Columns
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0011,"US"); // Columns
str.str("");
str << ysize;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0010); // Rows
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0010,"US"); // Rows
if(zsize>1)
{
str.str("");
str << zsize;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0008); // Number of Frames
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0008,"IS"); // Number of Frames
}
// Set the pixel type
str.str("");
str << 8; //img.componentSize;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0100); // Bits Allocated
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0100,"US"); // Bits Allocated
str.str("");
str << 8; //img.componentUse;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0101); // Bits Stored
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0101,"US"); // Bits Stored
str.str("");
str << 7; //( img.componentSize - 1 );
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0102); // High Bit
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0102,"US"); // High Bit
// Set the pixel representation
str.str("");
str << 0; //img.sign;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0103); // Pixel Representation
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0103,"US"); // Pixel Representation
// Set the samples per pixel
str.str("");
str << samplesPerPixel; //img.components;
- fileToBuild->InsertEntryString(str.str(),0x0028,0x0002); // Samples per Pixel
+ fileToBuild->InsertEntryString(str.str(),0x0028,0x0002,"US"); // Samples per Pixel
// Step 2 : Create the output image
// std::cout << "2...";
* samplesPerPixel /* * img.componentSize / 8*/;
uint8_t *imageData = new uint8_t[size];
- gdcm::FileHelper *fileH = gdcm::FileHelper::New(fileToBuild);
+ GDCM_NAME_SPACE::FileHelper *fileH = GDCM_NAME_SPACE::FileHelper::New(fileToBuild);
//fileH->SetImageData(imageData,size);
assert( size == testedDataSize );
size = of->str().size();