DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
Public Types | Public Member Functions | Static Public Member Functions
DGtal::PGMWriter< TImage, TFunctor > Struct Template Reference

#include <PGMWriter.h>

Public Types

typedef TImage Image
typedef TImage::Value Value
typedef TFunctor Functor

Public Member Functions

 BOOST_CONCEPT_ASSERT ((CUnaryFunctor< TFunctor, Value, unsigned char >))
 BOOST_STATIC_ASSERT ((TImage::Domain::dimension==2)||(TImage::Domain::dimension==3))

Static Public Member Functions

static bool exportPGM (const std::string &filename, const Image &aImage, const Functor &aFunctor=Functor(), bool saveASCII=false, bool topbotomOrder=true)
static bool exportPGM3D (const std::string &filename, const Image &aImage, const Functor &aFunctor=Functor())

Detailed Description

template<typename TImage, typename TFunctor = DefaultFunctor>
struct DGtal::PGMWriter< TImage, TFunctor >

Aim: Export a 2D and a 3D Image using the Netpbm PGM formats (ASCII mode).

Description of template struct 'PGMWriter'

A functor can be specified to convert image values to PGM values (unsigned char).

Usage example:

...
typedef SpaceND<int,2> TSpace;
typedef TSpace::Point Point;
typedef HyperRectDomain<TSpace> Domain;
typedef ImageSelector<Domain, unsigned char>::Type Image;
...
Point a ( 1, 1);
Point b ( 16, 16);
Image image(a,b);
... //Do something in image
PGMWriter<Image>::exportPPM("export.pgm",image);
Template Parameters:
TImagethe Image type.
TFunctorthe type of functor used in the export.
See also:
testPNMRawWriter.cpp

Definition at line 88 of file PGMWriter.h.


Member Typedef Documentation

template<typename TImage , typename TFunctor = DefaultFunctor>
typedef TFunctor DGtal::PGMWriter< TImage, TFunctor >::Functor

Definition at line 93 of file PGMWriter.h.

template<typename TImage , typename TFunctor = DefaultFunctor>
typedef TImage DGtal::PGMWriter< TImage, TFunctor >::Image

Definition at line 91 of file PGMWriter.h.

template<typename TImage , typename TFunctor = DefaultFunctor>
typedef TImage::Value DGtal::PGMWriter< TImage, TFunctor >::Value

Definition at line 92 of file PGMWriter.h.


Member Function Documentation

template<typename TImage , typename TFunctor = DefaultFunctor>
DGtal::PGMWriter< TImage, TFunctor >::BOOST_CONCEPT_ASSERT ( (CUnaryFunctor< TFunctor, Value, unsigned char >)  )
template<typename TImage , typename TFunctor = DefaultFunctor>
DGtal::PGMWriter< TImage, TFunctor >::BOOST_STATIC_ASSERT ( (TImage::Domain::dimension==2)||(TImage::Domain::dimension==3)  )
template<typename TImage , typename TFunctor = DefaultFunctor>
bool DGtal::PGMWriter< I, C >::exportPGM ( const std::string &  filename,
const Image aImage,
const Functor aFunctor = Functor(),
bool  saveASCII = false,
bool  topbotomOrder = true 
)
static

Export an Image with PGM format.

Parameters:
filenamename of the output file
aImagethe image to export
aFunctorfunctor used to cast image values
saveASCIIused to save image with ASCII pixel value and with white space. (default= false since ASCII mode is not efficient).
Returns:
true if no errors occur.
Todo:
catch IOerror excpetion

Definition at line 45 of file PGMWriter.ih.

{
BOOST_STATIC_ASSERT(I::Domain::dimension == 2);
ofstream out;
typename I::Domain::Vector ext = aImage.extent();
typename I::Domain domain = aImage.domain();
typename I::Value val;
out.open(filename.c_str());
//PPM format
if(saveASCII){
out << "P2"<<endl;
}else{
out << "P5"<<endl;
}
out << "#DGtal PNM Writer"<<endl<<endl;
out << ext[0]<<" "<< ext[1]<<endl;
out << "255" <<endl;
if(!topbotomOrder){
//We scan the domain instead of the image becaus we cannot
//trust the image container Iterator
for(typename I::Domain::ConstIterator it = domain.begin(), itend=domain.end();
it!=itend;
++it)
{
val = aImage( (*it) );
if(saveASCII){
out << ((int) aFunctor(val) )<<" ";
}else{
out << ((char)((int) aFunctor(val)));
}
}
}else{
typename I::Domain::Point ptUpper= domain.upperBound();
for(typename HyperRectDomain<typename I::Domain::Space>::ConstSubRange::ConstReverseIterator itY = domain.subRange(1, ptUpper).rbegin(), itYend=domain.subRange(1, ptUpper).rend(); itY!=itYend; ++itY)
{
typename I::Domain::Point ptUpperY= *itY;
for(typename HyperRectDomain<typename I::Domain::Space>::ConstSubRange::ConstIterator it = domain.subRange(0, ptUpperY).begin(), itend=domain.subRange(0, ptUpperY).end();
it!=itend;
++it)
{
val = aImage( (*it) );
if(saveASCII){
out << ((int) aFunctor(val))<<" ";
}else{
out << ((char) aFunctor(val));
}
}
}
}
out.close();
return true;
}
template<typename TImage , typename TFunctor = DefaultFunctor>
bool DGtal::PGMWriter< I, C >::exportPGM3D ( const std::string &  filename,
const Image aImage,
const Functor aFunctor = Functor() 
)
static

Export an Image with PGM3D format.

Parameters:
filenamename of the output file
aImagethe image to export
aFunctorfunctor used to cast image values
Returns:
true if no errors occur.
Todo:
the Value of I should match with the one in C
Todo:
catch IOerror excpetion

Definition at line 113 of file PGMWriter.ih.

{
BOOST_STATIC_ASSERT(I::Domain::dimension == 3);
ofstream out;
typename I::Domain::Vector ext = aImage.extent();
typename I::Domain domain(aImage.lowerBound(), aImage.upperBound());
typename I::Value val;
Color col;
out.open(filename.c_str());
//PPM format
out << "P2-3D"<<endl;
out << "#DGtal PNM Writer"<<endl<<endl;
out << ext[0]<<" "<< ext[1]<<" "<< ext[2]<<endl;
out << "255" <<endl;
//We scan the domain instead of the image becaus we cannot
//trust the image container Iterator
for(typename I::Domain::ConstIterator it = domain.begin(), itend=domain.end();
it!=itend;
++it)
{
val = aImage( (*it) );
out << ((int) aFunctor( val ))<<" ";
}
out.close();
return true;
}

The documentation for this struct was generated from the following files: