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"; } }
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); }
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)); }