/*
*	ImageBMP.h
*
*	Programmé par Hillaire Sébastien
*
*
*	- utilité :
*		charge un bmp 24bits a partir d'un chemein
*
*	- version :
*		1.0
*
*	- update :
*		06/11/2004 : révision et héritage de la classe Image.
*		12/04/2004 : première version
*
*	- NOTE :
*		...
*
*/

#ifndef _IMAGE_BMP_
#define _IMAGE_BMP_

#ifdef WIN32
#include "windows.h"
#endif


#include <iostream>
#include "Image.h"

#include "MemoryManager/DebugNew.h"

namespace RenderSystem
{
	/**
	* la structure de l'en-tête d'un fichier BMP
	*/
	struct BMPHeader
	{
	/**
	* ???
	*/
	unsigned short bfType;
	/**
	* la taille de ???
	*/
	unsigned int bfSize;
	/**
	* ???
	*/
	unsigned short bfReserved1;
	/**
	* ???
	*/
	unsigned short bfReserved2;
	/**
	* ???
	*/
	unsigned int bfOffBits;
	/**
	* ???
	*/
	unsigned int biSize;
	/**
	* ???
	*/
	long biWidth;
	/**
	* la largeur
	*/
	long biHeigth;
	/**
	* la hauteur
	*/
	unsigned short biPlanes;
	/**
	* la nombre de bit par pixel
	*/
	unsigned short biBitCount;
	/**
	* compression utilisée?
	*/
	unsigned int biCompression;
	/**
	* ???
	*/
	unsigned int biSizeImage;
	/**
	* ???
	*/
	long biXPelsPerMeter;
	/**
	* ???
	*/
	long biYPelsPerMeter;
	/**
	* ???
	*/
	unsigned int biClrUsed;
	/**
	* ???
	*/
	unsigned int biClrImportant;

	};


	/**
	* Classe permettant de charger un fichier BMP (24bits uniquement)
	*/
	class ImageBMP : public Image
	{
		/**
		* la structure d'en tête du bmp
		*/
		BMPHeader bmph;

	public:
		
		/**
		* @return le pointeur sur le buffer d'image RGB.
		*/
		unsigned char* getDatasPointer();
		
		/**
		* @return la nombre de bit par pixel (doit être 24)
		*/
		unsigned short getBPP();
		
		/**
		* @return la hauteur de l'image
		*/
		unsigned int getHeight();
		
		/**
		* @return la largeur de l'image
		*/
		unsigned int getWidth();
		
		/**
		* charge l'image à partir du fichier spécifier.
		*
		* @param filepath le chemin de l'image a charger
		*
		* @return true si l'image a bien été chargée. false si image non trouvé ou extension non valide.
		*/
		bool load(char *filepath);
		
		/**
		* constructeur
		*/
		ImageBMP();
		
		/**
		* destructeur
		*/
		~ImageBMP();

	};
};// namespace Renderer

#include "MemoryManager/DebugNewOff.h"

#endif
