image.h 1.09 KB
#ifndef STIM_IMAGE_H
#define STIM_IMAGE_H

#include "CImg.h"

#include <iostream>
//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> data;

public:

	//Load an image from a file
	void load(std::string filename){
		data.load(filename.c_str());
	}

	//save a file
	void save(std::string filename){
		data.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];
			}
		}

		data = cimg_library::CImg<unsigned char>(non_interleaved, width, height, 1, channels);

	}

	



};


#endif