Exemplo n.º 1
0
void HeatTree::MakeScale(ostream& os)	{
// void HeatTree::MakeScale(double x, double y, double dx, double min, double max, int ngrad)	{
	double y = -0.04 * sizeY;
	double dy= 0.006 * sizeY;
	double x = 0.04 * sizeX;
	double dx = sizeX / 5;
	double min = minnodeval;
	double max = maxnodeval;
	double z1 = min;
	double z2 = max;
	double zmid = 0.5 * (z1 + z2);
	string s1 = GetColorCode(z1);
	string s2 = GetColorCode(z2);
	string smid = GetColorCode(zmid);
	os << "\\shade[left color=";
	os << s1;
	os << ", right color =";
	os << s2;
	os << ", middle color = ";
	os << smid;
	os << "]";

	os << " (" << texapprox(x) << "," << texapprox(y-0.5*thickness) << ") rectangle (" << texapprox(x+dx-0.04) << ',' << texapprox(y+0.5*thickness) << ");\n";

	int ngrad = 2;
	for (int i=0; i <= ngrad; i++)	{
		double xx = texapprox(x + dx * ((double) i) / ngrad);
		os << "\\path [draw] (" << xx << "," << y + dy << ") -- +(0," << -2 *dy << ");\n";
		os.precision(3);
		double x = ((double) ((int) (10 * (min + (max-min) * ((double) i) / ngrad)))) / 10;
		os << "\\path (" << xx << "," << -8 *dy << ") node[below,font=\\fontsize{" << groupfontsize << "}{" << groupfontsize << "}\\selectfont] {" << x << "};\n";
	// 	os << "\\path (" << xx << "," << -8 *dy << ") node[below] {" << min + (max - min) * ((double) i) / ngrad  << "};\n";
	}
}
Exemplo n.º 2
0
int CPMCodeDecode::DecodePMCode () {

	CQRCodeDecode	*pQRCodeDecode						= NULL;
	UINT			uiDecodeDataSize;
	char			*szQRCodeImage = NULL;
	int				iQRCodeImageSize;
	int				iQRCodeLengthSize;
	long			lColorCode;
	int				iRet;
	CReedSolomon	cReedSolomon;
	BOOL			bRet;
	int				iDataSize;
	int				iBlockSize;
	int				iCorrectPos = 0;
	int				iCorrectDataSize;
	int				iRSBlock1;
	int				iRSBlock2;
	BYTE			szCorrectBuf [256];
	BYTE			szWork [256];
	char			*szDecodeData = NULL;

	if (m_szDecodeData != NULL) {
		free (m_szDecodeData);
		m_szDecodeData = NULL;
		m_uiDecodeDataSize = 0;
	}

	if (m_szBaseImage == NULL || m_uiBaseImageSize == 0) {
		return RESULT_ERROR_IMAGEFILE_READ_YET;
	}

	m_iVersion		= SYM2VER(m_Width);
	m_iSymbolSize	= m_Width;

	iRet = GetColorCode (g_PMCodeColor, m_szBaseImage, m_uiBaseImageSize, m_iSymbolSize, m_iVersion);
	if(RESULT_OK != iRet){
		return iRet;
	}

	m_iLayer = GetLayerCount (m_szBaseImage, m_uiBaseImageSize, m_iSymbolSize);

	if(0 == m_iLayer){
		return RESULT_ERROR_ANALYSIS_LAYER;
	}

	if (m_iVersion < 3) {
		MakeColorTable (3, m_iLayer);
	} else {
		MakeColorTable (6, m_iLayer);
	}

	iQRCodeLengthSize	= CalcPitch (BIT_COUNT_8, m_iSymbolSize);
	iQRCodeImageSize	= iQRCodeLengthSize * m_iSymbolSize;

	if (szQRCodeImage != NULL){
		free (szQRCodeImage);
		szQRCodeImage = NULL;
	}
	szQRCodeImage = (char *)malloc (iQRCodeImageSize + 1);
	if (szQRCodeImage == NULL) {
		return RESULT_ERROR_SECURE_MEMORY;
	}
	memset (szQRCodeImage, '\0', iQRCodeImageSize + 1);				
	pQRCodeDecode = new CQRCodeDecode;

	m_szDecodeData = (char *)realloc (m_szDecodeData, (QR_VersonInfo[m_iVersion].ncAllCodeWord * m_iLayer) + 1);
	memset (m_szDecodeData, '\0', (QR_VersonInfo[m_iVersion].ncAllCodeWord * m_iLayer) + 1);

	for (int i = 0; i < m_iLayer; i ++ ) {
#if PM_CODE_COLOR
		if (g_ColorCodeSetting == 0) {
			lColorCode = g_ColorCodeSettingDefinition [i];	
		} else {
			if (m_iLayer == 3) {
				lColorCode = g_ColorCodeSetting3 [i];	
			} else if (m_iLayer >9) {
				lColorCode = g_ColorCodeSetting10to24 [i];	
			} else {
				lColorCode = g_ColorCodeSetting4to9 [i];	
			}
		}
#else
		lColorCode = g_PMCodeColor [i];
#endif
		if (lColorCode == 0) {
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			return RESULT_ERROR_NON_SUPORT_COLOR;
		}
		iRet = PMCodeToQRCode (m_szBaseImage, m_uiBaseImageSize, lColorCode
										, szQRCodeImage, iQRCodeImageSize, m_iSymbolSize);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			return RESLUT_ERROR_LAYER_RESOLUTION;
		}

		iRet = pQRCodeDecode->SetQRCodeImage (szQRCodeImage, iQRCodeImageSize, m_iVersion);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_SECURE_MEMORY;
		}

		uiDecodeDataSize = pQRCodeDecode->DecodeQRCodeImage ();
		if(0 == uiDecodeDataSize){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_IMAGE;
		}

		m_iMaskPattern [i] = pQRCodeDecode->GetMaskNumber ();
		iRet = pQRCodeDecode->GetQRCodeStatus (&m_iRSLevel);
		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_STATUS;
		}
		if (szDecodeData != NULL) {
			free (szDecodeData);
			szDecodeData = NULL;
		}
		szDecodeData = (char *)malloc (uiDecodeDataSize + 1);
		memset (szDecodeData, '\0', uiDecodeDataSize + 1);
		iRet = pQRCodeDecode->GetDecodeData (szDecodeData, uiDecodeDataSize);

		if(RESULT_OK != iRet){
			free (szQRCodeImage);
			szQRCodeImage = NULL;
			delete pQRCodeDecode;
			pQRCodeDecode = NULL;
			return RESULT_ERROR_ANALYSIS_QR_DECODE;
		}

		iDataSize = uiDecodeDataSize;
		iCorrectPos = 0;
		iRSBlock1 = QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncRSBlock;
		iRSBlock2 = QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncRSBlock;

		for (int j = 0; j < (iRSBlock1 + iRSBlock2); j ++) {
			if (QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncRSBlock > j){
				iBlockSize = QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncAllCodeWord;
				cReedSolomon.SetCorrectCodeSize (iBlockSize	- QR_VersonInfo[m_iVersion].RS_BlockInfo1 [m_iRSLevel].ncDataCodeWord);
			} else {
				iBlockSize = QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncAllCodeWord;
				cReedSolomon.SetCorrectCodeSize (iBlockSize - QR_VersonInfo[m_iVersion].RS_BlockInfo2 [m_iRSLevel].ncDataCodeWord);
			}
			memset (szWork, NULL, sizeof (szWork));
			memset (szCorrectBuf, NULL, sizeof (szCorrectBuf));

			if (iDataSize < iBlockSize) {
				memcpy (szWork, &szDecodeData [iCorrectPos], iDataSize);
				bRet = cReedSolomon.Decode (szWork, iBlockSize, szCorrectBuf, &iCorrectDataSize);
				if(bRet != TRUE){
					free (szQRCodeImage);
					szQRCodeImage = NULL;
					delete pQRCodeDecode;
					pQRCodeDecode = NULL;
					free (szDecodeData);
					szDecodeData = NULL;
					return RESULT_ERROR_ANALYSIS_QR_BIG_BLOCK_DECODE;
				}
			} else {
				memcpy (szWork, &szDecodeData [iCorrectPos], iBlockSize);
				bRet = cReedSolomon.Decode (szWork, iBlockSize, szCorrectBuf, &iCorrectDataSize);
				if(bRet != TRUE){
					free (szQRCodeImage);
					szQRCodeImage = NULL;
					delete pQRCodeDecode;
					pQRCodeDecode = NULL;
					free (szDecodeData);
					szDecodeData = NULL;
					return RESULT_ERROR_ANALYSIS_QR_SMALL_BLOCK_DECODE;
				}
			}
			memcpy (&m_szDecodeData [m_uiDecodeDataSize], szCorrectBuf, iCorrectDataSize);
			m_uiDecodeDataSize += iCorrectDataSize;
			iCorrectPos += iBlockSize;
			iDataSize -= iBlockSize;
		}
		if (szDecodeData != NULL) {
			free (szDecodeData);
			szDecodeData = NULL;
		}
	}
	delete pQRCodeDecode;
	pQRCodeDecode = NULL;

	if (szQRCodeImage != NULL) {
		free (szQRCodeImage);
		szQRCodeImage = NULL;
	}
	return m_uiDecodeDataSize;
}
void WinConsoleHelper::SetColor(WinConsoleHelper::Color textColor, WinConsoleHelper::Color backColor, int x, int y, int count)
{
	COORD startPos = { (SHORT)x, (SHORT)y };
	DWORD garbage;
	FillConsoleOutputAttribute(hStdOut, GetColorCode(textColor, backColor), count, startPos, &garbage);
}
Exemplo n.º 4
0
void HeatTree::LocalDrawBranch(const Link* link, ostream& os, double x, double y, double dx)	{
	if (! link->isRoot())	{
	double z2 = GetNodeVal(link->Out());
	double z1 = unibranch ? GetNodeVal(link->Out()) : GetNodeVal(link);
	/*
	double z1 = GetNodeVal(link);
	double z2 = unibranch ? GetNodeVal(link) : GetNodeVal(link->Out());
	*/
	double zmid = 0.5 * (z1 + z2);
	string s1 = GetColorCode(z1);
	string s2 = GetColorCode(z2);
	string smid = GetColorCode(zmid);
	os << "\\shade[left color=";
	os << s1;
	os << ", right color =";
	os << s2;
	os << ", middle color = ";
	os << smid;
	os << "]";

	os << " (" << texapprox(x) << "," << texapprox(y-0.5*thickness) << ") rectangle (" << texapprox(x+dx) << ',' << texapprox(y+0.5*thickness) << ");\n";

	if (withbranchval)	{
		double xmid = x + 0.5 * dx;
		map<const Branch*,string>::iterator i = branchval.find(link->GetBranch());
		// map<const Branch*,double>::iterator i = branchval.find(link->GetBranch());
		ostringstream s;
		if (i == branchval.end())	{
			// cerr << "did not find " << GetLeftMost(link) << '\t' << GetRightMost(link) << '\n';
			s << "?";
			// exit(1);
		}
		else	{
			/*
			double v = ((int) (100 * (i->second)));
			if (v)	{
				s << v;
			}
			else	{
				s << "";
				// s << "$<1$";
			}
			*/
			string tmp = i->second;
			for (unsigned int k = 0; k<tmp.length(); k++)	{
				char c = tmp[k];
				if (c == '/')	{
					s << " / ";
				}
				else	{
					s << c;
				}
			}
			// s << i->second;
		}
		double branchfontsize = 4;
		os << "\\path (" << texapprox(xmid) << "," << texapprox(y) << ") node[above=-2,font=\\fontsize{" << branchfontsize << "}{" << branchfontsize << "}\\selectfont] {" << s.str() << "};\n";
	}
	}

	if ((!link->Out()->isLeaf()) && withnodetext)	{
		WriteNodeText(link->Out(),os,x+dx,y);
	}
}
void WinConsoleHelper::SetPrintColor(WinConsoleHelper::Color textColor, WinConsoleHelper::Color backColor)
{
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), GetColorCode(textColor, backColor));
}