#pragma once

#include <windows.h>
#include <gl\gl.h>												// Header File For The OpenGL32 Library
#include <gl\glu.h>												// Header File For The GLu32 Library
#include <gl\glaux.h>											// Header File For The GLaux Library

#include "som/som.h"

class CSOMPCompress :
	public qSOM2d
{
public:
	CSOMPCompress(void);
	virtual ~CSOMPCompress(void);
	int loadCPicture(const char *);
	int saveCPicture(const char *);
	int loadBMP(const char *);
	int saveBMP(const char *szName,unsigned char *data=0,int ixSize=0,int iySize=0);

	void initSOM(void);
	void createPattern(void);
	void iterate(void);
	void compressFull(float);

	int getCodebookSize(void){	return m_iCodeBookSize; }

	void calcStats(void);

	SOMPattern *m_pPattern;
	AUX_RGBImageRec *image_bmp;

	int m_iCMin[3];
	int m_iCMax[3];
	double m_dAv[3];
	
	double m_dEntropy;
	double m_dSigma;

	nVec_var m_dDistPFactor;
	nVec_var m_dLearnRFactor;
	nVec_var m_fRetrainFactor;
	int m_iClusterSize;
	int m_iCodeBookSize;
	int m_iPatternQuality;
	bool m_bLinear;			// linear som, or square som
	nVec_var m_dErrorAll;

	char m_szBMPSource[200];
};

