source: Sophya/trunk/SophyaLib/NTools/rzimage.h@ 757

Last change on this file since 757 was 756, checked in by ansari, 26 years ago

Restructuration de Sophya en petits modules - Petites corrections diverses

Reza 2/3/2000

File size: 7.0 KB
Line 
1// This may look like C code, but it is really -*- C++ -*-
2// Classe image generique E.Aubourg , E. Lesquoy
3// Modifs R. Ansari 04/95
4
5// LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
6
7#ifndef RZIMAGE_SEEN
8#define RZIMAGE_SEEN
9
10#include <iostream.h>
11
12#include "rzvect.h"
13#include "datatypes.h"
14#include "ppersist.h"
15#include "dvlist.h"
16
17namespace SOPHYA {class GeneralFit;}
18
19// Flags de verifications sur les indices
20
21//#define IMGRGCHECK
22//#define IMGVOIDCHECK
23
24
25// ------------- Classe RzImage ------------------
26
27typedef union { // il faut acceder le bon en fonction de datatype
28 RzVect<uint_1>* u1;
29 RzVect<uint_2>* u2;
30 RzVect<int_2>* i2;
31 RzVect<int_4>* i4;
32 RzVect<r_4>* r4;
33 RzVect<r_8>* r8;
34} ImgVectP ;
35
36
37
38class RzImage : public PPersist , public AnyDataObj {
39 //class RzImage EXC_AWARE {
40public:
41 enum {classId = ClassId_Image };
42
43 RzImage(PBaseDataTypes dType, int sizx, int sizy,
44 int imgId = 0, char const * imgName = 0);
45 RzImage(PBaseDataTypes dType=kpbdt_unknown);
46 RzImage(const RzImage&, int sharePixels=0);
47
48 RzImage(char *flnm); // Creation/Lecture fichier de obtenu par Write()
49
50 virtual ~RzImage();
51
52 int_4 ClassId() const { return classId; }
53 static PPersist* Create() { return new RzImage;}
54
55 RzImage& operator= (RzImage const &);
56
57 inline int_4 XSize() const {return siz_x;}
58 inline int_4 YSize() const {return siz_y;}
59
60 inline int_4 XOrg() const {return org_x;}
61 inline int_4 YOrg() const {return org_y;}
62
63 inline float XPxSize() const {return pxsz_x;}
64 inline float YPxSize() const {return pxsz_y;}
65
66 inline ImgVectP Vect() const {return vect;}
67 inline void * VoidP() const {return voidP;}
68 inline int IsFits() const {return isFits;}
69
70 inline PBaseDataTypes PixelType() const { return dataType; }
71 inline char * PixelNomType() const { return DataName(dataType); }
72
73 inline char * Nom() { return name; }
74 inline const char * Nom() const { return name; }
75 inline int_4 Ident() const { return id; }
76
77 DVList& Info();
78
79 void Allocate(PBaseDataTypes dType, int sizx, int sizy, ImgVectP* pvpsh=NULL);
80 void DeAllocPixels();
81 void SetPixels(PBaseDataTypes dType, int sizx, int sizy, void* data);
82
83 void SetOrg(int_4 orgx, int_4 orgy);
84 void SetPxSize(float szx=1, float szy=1);
85 void SetAtt(int nbnul = -1, int nbsat = -1,
86 float minpix = 0, float maxpix = -1.,
87 float moypix = 0, float sigpix = -1.,
88 float fnd = -1., float sigfnd = -1.);
89
90 void SetNameId(int imgid = 0, char const * nom = NULL);
91
92// Fonctions d'impressions
93 virtual void Print(ostream& os) const;
94 inline void Print() const { Print(cout); }
95
96 virtual int CheckDyn(double min=-9.e19, double max=9.e19);
97
98// Resultats d'un GeneralFit
99 RzImage* FitResidus(GeneralFit& gfit);
100 RzImage* FitFunction(GeneralFit& gfit);
101
102 void Save(char *flnm);
103 virtual void WriteSelf(POutPersist&) const;
104 virtual void ReadSelf(PInPersist&);
105 virtual AnyDataObj* DataObj() { return(this); }
106 virtual void SetDataObj(AnyDataObj &)
107 { throw ForbiddenError("RzImage::SetDataObj() not allowed ! "); }
108
109// Fonctions d'acces aux pixels avec conversion
110// ATTENTION LENT ! EVITER AUX ENDROITS CRITIQUES.
111
112 int IValue(int i, int j) const ;
113 int IValue(int k) const ;
114 float FValue(int i, int j) const ;
115 float FValue(int k) const ;
116 double DValue(int i, int j) const ;
117 double DValue(int k) const ;
118
119// Quelques variables caracterisant la distribution des pixels
120 r_4 fond; // Fond de l'image
121 r_4 sigmaFond; // Fluctuation du fond
122 int_4 nbNul; // Nb de pixels < min
123 int_4 nbSat; // Nb de pixels > max
124 r_4 minPix; // Valeur mini des pixels >= min <= max
125 r_4 maxPix; // Valeur maxi des pixels >= min <= max
126 r_4 moyPix; // Valeur moyenne des pixels
127 r_4 sigPix; // Sigma distribution des pixels
128
129protected:
130 PBaseDataTypes dataType;
131 int_4 siz_x,siz_y; // Taille x,y
132 int_4 org_x,org_y; // Origines si image lu ds un fichier
133 r_4 pxsz_x, pxsz_y; // Taille des pixels
134 int_4 isFits; // Beurk. Ah que Reza ne me fait-il pas faire!
135 char name[32]; // Nom de l'image (Gestion des objets)
136 int_4 id; // Identificateur (Gestion des objets)
137
138 void* voidP; // un pointeur sans type -
139 // Vivement le RTTI qu'on puisse eliminer ces choses
140 ImgVectP vect; // il faut acceder le bon en fonction de datatype
141
142 DVList* mInfo; // Infos (variables) attachees a l'image
143
144private:
145 int (RzImage::* IVal_p)(int) const;
146 float (RzImage::* FVal_p)(int) const;
147 double (RzImage::* DVal_p)(int) const;
148
149 int IVal_u1(int k) const;
150 int IVal_u2(int k) const;
151 int IVal_i2(int k) const;
152 int IVal_r4(int k) const;
153 int IVal_i4(int k) const;
154 int IVal_r8(int k) const;
155
156 float FVal_u1(int k) const;
157 float FVal_u2(int k) const;
158 float FVal_i2(int k) const;
159 float FVal_r4(int k) const;
160 float FVal_i4(int k) const;
161 float FVal_r8(int k) const;
162
163 double DVal_u1(int k) const;
164 double DVal_u2(int k) const;
165 double DVal_i2(int k) const;
166 double DVal_r4(int k) const;
167 double DVal_i4(int k) const;
168 double DVal_r8(int k) const;
169};
170
171// Definition de l'operateur <<
172inline ostream& operator << (ostream& s, RzImage const & img)
173 { img.Print(s); return(s); }
174
175// Implementation des methodes d'acces pixels inline
176
177#ifdef IMGRGCHECK
178#define RZCHECKIMG2(_x_,_y_) \
179 if ((_x_ >= siz_x) || (_y_ >= siz_y) || \
180 (_x_ < 0) || (_y_ < 0)) THROW(rangeCheckErr); \
181 if (!voidP) THROW(nullPtrErr)
182#define RZCHECKIMG1(_x_) \
183 if ((_x_ >= siz_x*siz_y) || (_x_ < 0)) THROW(rangeCheckErr); \
184 if (!voidP) THROW(nullPtrErr)
185#else
186#if defined(IMGVOIDCHECK)
187#define RZCHECKIMG2(_x_,_y_) \
188 if (!voidP) THROW(NullPtrErr)
189#define RZCHECKIMG1(_x_,_y_) \
190 if (!voidP) THROW(NullPtrErr)
191#else
192#define RZCHECKIMG2(_x_,_y_)
193#define RZCHECKIMG1(_x_)
194#endif
195#endif /* IMGRGCHECK */
196
197// Methodes d'acces pixels inline
198
199inline int RzImage::IValue(int k) const
200{
201RZCHECKIMG1(k);
202return (this->*IVal_p)(k);
203}
204
205inline int RzImage::IValue(int i, int j) const
206{
207RZCHECKIMG2(i,j);
208return IValue(i+j*siz_x);
209}
210
211inline float RzImage::FValue(int k) const
212{
213RZCHECKIMG1(k);
214return (this->*FVal_p)(k);
215}
216
217inline float RzImage::FValue(int i, int j) const
218{
219RZCHECKIMG2(i,j);
220return FValue(i+j*siz_x);
221}
222
223inline double RzImage::DValue(int k) const
224{
225RZCHECKIMG1(k);
226return (this->*DVal_p)(k);
227}
228
229inline double RzImage::DValue(int i, int j) const
230{
231RZCHECKIMG2(i,j);
232return DValue(i+j*siz_x);
233}
234
235#endif
Note: See TracBrowser for help on using the repository browser.