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

Last change on this file since 2367 was 1390, checked in by ansari, 25 years ago

Modifs interface FFTServer , Reza 9/2/2001

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