topical media & game development

talk show tell print

lib-of-vs-libs-openFrameworks-graphics-ofImage.h / h



  ifndef _OF_IMAGE_H_
  define _OF_IMAGE_H_
  
  include <ofConstants.h>
  include <ofTexture.h>
  include <ofGraphics.h>
  include <ofAppRunner.h>                // for height()
  include <FreeImage.h>
  include <ofUtils.h>
  
  typedef struct {
  
          unsigned char * pixels;
          int width;
          int height;
  
          int                bitsPerPixel;                // 8 = gray, 24 = rgb, 32 = rgba
          int                bytesPerPixel;                // 1, 3, 4 bytes per pixels
          GLint        glDataType;                        // GL_LUMINANCE, GL_RGB, GL_RGBA
          int                ofImageType;                // OF_IMAGE_GRAYSCALE, OF_IMAGE_COLOR, OF_IMAGE_COLOR_ALPHA
          bool        bAllocated;
  
  } ofPixels;
  
  //----------------------------------------------------
  // freeImage based stuff:
  void         ofCloseFreeImage();                // when we exit, we shut down ofImage
  
  //----------------------------------------------------
  class ofImage : public ofBaseDraws, public ofBaseHasTexture, public ofBaseHasPixels{
  
          public :
  
                  ofImage();
                  virtual ~ofImage();
  
                  // alloation / deallocation routines
                  void                                 allocate(int w, int h, int type);
                  void                                 clear();
  
                  // default copy overwriting (for = or std::vector)
                  ofImage(const ofImage& mom);
                  ofImage& operator= (const ofImage& mom);
  
                  // copying:
                  void                                 clone(const ofImage &mom);
  
                  // enable or disable using the texture of this image
                  void                                 setUseTexture(bool bUse);
  
                  //for getting a reference to the texture
                  ofTexture & getTextureReference();
  
                  // file loading / saving
                  bool                                 loadImage(string fileName);
                  void                                 saveImage(string fileName);
  
                  // getting the data
                  unsigned char *         getPixels();                        // up to you to get this right
  
                  // alter the image
                  void                                 setFromPixels(unsigned char * pixels, int w, int h, int newType, bool bOrderIsRGB = true);
                  void                                 setImageType(int type);
                  void                                 resize(int newWidth, int newHeight);
                  void                                 grabScreen(int x, int y, int w, int h);                // grab pixels from opengl, using glreadpixels
  
                  // if you've altered the pixels (from getPixels()) call update() to see a change:
                  void                                update();
  
                  
                  //the anchor is the point the image is drawn around. 
                  //this can be useful if you want to rotate an image around a particular point. 
          void                                setAnchorPercent(float xPct, float yPct);        //set the anchor as a percentage of the image width/height ( 0.0-1.0 range )
          void                                setAnchorPoint(int x, int y);                                //set the anchor point in pixels
          void                                resetAnchor();                                                                //resets the anchor to (0, 0)
  
                  // draw:
                  void                                 draw(float x, float y, float w, float h);
                  void                                 draw(float x, float y);
  
                  float                                 getHeight();
                  float                                 getWidth();
  
                  int                                 width, height, bpp;                // w,h, bits per pixel
                  int                                        type;                                        // OF_IMAGE_GRAYSCALE, OF_IMAGE_COLOR, OF_IMAGE_COLOR_ALPHA
  
          protected:
  
                  // freeImage related functionality:
  
                  bool                                loadImageIntoPixels(string fileName, ofPixels &pix);
                  void                                saveImageFromPixels(string fileName, ofPixels &pix);
                  void                                changeTypeOfPixels(ofPixels &pix, int newType);
                  void                                resizePixels(ofPixels &pix, int newWidth, int newHeight);
                  FIBITMAP *                        getBmpFromPixels(ofPixels &pix);
                  void                                putBmpIntoPixels(FIBITMAP * bmp, ofPixels &pix);
  
                  // utils:
                  inline void                        allocatePixels(ofPixels &pix, int width, int height, int bpp);
                  inline void                        swapRgb(ofPixels &pix);
  
                  ofPixels                        myPixels;
                  bool                                bUseTexture;
                  ofTexture                        tex;
  
  };
  
  endif
  


(C) Æliens 04/09/2009

You may not copy or print any of this material without explicit permission of the author or the publisher. In case of other copyright issues, contact the author.