00001 #ifndef __RMultiScaleImage__ 00002 #define __RMultiScaleImage__ 00003 00004 00005 00029 class RImage; 00030 class AnImage; 00031 00032 00033 class RMultiScaleImage 00034 { 00035 private: 00036 00037 int channel; 00038 00039 int width0; 00040 int height0; 00041 00042 double scale; 00043 int maxLevels; 00044 00045 RImage** plane; // level is mostly the original image 00046 00047 00048 public: 00049 00050 RMultiScaleImage( int w, int h , int levels=4, double scales=0.5, bool filled=true); 00051 RMultiScaleImage( RImage* source, int levels=4, double scales=0.5, bool filled=true); 00052 RMultiScaleImage( AnImage* source , int achannel=0, int levels=4, double scales=0.5, bool filled=true); 00053 RMultiScaleImage( RMultiScaleImage& im); // copy 00054 ~RMultiScaleImage(); 00055 00056 RMultiScaleImage* copy(); 00057 00058 int getLevels(){return maxLevels;} 00059 double getScale(){return scale;} 00060 00061 RImage* get0(){return plane[0];} 00062 RImage* get(int level){return plane[level];} 00063 00064 void set0(RImage* src); 00065 void set(int level, RImage* aplane); 00066 00067 int getWidth(){ return width0; } 00068 int getHeight(){ return height0; } 00069 00070 int getWidth(int level); 00071 int getHeight(int level); 00072 00073 // pixel operation 00074 inline double get(int x, int y, int level=0){ return plane[level]->get(x,y); } 00075 inline void set(int x,int y, int level, double value){ plane[level]->set(x,y, value); } 00076 }; 00077 00078 #endif