Program: gdcm
Module: $RCSfile: WriteDicomAsJPEG.cxx,v $
Language: C++
- Date: $Date: 2005/10/18 19:54:25 $
- Version: $Revision: 1.3 $
+ Date: $Date: 2005/10/18 20:49:59 $
+ Version: $Revision: 1.4 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include "gdcmFile.h"
#include "gdcmFileHelper.h"
+#include "gdcmUtil.h"
#include <iostream>
#include <sstream>
#include "jdatasrc.cxx"
#include "jdatadst.cxx"
+// PS 3.5, page 66
+void EncodeWithoutBasicOffsetTable(std::ostream *fp, int numFrag, uint32_t length)
+{
+ assert( numFrag == 1);
+ uint32_t del = 0xffffffff; //data_element_length
+ //gdcm::binary_write(*fp, del);
+
+ // Item tag:
+ uint16_t group = 0xfffe;
+ uint16_t elem = 0xe000;
+ gdcm::binary_write(*fp, group);
+ gdcm::binary_write(*fp, elem);
+ // Item Length
+ uint32_t item_length = 0x0000;
+ gdcm::binary_write(*fp, item_length);
+
+ // back again...First fragment
+ // Item tag:
+ gdcm::binary_write(*fp, group);
+ gdcm::binary_write(*fp, elem);
+ // Item Length
+ gdcm::binary_write(*fp, length);
+
+}
+
+void CloseJpeg(std::ostream *fp)
+{
+ // sequence terminator
+ uint16_t group = 0xfffe;
+ uint16_t elem = 0xe000;
+ gdcm::binary_write(*fp, group);
+ gdcm::binary_write(*fp, elem);
+
+ uint32_t length = 0x0;
+ gdcm::binary_write(*fp, length);
+}
+
+// PS 3.5, page 67
+void EncodeWithBasicOffsetTable(std::ostream *fp, int numFrag)
+{
+ (void)fp; (void)numFrag;
+}
+
bool CreateOneFrame (std::ostream *fp, void *input_buffer, int fragment_size,
int image_width, int image_height, int sample_pixel, int quality)
{
std::cout << "Y: " << ysize << std::endl;
std::cout << "Sample: " << samplesPerPixel << std::endl;
int fragment_size = xsize*ysize*samplesPerPixel;
+
+ EncodeWithoutBasicOffsetTable(of, 1, 15328);
CreateOneFrame(of, testedImageData, fragment_size, xsize, ysize, samplesPerPixel, 100);
+ CloseJpeg(of);
+
if( !f->IsReadable() )
{
std::cerr << "-------------------------------\n"
//out.write( of->str(), of
//out << of->str(); //rdbuf is faster than going through str()
out.write( (char*)imageData, size);
- std::cerr << "JPEG marker is: " << imageData[6] << imageData[7] <<
- imageData[8] << imageData[9] << std::endl;
+ //std::cerr << "JPEG marker is: " << imageData[6] << imageData[7] <<
+ // imageData[8] << imageData[9] << std::endl;
//out.rdbuf( *sb );
out.close();