40 #include <sys/types.h>
45 #include "vtkExtractVOI.h"
46 #include "vtkImageData.h"
49 #include "vtkPNGWriter.h"
50 #include "vtkTIFFWriter.h"
56 m_Column(0), m_XTile(0), m_YTile(0), m_ZTile(0)
125 size_t point_idx = iFileName.rfind(
".lsm");
127 if ( point_idx != std::string::npos )
129 size_t slash_idx = iFileName.rfind(
'/');
130 if ( point_idx != std::string::npos )
132 m_BaseName = iFileName.substr(slash_idx, point_idx - slash_idx);
136 slash_idx = iFileName.rfind(
"\\");
137 if ( point_idx != std::string::npos )
139 m_BaseName = iFileName.substr(slash_idx, point_idx - slash_idx);
149 for (
unsigned int i = 0; i <
m_LSMReaders.size(); i++ )
160 std::vector< vtkLSMReader * >
176 std::cout <<
m_LSMReaders[0]->GetDescription() << std::endl;
184 std::string headerfilename = iDirectoryPath;
186 headerfilename +=
".meg";
188 std::ofstream file( headerfilename.c_str() );
189 file <<
"MegaCapture" << std::endl;
190 file <<
"<ImageSessionData>" << std::endl;
191 file <<
"Version 3.0" << std::endl;
192 file <<
"ExperimentTitle " << std::endl;
193 file <<
"ExperimentDescription ";
199 file <<
"TimeInterval " <<
m_LSMReaders[0]->GetTimeInterval() << std::endl;
200 file <<
"Objective " <<
m_LSMReaders[0]->GetObjective() << std::endl;
201 file <<
"VoxelSizeX " << spacing[0] * 1000000 << std::endl;
202 file <<
"VoxelSizeY " << spacing[1] * 1000000 << std::endl;
203 file <<
"VoxelSizeZ " << spacing[2] * 1000000 << std::endl;
204 file <<
"DimensionX " << dim[0] << std::endl;
205 file <<
"DimensionY " << dim[1] << std::endl;
206 file <<
"DimensionPL " <<
m_Plaque << std::endl;
207 file <<
"DimensionCO " <<
m_Column << std::endl;
208 file <<
"DimensionRO " <<
m_Row << std::endl;
209 file <<
"DimensionZT " <<
m_ZTile << std::endl;
210 file <<
"DimensionYT " <<
m_YTile << std::endl;
211 file <<
"DimensionXT " <<
m_XTile << std::endl;
213 file <<
"DimensionZS " << dim[2] << std::endl;
216 unsigned int i, j, k;
219 int r =
m_LSMReaders[0]->GetChannelColorComponent(i, 0);
220 int g =
m_LSMReaders[0]->GetChannelColorComponent(i, 1);
221 int b =
m_LSMReaders[0]->GetChannelColorComponent(i, 2);
223 file <<
"ChannelColor" << i <<
" " << r * 256 * 256 + g * 256 + b << std::endl;
226 file <<
"ChannelDepth 8" << std::endl;
227 file <<
"FileType PNG" << std::endl;
228 file <<
"</ImageSessionData>" << std::endl;
230 if ( m_NumberOfChannels > 1 )
242 char timeStr[100] =
"";
247 strftime( timeStr, 100,
"%Y-%m-%d %H:%M:%S", localtime(&buf.st_mtime) );
261 image3d->GetExtent(extent);
263 for ( k = 0; k < static_cast< unsigned int >( dim[2] ); k++ )
265 std::stringstream filename;
267 filename <<
"-CO" << setfill(
'0') << setw(2) <<
m_Column;
268 filename <<
"-RO" << setfill(
'0') << setw(2) <<
m_Row;
269 filename <<
"-ZT" << setfill(
'0') << setw(2) <<
m_ZTile;
270 filename <<
"-YT" << setfill(
'0') << setw(2) <<
m_YTile;
271 filename <<
"-XT" << setfill(
'0') << setw(2) <<
m_XTile;
272 filename <<
"-TM" << setfill(
'0') << setw(4) << i;
273 filename <<
"-ch" << setfill(
'0') << setw(2) << j;
274 filename <<
"-zs" << setfill(
'0') << setw(4) << k;
291 file <<
"<Image>" << std::endl;
292 file <<
"Filename " << filename.str() << std::endl;
293 file <<
"DateTime " << timeStr << std::endl;
294 file <<
"StageX 1000" << std::endl;
295 file <<
"StageY -1000" << std::endl;
296 file <<
"Pinhole 44.216" << std::endl;
297 file <<
"</Image>" << std::endl;
299 vtkExtractVOI *extract = vtkExtractVOI::New();
300 extract->SetSampleRate(1, 1, 1);
301 extract->SetInput(image3d);
303 extract->SetVOI(extent[0], extent[1], extent[2], extent[3], k, k);
306 vtkImageData *image2d = extract->GetOutput();
308 std::string final_filename = iDirectoryPath;
309 final_filename += filename.str();
316 vtkWriteImage< vtkPNGWriter >(image2d, final_filename);
321 vtkWriteImage< vtkTIFFWriter >(image2d, final_filename);
void SetPlaque(const unsigned int &iPlaque)
LSMToMegaCapture()
Constructor.
unsigned int m_NumberOfTimePoints
std::vector< vtkLSMReader * > GetLSMReaders()
GoFigure::FileType m_FileType
void SetColumn(const unsigned int &iCol)
void SetFileName(const std::string &iFileName)
Set input lsm file. (Extract m_BaseName)
void SetYTile(const unsigned int &iYt)
~LSMToMegaCapture()
Destructor.
void Export(const std::string &iDirectoryPath)
Export as MegaCapture.
std::vector< vtkLSMReader * > m_LSMReaders
static vtkLSMReader * New()
unsigned int m_NumberOfChannels
void SetZTile(const unsigned int &iZt)
void SetOutputFileType(const GoFigure::FileType &iFileType)
Set the output format: PNG (default) or TIFF.
void SetXTile(const unsigned int &iXt)
void SetRow(const unsigned int &iRow)