Image.h
上传用户:kellyonhid
上传日期:2013-10-12
资源大小:932k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. //############################################################
  2. // Image.h
  3. // Kari Pulli
  4. // 10/25/95
  5. //############################################################
  6. #ifndef _Image_h
  7. #define _Image_h
  8. /*** includes ***/
  9. #include <iostream.h>
  10. typedef unsigned char uchar;
  11. /*** class definition ***/
  12. class Image
  13. {
  14. private:
  15.   int xsize, ysize;
  16.   uchar *_data,           // actual data
  17.         **data;           // row pointers
  18.   int dim;                // 1 bw, 3 rgb, 4 rgba
  19.   int inside(int x, int y)
  20.     { return (x >= 0 && x < xsize && y >= 0 && y < ysize); }
  21.   uchar *at(int x, int y) const
  22.     { return &(data[y][dim*x]); }
  23. public:
  24.   enum Format { WSU, SGI, RAWRGB, FLOATRGB };
  25.   Image();
  26.   Image(const Image& a);
  27.   Image &operator =(const Image &a);
  28.   Image(const int w, const int h, const int d=1);
  29.   ~Image();
  30.   void create(const int w, const int h, const int d);
  31.   int dimension(void) const { return dim; }
  32.   int width(void)     const { return xsize; }
  33.   int height(void)    const { return ysize; }
  34.   uchar getR(int x, int y) const 
  35.     { return at(x,y)[0]; }
  36.   uchar getG(int x, int y) const 
  37.     { return (dim>1) ? at(x,y)[1] : at(x,y)[0]; }
  38.   uchar getB(int x, int y) const 
  39.     { return (dim>1) ? at(x,y)[2] : at(x,y)[0]; }
  40.   uchar getValue(int x, int y) 
  41.     { return *at(x,y); }
  42.   uchar *getValues(int x, int y) 
  43.     { return at(x,y); }
  44.   const uchar *getValuesConst(int x, int y) const
  45.     { return at(x,y); }
  46.   void setValue(int x, int y, uchar a, 
  47. uchar b=0, uchar c=0, uchar d=0);
  48.   operator const uchar *(void) const   { return _data; }
  49.   operator       uchar *(void)         { return _data; }
  50.   void toRGBA(void);
  51.   void toRGB(void);
  52.   void RGB2HSV(void);
  53.   void HSV2RGB(void);
  54.   void RGB2rgI(void);
  55.   void rgI2RGB(void);
  56.   void resize(int w, int h);
  57.   void flip(void); // flips the image vertically
  58.   void distances(int iter = 4);
  59.   void dist4fast(void);
  60.   int read(const char *file, Format format=SGI, int w=0, int h=0);
  61.   int write(const char *file, Format format=SGI);
  62.   Image shrink(int factor) const;
  63.   void  shrink_by_half(Image &simg) const;
  64.   Image warp(float m[3][3]) const;
  65.   Image crop(int x, int y, int dx, int dy);
  66.   
  67.   Image &fill(uchar a, uchar b=0, uchar c=0, uchar d=0);
  68.   friend ostream &operator <<(ostream &out, Image &im);
  69. };
  70. inline void
  71. Image::setValue(int x, int y, uchar a, uchar b, uchar c, uchar d)
  72. {
  73.   if (!inside(x,y)) return;
  74.   uchar *tmp = at(x,y);
  75.   tmp[0] = a;
  76.   if (dim>1) {
  77.     tmp[1] = b; tmp[2] = c;
  78.     if (dim>3)  tmp[3] = d;
  79.   }
  80. }
  81. #endif /* _Image_h */