shiftlightws2818bcoilxrpm

Dependencies:   mbed NeoStrip PinDetect

BitmapFile.h

Committer:
lz307
Date:
2015-11-10
Revision:
0:a26aca3e4760

File content as of revision 0:a26aca3e4760:

/**********************************************************/
/*BitmapFile.h                                            */
/**********************************************************/

#include "mbed.h"

/* Class: BitmapFile
 * A parser for bitmap files.
*/
class BitmapFile
{
private:
	FILE			*m_pFile;
	char			*m_fileName;
	int				m_rowsize;
	
	enum headerType {	BITMAPCOREHEADER = 12,
						BITMAPCOREHEADER2 = 64,
						BITMAPINFOHEADER = 40,
						BITMAPV4HEADER = 108,
						BITMAPV5HEADER = 124};
						
	enum compressType {	BI_RGB,
						BI_RLE8,
						BI_RLE4,
						BI_BITFIELDS,
						BI_JPEG,
						BI_PNG};

	/* Struct: BMPHeader
	*
	* The BMP header of the bitmap is read into this.	
	*
	* b - the first byte of the header. Should equal 'B'.
	* m - the second byte of the header. Should equal 'M'.
	* filesize - the size of the whole file, in bytes.
	* reserved 1 and 2 - data specific to the applicaton which created the bitmap.
	* offset - the offset at which the actual bitmap begins
	*/
							
	__packed struct
	{
		char	b:8;
		char	m:8;
		int		filesize:32;
		int		reserved1:16;
		int		reserved2:16;
		int		offset:32;
		
	} BMPHeader;
	
	
	/* Struct: DIBHeader
	*
	* The DIB header of the bitmap is read into this.	
	*
	* headerlength - the length of the header. Should equal 40.
	* height - the height of the bitmap.
	* width - the width of the bitmap.
	* cplanes - the number of color planes. Should equal 1.
	* colordepth - the number of bits per pixel.
	* compression - the compression method used.
	* datasize - the size of the bitmap data, in bytes.
	*/

	int		m_headerlength;
	__packed struct
	{
		int		width:32;
		int		height:32;
		int		cplanes:16;
		int		colordepth:16;
		int		compression:32;
		int		datasize:32;
		int		hres:32;
		int		vres:32;
		int		numpalettecolors:32;
		int		importantcolors:32;		
	} DIBHeader;
	
						
public:
	/* Constructor: BitmapFile
	* Create the BitmapFile class, and call <Initialize>
	*
	* Parameters:
	*  fname - The path of the file to open.
	*/
	BitmapFile(char* fname);
	~BitmapFile();

	/* Function: Initialize
	* Parses the headers of the bitmap.
	*
	* Returns:
	*  Whether the bitmap is valid.
	*/
	bool	Initialize();	//parses the header

	/* Function: open
	* Opens the bitmap for reading, if not already open.
	*/
	void	open();

	/* Function: close
	* Closes the bitmap.
	*/
	void	close();

	/***BMP Header gets begin***/
	int		getFileSize();
	int		getReserved1();
	int		getReserved2();
	int		getOffset();
	
	/***DIB Header gets begin***/
	int		getHeaderType();
	int		getHeight();
	int		getWidth();
	int		getCPlanes();
	int		getColorDepth();
	int		getCompression();
	int		getDataSize();
	int		getHRes();
	int		getVRes();
	int		getNumPaletteColors();
	int		getImportantColors();
	/****DIB Header gets end****/
	
	/******Data gets begin******/
	/* Function: getPixel
	* Gets the color of a pixel
	*
	* Parameters:
	*  x - The x coordinate of the pixel.
	*  y - The y coordinate of the pixel.
	*  closefile - if specified, close the file after reading
	*
	* Returns:
	*  the color of the pixel, in hexadecimal.
	*/
	int		getPixel(int x, int y, bool closefile = true);
	/* Function: getRow
	* Gets the colors of a row
	*
	* Parameters:
	*  row - The number of the row..
	*  closefile - if specified, close the file after reading
	*
	* Returns:
	*  An array of the colors of the pixels, in hexadecimal.
	*/
	int		*getRow(int row, bool closefile = true);
	int		*getRowBW(int row, bool closefile = true);
	char	*getRowBitstream(int row, bool closefile = true);
	/*******Data gets end*******/
	int		getRowSize();
};