| 1 | // This may look like C code, but it is really -*- C++ -*-
|
|---|
| 2 | // Classes ArrayAdapter R. Ansari 05/98
|
|---|
| 3 | // LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
|
|---|
| 4 |
|
|---|
| 5 | // Cette classe est un adaptateur pour les PIImages et
|
|---|
| 6 | // autres classes de PI qui operent sur des structures
|
|---|
| 7 | // de type Tableaux 2-D (images, ...)
|
|---|
| 8 |
|
|---|
| 9 | #ifndef PARRADAPTER_SEEN
|
|---|
| 10 | #define PARRADAPTER_SEEN
|
|---|
| 11 |
|
|---|
| 12 | #include "defs.h"
|
|---|
| 13 | #include "machine.h"
|
|---|
| 14 | #include "lut.h"
|
|---|
| 15 |
|
|---|
| 16 | class LUT;
|
|---|
| 17 | class P2DArrayAdapter {
|
|---|
| 18 | public :
|
|---|
| 19 | P2DArrayAdapter(int sx=0, int sy=0);
|
|---|
| 20 | virtual ~P2DArrayAdapter();
|
|---|
| 21 |
|
|---|
| 22 | void ConfigureAxes(bool invx=false, bool invy=false, bool exy=false,
|
|---|
| 23 | int sx=-1, int sy=-1);
|
|---|
| 24 |
|
|---|
| 25 | // Doit etre defini par les classes derivees
|
|---|
| 26 | virtual float Value(int ix, int iy) = 0;
|
|---|
| 27 |
|
|---|
| 28 | virtual void XYfromxy(int ix, int iy, float& x, float& y);
|
|---|
| 29 |
|
|---|
| 30 | inline int XSize() { return ( eXY ? sY : sX ) ; }
|
|---|
| 31 | inline int YSize() { return ( eXY ? sX : sY ) ; }
|
|---|
| 32 |
|
|---|
| 33 | inline void XYCoord(int i, int j, float& x, float& y)
|
|---|
| 34 | { int ix, iy; IJ2xy(i, j, ix, iy);
|
|---|
| 35 | XYfromxy(ix, iy, x, y); }
|
|---|
| 36 | inline float operator() (int i, int j)
|
|---|
| 37 | { int ix, iy; IJ2xy(i, j, ix, iy);
|
|---|
| 38 | return Value(ix, iy); }
|
|---|
| 39 | inline void IJ2xy(int i, int j, int& x, int& y)
|
|---|
| 40 | { if (eXY) {int ii = i; i = j; j = ii; }
|
|---|
| 41 | x = i*sgnX+offX; y = j*sgnY+offY;
|
|---|
| 42 | return; }
|
|---|
| 43 |
|
|---|
| 44 | // Calcul Min-Max, Moy-Sig
|
|---|
| 45 | virtual int CheckDyn(float& min, float& max, float& moy, float& sig, int& nbnul, int& nbsat, int vit=10);
|
|---|
| 46 | // Calcul AutoLut
|
|---|
| 47 | virtual void ComputeLut_PicHisto(float& min, float& max, int nbsig=1, float fracmax=0.95);
|
|---|
| 48 |
|
|---|
| 49 | // Calcul pixmap avec un LUT
|
|---|
| 50 | virtual unsigned char * ComputePixmap(LUT* lut, int ofx, int ofy, int zm,
|
|---|
| 51 | int xwsz, int ywsz, unsigned char * opix,
|
|---|
| 52 | int * oxsp, int * oysp);
|
|---|
| 53 | protected :
|
|---|
| 54 | int sX, sY;
|
|---|
| 55 | int sgnX, sgnY;
|
|---|
| 56 | int offX, offY;
|
|---|
| 57 | bool invX, invY, eXY;
|
|---|
| 58 | };
|
|---|
| 59 |
|
|---|
| 60 |
|
|---|
| 61 | template <class T>
|
|---|
| 62 | class P2DAdapter : public P2DArrayAdapter {
|
|---|
| 63 | public :
|
|---|
| 64 | P2DAdapter(T* data, int sx, int sy, bool ad=false) :
|
|---|
| 65 | P2DArrayAdapter(sx, sy)
|
|---|
| 66 | { aDel = ad; mData = data; }
|
|---|
| 67 |
|
|---|
| 68 | virtual ~P2DAdapter() { if ( (aDel) && (mData != NULL) ) delete[] mData; }
|
|---|
| 69 | virtual float Value(int ix, int iy)
|
|---|
| 70 | { if ( (ix < 0) || (iy < 0) || (ix >= sX) || (iy >= sY) ) return(0.);
|
|---|
| 71 | return(mData[ix+iy*sX]); }
|
|---|
| 72 | protected :
|
|---|
| 73 | bool aDel;
|
|---|
| 74 | T* mData;
|
|---|
| 75 | };
|
|---|
| 76 |
|
|---|
| 77 |
|
|---|
| 78 |
|
|---|
| 79 | #endif
|
|---|