source: Sophya/trunk/SophyaLib/NTools/cimage.h@ 3201

Last change on this file since 3201 was 3189, checked in by cmv, 19 years ago

ajout methode =cste pour class Image cmv 9/3/2007

File size: 4.5 KB
RevLine 
[220]1// This may look like C code, but it is really -*- C++ -*-
[1104]2// Classes image heritant de TMatrix<T>
3// R.Ansari, C.Magneville 07/2000
[220]4// LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
5
6#ifndef CIMAGE_SEEN
7#define CIMAGE_SEEN
8
[1104]9#include "tmatrix.h"
[1159]10#include "fioarr.h"
[220]11
12
13// **********************************************************
14// Classe Image
15
[1104]16namespace SOPHYA {
[220]17
[1390]18//! Class for handling images
[220]19template <class T>
[1104]20class Image : public TMatrix<T> {
[220]21
22public:
23 Image();
[1390]24 Image(sa_size_t sizx, sa_size_t sizy, r_8 szpx=1., r_8 szpy=1., r_8 orgx=0., r_8 orgy=0.);
[1104]25 Image(const Image<T>& a);
26 Image(const Image<T>& a, bool share);
27
[220]28 virtual ~Image();
29
[1104]30 // Inline element acces methods
[1390]31 inline T const& operator()(sa_size_t ix, sa_size_t jy) const;
32 inline T& operator()(sa_size_t ix, sa_size_t jy);
[220]33
[1390]34 //! Returns the image size along X (corresponding to the number of columns)
[2885]35 inline sa_size_t XSize() const {return this->NCols();}
[1390]36 //! Returns the image size along Y (corresponding to the number of lines)
[2885]37 inline sa_size_t YSize() const {return this->NRows();}
[220]38
[1390]39 //! Returns the X position, for pixel(0,0)
[1104]40 inline r_8 XOrg() const {return org_x;}
[1390]41 //! Returns the Y position, for pixel(0,0)
[1104]42 inline r_8 YOrg() const {return org_y;}
[220]43
[1390]44 //! Returns pixel size along X
[1104]45 inline r_8 XPixSize() const {return pxsz_x;}
[1390]46 //! Returns pixel size along Y
[1104]47 inline r_8 YPixSize() const {return pxsz_y;}
[220]48
[1390]49 //! Returns the pixel position along X, for pixels with X index \b i
50 inline r_8 XPos(sa_size_t i) const {return org_x + i*pxsz_x;}
51 //! Returns the pixel position along Y, for pixels with Y index \b j
52 inline r_8 YPos(sa_size_t j) const {return org_y + j*pxsz_y;}
[1204]53
[1390]54 //! Set the position for pixel(0,0)
[1104]55 inline void SetOrg(r_8 orgx=0., r_8 orgy=0.)
56 { org_x = orgx; org_y = orgy; }
[1390]57 //! Set the pixel size
[1104]58 inline void SetPixelSize(r_8 szx=1., r_8 szy=1.)
59 { pxsz_x = szx; pxsz_y = szy; }
[220]60
[3189]61 //! = : fill image with constant value \b x
62 inline Image<T>& operator = (T x) {SetT(x); return(*this);}
63
[220]64protected:
[1104]65 r_8 org_x,org_y; // Coordonnees pixel(0,0)
66 r_8 pxsz_x, pxsz_y; // Taille des pixels
[220]67};
68
[1390]69//! () : Return the pixel value (element) for pixel \b ix (column index) and \b jy (line index)
[220]70template <class T>
[1390]71inline T const& Image<T>::operator()(sa_size_t ix, sa_size_t jy) const
[220]72{
[1104]73 return (TMatrix<T>::operator() (jy, ix));
[220]74}
75
[1390]76//! () : Return the pixel value (element) for pixel \b ix (column index) and \b jy (line index)
[220]77template <class T>
[1390]78inline T & Image<T>::operator()(sa_size_t ix, sa_size_t jy)
[220]79{
[1104]80 return (TMatrix<T>::operator() (jy, ix));
[220]81}
82
[1159]83/////////////////////////////////////////////////////////////////////////
84//! Class for persistent management of Image
85template <class T>
86class FIO_Image : public FIO_TArray<T> {
87public:
88 FIO_Image();
89 FIO_Image(string const & filename);
90 FIO_Image(const Image<T> & obj);
91 FIO_Image(Image<T> * obj);
92 // virtual ~FIO_Image();
93 virtual void SetDataObj(AnyDataObj & o);
[2885]94 inline operator Image<T>() { return(*(dynamic_cast<Image<T> * >(this->dobj))); }
[1159]95protected :
96 virtual void ReadSelf(PInPersist&);
97 virtual void WriteSelf(POutPersist&) const;
98};
[220]99
[1390]100/*! \ingroup NTools \fn operator<<(POutPersist&,Image<T>&)
[1159]101 \brief Write Image \b obj into POutPersist stream \b os */
102template <class T>
103inline POutPersist& operator << (POutPersist& os, Image<T> & obj)
104{ FIO_Image<T> fio(&obj); fio.Write(os); return(os); }
105
[1390]106/*! \ingroup NTools \fn operator>>(PInPersist&,Image<T>&)
[1159]107 \brief Read Image \b obj from PInPersist stream \b os */
108template <class T>
109inline PInPersist& operator >> (PInPersist& is, Image<T> & obj)
110{ FIO_Image<T> fio(&obj); fio.Read(is); return(is); }
111
112
113
[220]114typedef Image<uint_2> ImageU2;
115typedef Image<int_4> ImageI4;
116typedef Image<r_4> ImageR4;
[1104]117typedef Image<r_8> ImageR8;
[220]118
[1104]119class GeneralFit;
[1390]120//! OBSOLETE - Should not be used - for compatibility with peida in (s)piapp
[1104]121class RzImage {
122public:
123 RzImage() { }
124 ~RzImage() { }
125 inline uint_4 XSize() const {return 0;}
126 inline uint_4 YSize() const {return 0;}
[220]127
[1104]128 inline r_8 XOrg() const {return 0;}
129 inline r_8 YOrg() const {return 0;}
[220]130
[1104]131 inline r_8 XPixSize() const {return 1.;}
132 inline r_8 YPixSize() const {return 1.;}
133 inline r_8 DValue(int i, int j) const { return 0.; }
134 // Resultats d'un GeneralFit
135 inline RzImage* FitResidus(GeneralFit& gfit) { return NULL; }
136 inline RzImage* FitFunction(GeneralFit& gfit) { return NULL; }
[896]137
[1104]138};
139
140} // End of namespace SOPHYA
141
[220]142#endif
143
144
Note: See TracBrowser for help on using the repository browser.