topical media & game development
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.