image.h 1.46 KB
#ifndef STIM_IMAGE_H
#define STIM_IMAGE_H

#include "CImg.h"

#include <iostream>

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 T>
class image{

	cimg_library::CImg<T> 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<unsigned char>(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