#ifndef STIM_IMAGE_H #define STIM_IMAGE_H #include "CImg.h" #include namespace stim{ //This static class provides the STIM interface for loading images // Use this interface for all image management - that way the actual library can be changed without problems //currently this interface uses CImg // T = data type (usually unsigned char) template class image{ cimg_library::CImg img; public: //default constructor image(){ } //constructor (load an image file) image(std::string filename){ img.load(filename.c_str()); } //Load an image from a file void load(std::string filename){ img.load(filename.c_str()); } //save a file void save(std::string filename){ img.save(filename.c_str()); } //create an image from an interlaced buffer void set_interleaved(T* buffer, unsigned int width, unsigned int height, unsigned int channels = 1){ unsigned char* non_interleaved = (unsigned char*)malloc(width * height * 3); unsigned int S = width * height; for(unsigned int i = 0; i < S; i++){ for(unsigned int c = 0; c < channels; c++){ non_interleaved[i + c * S] = buffer[i * channels + c]; } } img = cimg_library::CImg(non_interleaved, width, height, 1, channels); } //returns a pointer to the first pixel of the image data T* data(){ return img.data(); } //returns the size (number of values) of the image unsigned long size(){ return img.size(); } }; }; //end namespace stim #endif