// Classes image heritant de TMatrix // R.Ansari, C.Magneville 07/2000 // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA #include "sopnamsp.h" #include "machdefs.h" #include #include #include "pexceptions.h" #include "datatype.h" #include #define CIMAGE_CC_BFILE // avoid extern template declarations #include "cimage.h" /*! \class SOPHYA::Image \ingroup NTools This class specializes the Matrix class, for representing intensity (or grey-level) images. It adds the possibility of defining pixel size and offset. The convention for the acces operator is also changed, compared to the matrix class. */ //! Default constructor - Pixel array not allocated template Image::Image() // Constructeur par defaut. : TMatrix() { SetOrg(); SetPixelSize(); } //! Constructor, with specification of the image size, pixel size and offsets template Image::Image(sa_size_t sizx, sa_size_t sizy, r_8 szpx, r_8 szpy, r_8 orgx, r_8 orgy) // Constructeur par defaut. : TMatrix(sizy, sizx) { SetOrg(orgx, orgy); SetPixelSize(szpx, szpy); } //! Copy constructor template Image::Image(const Image& a) : TMatrix(a) { SetOrg(a.XOrg(), a.YOrg() ); SetPixelSize(a.XPixSize(), a.YPixSize()); } //! Copy constructor with possibility of duplicating the pixel array /*! \param share : if true, the data is shared, duplicated if false. */ template Image::Image(const Image& a, bool share) : TMatrix(a, share) { SetOrg(a.XOrg(), a.YOrg() ); SetPixelSize(a.XPixSize(), a.YPixSize()); } //! Destructor template Image::~Image() { } // -------------------------------------------------------- // Les objets delegues pour la gestion de persistance // -------------------------------------------------------- /*! \class SOPHYA::FIO_Image \ingroup Image Class for persistent management of Image */ /////////////////////////////////////////////////////////// //! Default constructor template FIO_Image::FIO_Image() : FIO_TArray() { } //! Constructor from the file \b filename template FIO_Image::FIO_Image(string const & filename) : FIO_TArray(filename) { } //! Constructor from the Image \b obj template FIO_Image::FIO_Image(const Image & obj) : FIO_TArray() { this->dobj = new Image(obj, true); this->ownobj=true; } //! Connect with a Image \b obj template FIO_Image::FIO_Image(Image * obj) : FIO_TArray(obj) { } //! Connect Image \b o template void FIO_Image::SetDataObj(AnyDataObj & o) { Image * po = dynamic_cast< Image * >(&o); if (po == NULL) { char buff[160]; sprintf(buff,"FIO_Image<%s>::SetDataObj(%s) - Object type error ! ", DataTypeInfo::getTypeName().c_str(), typeid(o).name()); throw TypeMismatchExc(PExcLongMessage(buff)); } if (this->ownobj && this->dobj) delete this->dobj; this->dobj = po; this->ownobj = false; } template void FIO_Image::ReadSelf(PInPersist& is) { if (this->dobj == NULL) this->dobj = new Image; Image * img = dynamic_cast * > (this->dobj); // On lit les 3 premiers uint_4 // 0: Numero de version, 1 : reserve uint_4 itab[3]; is.Get(itab,3); // Image part data r_8 orgx, orgy; is.Get(orgx); is.Get(orgy); img->SetOrg(orgx, orgy); r_8 szx, szy; is.Get(szx); is.Get(szy); img->SetPixelSize(szx, szy); // Reading the TArray part FIO_TArray::ReadSelf(is); } template void FIO_Image::WriteSelf(POutPersist& os) const { if (this->dobj == NULL) return; Image * img = dynamic_cast * > (this->dobj); // On ecrit 3 uint_4 .... uint_4 itab[3]; itab[0] = 1; // Numero de version a 1 itab[1] = 0; itab[2] = 0; os.Put(itab,3); // Image part data os.Put(img->XOrg()); os.Put(img->XOrg()); os.Put(img->XPixSize()); os.Put(img->YPixSize()); // Writing the TArray part FIO_TArray::WriteSelf(os); } /////////////////////////////////////////////////////////////// #ifdef __CXX_PRAGMA_TEMPLATES__ #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image #pragma define_template Image< complex > #pragma define_template Image< complex > #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image #pragma define_template FIO_Image< complex > #pragma define_template FIO_Image< complex > #endif #if defined(ANSI_TEMPLATES) || defined(GNU_TEMPLATES) namespace SOPHYA { template class Image; template class Image; template class Image; template class Image; template class Image; template class Image; template class Image; template class Image; template class Image; template class Image; template class Image< complex >; template class Image< complex >; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image; template class FIO_Image< complex >; template class FIO_Image< complex >; } #endif