#include "gdcmFile.h"
#include "gdcmFileHelper.h"
#include "gdcmDebug.h"
#include "gdcmUtil.h"
#include "vtkGdcmWriter.h"
#include <vtkObjectFactory.h>
#include <vtkImageData.h>
#include <vtkPointData.h>
#include <vtkLookupTable.h>
Go to the source code of this file.
Functions | |
vtkCxxRevisionMacro (vtkGdcmWriter,"$Revision:1.16 $") | |
vtkStandardNewMacro (vtkGdcmWriter) | |
size_t | ReverseData (vtkImageData *image, unsigned char **data) |
void | SetImageInformation (gdcm::FileHelper *file, vtkImageData *image) |
|
Copy the image and reverse the Y axis Definition at line 110 of file vtkGdcmWriter.cxx. Referenced by SetImageInformation().
00111 { 00112 int inc[3]; 00113 int *extent = image->GetUpdateExtent(); 00114 int dim[3] = {extent[1]-extent[0]+1, 00115 extent[3]-extent[2]+1, 00116 extent[5]-extent[4]+1}; 00117 00118 size_t lineSize = dim[0] * image->GetScalarSize() 00119 * image->GetNumberOfScalarComponents(); 00120 size_t planeSize = dim[1] * lineSize; 00121 size_t size = dim[2] * planeSize; 00122 00123 if( size>0 ) 00124 { 00125 *data = new unsigned char[size]; 00126 00127 image->GetIncrements(inc); 00128 unsigned char *src = (unsigned char *)image->GetScalarPointerForExtent(extent); 00129 unsigned char *dst = *data + planeSize - lineSize; 00130 for (int plane = extent[4]; plane <= extent[5]; plane++) 00131 { 00132 for (int line = extent[2]; line <= extent[3]; line++) 00133 { 00134 // Copy one line at proper destination: 00135 memcpy((void*)dst, (void*)src, lineSize); 00136 00137 src += inc[1] * image->GetScalarSize(); 00138 dst -= lineSize; 00139 } 00140 dst += 2 * planeSize; 00141 } 00142 } 00143 else 00144 { 00145 *data = NULL; 00146 } 00147 00148 return size; 00149 } |
|
Set the datas informations in the file Definition at line 154 of file vtkGdcmWriter.cxx. References gdcm::FileHelper::InsertValEntry(), ReverseData(), and gdcm::FileHelper::SetUserData(). Referenced by vtkGdcmWriter::WriteDcmFile().
00155 { 00156 std::ostringstream str; 00157 00158 // Image size 00159 int *extent = image->GetUpdateExtent(); 00160 int dim[3] = {extent[1]-extent[0]+1, 00161 extent[3]-extent[2]+1, 00162 extent[5]-extent[4]+1}; 00163 00164 str.str(""); 00165 str << dim[0]; 00166 file->InsertValEntry(str.str(),0x0028,0x0011); // Columns 00167 00168 str.str(""); 00169 str << dim[1]; 00170 file->InsertValEntry(str.str(),0x0028,0x0010); // Rows 00171 00172 if(dim[2]>1) 00173 { 00174 str.str(""); 00175 str << dim[2]; 00176 //file->Insert(str.str(),0x0028,0x0012); // Planes 00177 file->InsertValEntry(str.str(),0x0028,0x0008); // Number of Frames 00178 } 00179 00180 // Pixel type 00181 str.str(""); 00182 str << image->GetScalarSize()*8; 00183 file->InsertValEntry(str.str(),0x0028,0x0100); // Bits Allocated 00184 file->InsertValEntry(str.str(),0x0028,0x0101); // Bits Stored 00185 00186 str.str(""); 00187 str << image->GetScalarSize()*8-1; 00188 file->InsertValEntry(str.str(),0x0028,0x0102); // High Bit 00189 00190 // Pixel Repr 00191 // FIXME : what do we do when the ScalarType is 00192 // VTK_UNSIGNED_INT or VTK_UNSIGNED_LONG 00193 str.str(""); 00194 if( image->GetScalarType() == VTK_UNSIGNED_CHAR || 00195 image->GetScalarType() == VTK_UNSIGNED_SHORT || 00196 image->GetScalarType() == VTK_UNSIGNED_INT || 00197 image->GetScalarType() == VTK_UNSIGNED_LONG ) 00198 { 00199 str << "0"; // Unsigned 00200 } 00201 else 00202 { 00203 str << "1"; // Signed 00204 } 00205 file->InsertValEntry(str.str(),0x0028,0x0103); // Pixel Representation 00206 00207 // Samples per pixel 00208 str.str(""); 00209 str << image->GetNumberOfScalarComponents(); 00210 file->InsertValEntry(str.str(),0x0028,0x0002); // Samples per Pixel 00211 00212 // Spacing 00213 double *sp = image->GetSpacing(); 00214 00215 str.str(""); 00216 str << sp[0] << "\\" << sp[1]; 00217 file->InsertValEntry(str.str(),0x0028,0x0030); // Pixel Spacing 00218 str.str(""); 00219 str << sp[2]; 00220 file->InsertValEntry(str.str(),0x0018,0x0088); // Spacing Between Slices 00221 00222 // Origin 00223 double *org = image->GetOrigin(); 00224 00225 str.str(""); 00226 str << org[0] << "\\" << org[1] << "\\" << org[2]; 00227 file->InsertValEntry(str.str(),0x0020,0x0032); // Image Position Patient 00228 00229 // Window / Level 00230 double *rng=image->GetScalarRange(); 00231 00232 str.str(""); 00233 str << rng[1]-rng[0]; 00234 file->InsertValEntry(str.str(),0x0028,0x1051); // Window Width 00235 str.str(""); 00236 str << (rng[1]+rng[0])/2.0; 00237 file->InsertValEntry(str.str(),0x0028,0x1050); // Window Center 00238 00239 // Pixels 00240 unsigned char *data; 00241 size_t size = ReverseData(image,&data); 00242 file->SetUserData(data,size); 00243 } |
|
|
|
|