Program: gdcm
Module: $RCSfile: Dense2007ToDicom.cxx,v $
Language: C++
- Date: $Date: 2007/07/10 11:00:50 $
- Version: $Revision: 1.1 $
+ Date: $Date: 2007/10/29 17:13:59 $
+ Version: $Revision: 1.5 $
Copyright (c) CREATIS (Centre de Recherche et d'Applications en Traitement de
l'Image). All rights reserved. See Doc/License.txt or
#include <iostream>
//#include <values.h>
+#if defined(__BORLANDC__)
+#include <ctype.h>
+#endif
+
#include "gdcmFile.h"
#include "gdcmFileHelper.h"
#include "gdcmDebug.h"
void LoadStrain(std::ifstream &from, std::string imageName);
void MakeDicomImage(float *tabVal, float *X, float *Y, float *Z, int NP, std::string dcmImageName);
+int verbose;
int main(int argc, char *argv[])
{
if (am->ArgMgrDefined("debug"))
GDCM_NAME_SPACE::Debug::DebugOn();
-
- int verbose = am->ArgMgrDefined("verbose");
-
+ verbose = am->ArgMgrDefined("verbose");
+
// if unused Param we give up
if ( am->ArgMgrPrintUnusedLabels() )
{
// ----- Begin Processing -----
- std::ifstream fromPeakStrain( peak_strain );
- if ( !fromPeakStrain )
- {
- std::cout << "Can't open file" << peak_strain << std::endl;
- exit(0);
- }
-
- std::ifstream fromStrain( strain );
- if ( !fromStrain )
- {
- std::cout << "Can't open file" << strain << std::endl;
- exit(0);
- }
-
- std::cout << "Success in open file" << peak_strain << std::endl;
- LoadPeakStrain(fromPeakStrain, peak_strain);
- fromPeakStrain.close();
-
- std::cout << "Success in open file" << strain << std::endl;
- LoadStrain(fromStrain, strain);
- fromStrain.close();
-
+ std::ifstream fromPeakStrain( peak_strain );
+ if ( !fromPeakStrain )
+ {
+ std::cout << "Can't open file" << peak_strain << std::endl;
+ exit(0);
+ }
+
+ std::ifstream fromStrain( strain );
+ if ( !fromStrain )
+ {
+ std::cout << "Can't open file" << strain << std::endl;
+ exit(0);
+ }
+
+ std::cout << "Success in open file" << peak_strain << std::endl;
+ LoadPeakStrain(fromPeakStrain, peak_strain);
+ fromPeakStrain.close();
+
+ std::cout << "Success in open file" << strain << std::endl;
+ LoadStrain(fromStrain, strain);
+ fromStrain.close();
+ return 1;
}
// =====================================================================================================================
char c;
int i;
- for (i=0; i<NP; i++) {
+ for (i=0; i<NP; i++) {
+
from >> X[i];
for (;;) {
if (!from.get(c))
from.putback(c);
break;
}
- }
+ }
+
from >> Y[i];
for (;;) {
if (!from.get(c))
break;
}
}
- from >> Z[i];
- }
+ from >> Z[i];
+
+ } // end for i<NP
std::cout << "--------------- Ecc_strain ------------------" << std::endl;
float *ecc_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> ecc_strain[i];
+ if (verbose)
std::cout << ecc_strain[i] << std::endl;
}
float *err_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> err_strain[i];
+ if (verbose)
std::cout << err_strain[i] << std::endl;
}
float *e11_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> e11_strain[i];
+ if (verbose)
std::cout << e11_strain[i] << std::endl;
}
float *e22_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> e22_strain[i];
+ if (verbose)
std::cout << e22_strain[i] << std::endl;
}
std::cout << "--------------- Ecc_strain ------------------" << std::endl;
float *ecc_strain = new float[NP];
for (i=0; i<NP; i++) {
- from >> ecc_strain[i];
+ from >> ecc_strain[i];
+ if (verbose)
std::cout << ecc_strain[i] << std::endl;
}
float *err_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> err_strain[i];
+ if (verbose)
std::cout << err_strain[i] << std::endl;
}
float *e11_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> e11_strain[i];
+ if (verbose)
std::cout << e11_strain[i] << std::endl;
}
float *e22_strain = new float[NP];
for (i=0; i<NP; i++) {
from >> e22_strain[i];
+ if (verbose)
std::cout << e22_strain[i] << std::endl;
}
void MakeDicomImage(float *tabVal, float *X, float *Y, float *Z, int NP, std::string dcmImageName)
{
- float minX = 999., minY = 999., minZ = 999.;
+ float minX = 99999., minY = 99999., minZ = 99999.;
float maxX = 0., maxY = 0., maxZ = 0.;
int i;
+
for (i=0; i<NP; i++) {
// std::cout << X[i] << " " << Y[i] << " " << Z[i] << std::endl;
if(maxX < X[i])
minY = Y[i];
if(minZ > Z[i])
minZ = Z[i];
-
}
- std::cout << "Min X,Y,Z " << minX << " " << minY << " " << minZ << std::endl;
- std::cout << "Max X,Y,Z " << maxX << " " << maxY << " " << maxZ << std::endl;
- std::cout << "Size X,Y,Z " << maxX-minX << " " << maxY-minY << " " << maxZ-minZ << std::endl;
+ std::cout << "Min X,Y,Z " << minX << " " << minY << " " << minZ << std::endl;
+ std::cout << "Max X,Y,Z " << maxX << " " << maxY << " " << maxZ << std::endl;
+ std::cout << "Size X,Y,Z " << maxX-minX << " " << maxY-minY << " " << maxZ-minZ << std::endl;
+// uint16_t *img = new uint16_t[int(maxX+0.5)*int(maxY+0.5)];
+ uint16_t *img = new uint16_t[int(maxX*4.)*int(maxY*4.)];
+
+ // Set whole image to 0
+ for(int i3=0;i3<int(maxX*4.)*int(maxY*4.);i3++)
+// for(int i3=0;i3<int(maxX+0.5)*int(maxY+0.5);i3++)
+ img[i3] = 0;
- uint16_t *img = new uint16_t[int(maxX*maxY)];
-
- for(int i3=0;i3<int(maxX*maxY);i3++)
- img[i3] = 0;
-
- for(int i2=0; i2<NP; i2++) {
- img[ int(maxX -(X[i2]-1))+ int((maxY -Y[i2])* maxX) ] = int(tabVal[i2]*100);
- }
+ for(int i2=0; i2<NP; i2++) {
+
+ int ordX = int(X[i2]*4.-30);
+ int ordY = int(maxY*4.) - int(Y[i2]*4.)+30;
+// img[ /*int(maxX) -*/ int(X[i2]+0.5-1) + (int(maxY+0.5) - int(Y[i2]+0.5)) * int(maxX+0.5) ] = int(tabVal[i2]*100);
+
+// img[ /*int(maxX) -*/ int(X[i2]*4.-30) + (int(maxY*4.) - int(Y[i2]*4.)+30) * int(maxX*4.) ] = int(tabVal[i2]*100);
+ img[ /*int(maxX) -*/ ordX + ordY * int(maxX*4.) ] = int(tabVal[i2]*100);
+
+ // Try to round up, just to see.
+ for(int iii=ordY-3; iii<ordY+4; iii++) for(int jjj=ordX-3; jjj<ordX+4; jjj++)
+ img[ jjj + iii * int(maxX*4.) ] = int(tabVal[i2]*100);
+ std::cout << int(X[i2]*4.) << " " << int(Y[i2]*4.) << " = " << int(tabVal[i2]*100) << std::endl;
+ }
// GDCM_NAME_SPACE::Debug::DebugOn();
- std::ostringstream str;
- GDCM_NAME_SPACE::File *file;
- file = GDCM_NAME_SPACE::File::New();
+ std::ostringstream str;
+
+ GDCM_NAME_SPACE::File *file;
+ file = GDCM_NAME_SPACE::File::New();
// Set the image size
- str.str("");
- str << (int)maxX;
- file->InsertEntryString(str.str(),0x0028,0x0011,"US"); // Columns
- str.str("");
- str << (int)maxY;
- file->InsertEntryString(str.str(),0x0028,0x0010,"US"); // Rows
+ str.str("");
+ str << (int)(maxX*4.);
+ file->InsertEntryString(str.str(),0x0028,0x0011,"US"); // Columns
+ str.str("");
+ str << (int)(maxY*4.);
+ file->InsertEntryString(str.str(),0x0028,0x0010,"US"); // Rows
+
// Set the pixel type
// 16; //8, 16, 32
- file->InsertEntryString("16",0x0028,0x0100,"US"); // Bits Allocated
- str.str("");
- str << 16; // may be 12 or 16 if componentSize =16
- file->InsertEntryString("16",0x0028,0x0101,"US"); // Bits Stored
- file->InsertEntryString("15",0x0028,0x0102,"US"); // High Bit
+ file->InsertEntryString("16",0x0028,0x0100,"US"); // Bits Allocated
+ str.str("");
+ str << 16; // may be 12 or 16 if componentSize =16
+ file->InsertEntryString("16",0x0028,0x0101,"US"); // Bits Stored
+ file->InsertEntryString("15",0x0028,0x0102,"US"); // High Bit
// Set the pixel representation // 0/1 , 0=unsigned
- file->InsertEntryString("1",0x0028,0x0103, "US"); // Pixel Representation
+ file->InsertEntryString("1",0x0028,0x0103, "US"); // Pixel Representation
// Set the samples per pixel // 1:Grey level, 3:RGB
- file->InsertEntryString("1",0x0028,0x0002, "US"); // Samples per Pixel
+ file->InsertEntryString("1",0x0028,0x0002, "US"); // Samples per Pixel
/*
// Set Rescale Intercept
file->InsertEntryString(str.str(),0x0028,0x1053,"DS");
*/
- GDCM_NAME_SPACE::FileHelper *fileH;
- fileH = GDCM_NAME_SPACE::FileHelper::New(file);
- // cast is just to avoid warnings (*no* conversion)
- fileH->SetImageData((uint8_t *)img,int(maxX*maxY)*sizeof(uint16_t));
- fileH->SetWriteModeToRaw();
- fileH->SetWriteTypeToDcmExplVR();
+ GDCM_NAME_SPACE::FileHelper *fileH;
+ fileH = GDCM_NAME_SPACE::FileHelper::New(file);
+ // cast is just to avoid warnings (*no* conversion)
+ //fileH->SetImageData((uint8_t *)img,int(maxX*maxY)*sizeof(uint16_t)); // troubles when maxX, mayY are *actually* float!
+ fileH->SetImageData((uint8_t *)img,int(maxX*4.)*int(maxY*4.)*sizeof(uint16_t));
+ fileH->SetWriteModeToRaw();
+ fileH->SetWriteTypeToDcmExplVR();
- if( !fileH->Write(dcmImageName))
- std::cout << "Failed for [" << dcmImageName << "]\n"
- << " File is unwrittable" << std::endl;
+ if( !fileH->Write(dcmImageName))
+ std::cout << "Failed for [" << dcmImageName << "]\n"
+ << " File is unwrittable" << std::endl;
- file->Print();
+ //file->Print();
delete img;
file->Delete();