81#ifdef USEREFICCMAXNAMESPACE
88 xml += blanks +
"<UnknownData>\n";
90 xml += blanks +
"</UnknownData>\n";
105 if (pNode && pNode->children && pNode->children->content) {
124static bool icXmlDumpTextData(std::string &xml, std::string blanks,
const char *szText,
bool bConvert=
true)
126 if (strstr(szText,
"]]>")) {
127 xml += blanks +
"<HexTextData>";
129 xml += blanks +
"</HexTextData>\n";
134 xml += blanks +
"<TextData>";
140 xml +=
"]]></TextData>\n";
158 xml += blanks +
"<HexCompressedData>\n";
160 xml += blanks +
"</HexCompressedData>\n";
167 xml += blanks +
"<HexCompressedData>\n";
169 xml += blanks +
"</HexCompressedData>\n";
185 if (pNode->type==XML_ELEMENT_NODE) {
186 if (!
icXmlStrCmp(pNode->name,
"HexTextData") && pNode->children && pNode->children->content) {
192 str += (
char*)buf.
GetBuf();
202 parseStr +=
"Error! - File '";
203 parseStr += filename;
204 parseStr +=
"' not found.\n";
210 char *ansiStr = (
char *)malloc(fileLength+1);
213 perror(
"Memory Error");
215 parseStr += filename;
216 parseStr +=
"' may not be a valid text file.\n";
221 if (file->
ReadLine(ansiStr, fileLength)!=fileLength) {
222 parseStr +=
"Error while reading file '";
223 parseStr += filename;
224 parseStr +=
"'. Size read is not equal to file length. File may not be a valid text file.\n";
238 else if (pNode->children && pNode->children->content){
242 buf = (
const icChar*)pNode->children->content;
258 SetText(str.c_str());
269 SetText(str.c_str());
278 if (pNode->type==XML_ELEMENT_NODE) {
279 if (!
icXmlStrCmp(pNode->name,
"HexCompressedData") && pNode->children && pNode->children->content) {
286 if (m_nBufSize && m_pZipBuf) {
287 memcpy(m_pZipBuf, buf.
GetBuf(), m_nBufSize);
297 return SetText(str.c_str());
303 if (pNode->type==XML_ELEMENT_NODE) {
304 if (!
icXmlStrCmp(pNode->name,
"HexCompressedData") && pNode->children && pNode->children->content) {
311 if (m_nBufSize && m_pZipBuf) {
312 memcpy(m_pZipBuf, buf.
GetBuf(), m_nBufSize);
322 return SetText(str.c_str());
330 SetText(str.c_str());
346 if (m_uzUnicodeText[0]) {
347 if (m_nUnicodeLanguageCode == 0)
352 buf =
"<Unicode LanguageCode=\"" + fix +
"\">";
358 buf =
"<![CDATA[" + fix +
"]]></Unicode>\n";
363 buf =
"<MacScript ScriptCode=\"" + std::to_string(m_nScriptCode) +
"\">";
366 std::stringstream ss;
367 for (
int i = 0; i < m_nScriptSize; i++) {
368 ss << std::hex << std::uppercase << std::setw(2) << std::setfill(
'0')
369 <<
static_cast<int>(
static_cast<unsigned char>(m_szScriptText[i]));
374 xml +=
"</MacScript>\n";
398 parseStr +=
"Error! - File '";
399 parseStr += filename;
400 parseStr +=
"' not found.\n";
406 char *buf = (
char *)malloc(fileLength);
409 perror(
"Memory Error");
411 parseStr += filename;
412 parseStr +=
"' may not be a valid text file.\n";
417 if (file->
ReadLine(buf, fileLength)!=fileLength) {
418 parseStr +=
"Error while reading file '";
419 parseStr += filename;
420 parseStr +=
"'. Size read is not equal to file length. File may not be a valid text file.\n";
433 memcpy(m_szText, ansiStr.c_str(), nStrSize);
434 m_nASCIISize = nStrSize + 1;
443 m_uzUnicodeText = GetUnicodeBuffer(nStrSize);
447 for (
int i=0; i < (int) nStrSize; i++) {
448 m_uzUnicodeText[i] = wstr[i];
452 m_nUnicodeSize = nStrSize + 1;
455 m_uzUnicodeText[0] = 0;
460 memcpy(m_szScriptText, buf, 67);
469 icChar *pBuf = GetBuffer(nSize);
472 memcpy(m_szText, str.c_str(), nSize);
475 m_nASCIISize = nSize + 1;
484 bool unicodeExists =
false;
485 bool scriptcodeExists =
false;
486 for (;pNode; pNode = pNode->next) {
487 if (pNode->type==XML_ELEMENT_NODE) {
492 if (pRegion && pNode->children && pNode->children->content) {
498 m_uzUnicodeText = GetUnicodeBuffer(nSize);
502 for (
int i=0; i < (int) nSize; i++) {
503 m_uzUnicodeText[i] = wstr[i];
507 m_nUnicodeSize = nSize + 1;
509 unicodeExists =
true;
512 m_uzUnicodeText[0] = 0;
518 if (pScript && *pScript) {
521 sscanf(pScript,
"%x", &nCode);
523 if (pNode->children && pNode->children->content) {
527 scriptcodeExists =
true;
530 m_szScriptText[0] = 0;
539 m_uzUnicodeText = GetUnicodeBuffer(nSize);
543 for (
int i=0; i < (int) nSize; i++) {
544 m_uzUnicodeText[i] = str[i];
548 m_nUnicodeSize = nSize + 1;
551 m_uzUnicodeText[0] = 0;
555 if (!scriptcodeExists){
558 memcpy(m_szScriptText, m_szText, 67);
576 xml += blanks + line;
584 this->SetValue(
icGetSigVal(pNode->children ? (
const icChar*)pNode->children->content :
""));
599 xml += blanks + line;
601 xml += blanks +
"<SpectralRange>\n";
603 xml += blanks + line;
604 xml += blanks +
"</SpectralRange>\n";
606 if (m_biSpectralRange.steps) {
607 xml +=blanks +
"<BiSpectralRange>\n";
609 xml += blanks + line;
610 xml += blanks +
"</BiSpectralRange>\n";
622 parseStr +=
"No SpectralSpace section found\n";
625 m_nSig =
icGetSigVal(pChild->children ? (
const icChar*)pChild->children->content :
"");
628 parseStr +=
"No SpectralRange section found\n";
632 if (!(pChild =
icXmlFindNode(pChild->children,
"Wavelengths"))) {
633 parseStr +=
"SpectralRange missing Wavelengths\n";
644 if ((pChild =
icXmlFindNode(pChild->children,
"Wavelengths"))) {
663 sprintf(line,
"<NamedColors VendorFlag=\"%08x\" CountOfDeviceCoords=\"%d\" DeviceEncoding=\"int16\"", m_nVendorFlags, m_nDeviceCoords);
664 xml += blanks + line;
672 for (i=0; i<(int)m_nSize; i++) {
675 const char *szNodeName =
"";
683 szNodeName =
"LabNamedColor";
686 xml += blanks + line;
693 szNodeName =
"XYZNamedColor";
696 xml += blanks + line;
699 if (!m_nDeviceCoords) {
704 for (j=0; j<(int)m_nDeviceCoords; j++) {
707 sprintf(buf,
"%d", (
int)(pEntry->
deviceCoords[j] * 65535.0 + 0.5));
712 xml += blanks +
" </" + szNodeName +
">\n";
716 xml += blanks +
" </NamedColors>\n";
732 if (szVendorFlags && *szVendorFlags &&
733 szDeviceCoords && *szDeviceCoords &&
734 szDeviceEncoding && *szDeviceEncoding &&
735 szPrefix && szSufix) {
738 sscanf(szVendorFlags,
"%x", &m_nVendorFlags);
740 strncpy(m_szPrefix,
icUtf8ToAnsi(str, szPrefix),
sizeof(m_szPrefix));
741 m_szPrefix[
sizeof(m_szPrefix)-1] =
'\0';
743 strncpy(m_szSufix,
icUtf8ToAnsi(str, szSufix),
sizeof(m_szSufix));
744 m_szSufix[
sizeof(m_szSufix)-1] =
'\0';
746 m_nDeviceCoords = atoi(szDeviceCoords);
748 SetSize(n, m_nDeviceCoords);
754 for (i=0, pNode=pNode->children; pNode; pNode=pNode->next) {
756 if (pNode->type == XML_ELEMENT_NODE &&
788 else if (pNode->type == XML_ELEMENT_NODE &&
808 else if (pNode->type == XML_ELEMENT_NODE &&
831 if (m_nDeviceCoords && pNode->children) {
832 if (!strcmp(szDeviceEncoding,
"int8")) {
839 for (j = 0; j < m_nDeviceCoords && j < coords.
GetSize(); j++) {
843 else if (!strcmp(szDeviceEncoding,
"int16")) {
850 for (j = 0; j < m_nDeviceCoords && j < coords.
GetSize(); j++) {
854 else if (!strcmp(szDeviceEncoding,
"float")) {
861 for (j = 0; j < m_nDeviceCoords && j < coords.
GetSize(); j++) {
885 for (i=0; i<(int)m_nSize; i++) {
887 (
float)
icFtoD(m_XYZ[i].Y),
888 (
float)
icFtoD(m_XYZ[i].Z));
903 for (i=0; pNode; pNode=pNode->next) {
904 if (pNode->type == XML_ELEMENT_NODE &&
936 for (i=0; i<(int)m_nChannels; i++) {
961 for (i=0; pNode; pNode=pNode->next) {
962 if (pNode->type == XML_ELEMENT_NODE &&
988 sprintf(buf,
"<cicpFields ColorPrimaries=\"%d\" TransferCharacteristics=\"%d\" MatrixCoefficients=\"%d\" VideoFullRangeFlag=\"%d\"/>\n",
989 m_nColorPrimaries, m_nTransferCharacteristics, m_nMatrixCoefficients, m_nVideoFullRangeFlag);
1006 m_nColorPrimaries = 0;
1008 if ((attr =
icXmlFindAttr(pNode,
"TransferCharacteristics")))
1011 m_nTransferCharacteristics = 0;
1016 m_nMatrixCoefficients = 0;
1021 m_nVideoFullRangeFlag = 0;
1035 sprintf(buf,
"<SparseMatrixArray outputChannels=\"%d\" matrixType=\"%d\">\n", m_nChannelsPerMatrix, m_nMatrixType);
1036 xml += blanks + buf;
1041 for (i=0; i<(int)m_nSize; i++) {
1043 sprintf(buf,
" <SparseMatrix rows=\"%d\" cols=\"%d\">\n", mtx.
Rows(), mtx.
Cols());
1044 xml += blanks + buf;
1046 for (j=0; j<(int)mtx.
Rows(); j++) {
1047 xml += blanks +
" <SparseRow>\n";
1051 xml += blanks +
" <ColIndices>\n";
1053 xml += blanks +
" </ColIndices>\n";
1055 xml += blanks +
" <ColData>\n";
1057 xml += blanks +
" </ColData>\n";
1059 xml += blanks +
" </SparseRow>\n";
1061 xml += blanks +
" </SparseMatrix>\n";
1064 xml += blanks +
"</SparseMatrixArray>\n";
1075 xmlAttr *outputChan =
icXmlFindAttr(pNode,
"outputChannels");
1078 if (outputChan && matrixType) {
1085 for (pChild = pNode->children; pChild; pChild=pChild->next) {
1086 if (pChild->type == XML_ELEMENT_NODE &&
1097 for (pChild = pNode->children; pChild; pChild=pChild->next) {
1098 if (pChild->type == XML_ELEMENT_NODE) {
1111 mtx.
Init(nRows, nCols,
true);
1118 for (pRow=pChild->children; pRow; pRow=pRow->next) {
1119 if (pRow->type == XML_ELEMENT_NODE && !
icXmlStrCmp(pRow->name,
"SparseRow")) {
1120 xmlNode *pIdx =
icXmlFindNode(pRow->children,
"ColIndices");
1123 if (pIdx && pData) {
1128 parseStr +=
"Unable to parse SparseRow index or data values\n";
1132 parseStr +=
"Mismatch between SparseRow index and data lengths\n";
1135 if (pos+idx.
GetSize() > nMaxEntries) {
1136 parseStr +=
"Exceeded maximum number of sparse matrix entries\n";
1154 parseStr +=
"Cannot find SparseMatrix rows and cols\n";
1160 else if (!
icXmlStrCmp(pChild->name,
"FullMatrix")) {
1172 mtx.
Init(nRows, nCols,
true);
1176 if (data.
GetSize()==nRows*nCols) {
1178 parseStr +=
"Exceeded maximum number of sparse matrix entries\n";
1181 parseStr +=
"Invalid FullMatrix data dimensions\n";
1186 parseStr +=
"Cannot find FullMatrix rows and cols\n";
1196 parseStr +=
"Cannot find outputChannels and matrixType members\n";
1200 parseStr +=
"Cannot find SparseMatrixArray node\n";
1207template <
class T, icTagTypeSignature Tsig>
1211 return "CIccTagXmlS15Fixed16";
1213 return "CIccTagXmlU16Fixed16";
1218template <
class T, icTagTypeSignature Tsig>
1226 xml += blanks +
"<Array>\n";
1227 for (i=0; i<(int)this->m_nSize; i++) {
1231 xml += blanks + blanks;
1245 for (i=0; i<(int)this->m_nSize; i++) {
1250 xml += blanks + blanks;
1263 xml += blanks +
"</Array>\n";
1269template <
class T, icTagTypeSignature Tsig>
1273 pNode = pNode->children;
1286 for (i=0; i<n; i++) {
1288 this->m_Num[i] =
icDtoF(buf[i]);
1291 this->m_Num[i] =
icDtoUF(buf[i]);
1303template <
class T,
class A, icTagTypeSignature Tsig>
1307 return "CIccTagXmlUInt8";
1309 return "CIccTagXmlUInt16";
1311 return "CIccTagXmlUInt32";
1313 return "CIccTagXmlUInt64";
1315 return "CIccTagXmlNum<>";
1320template <
class T,
class A, icTagTypeSignature Tsig>
1326 xml += blanks +
"<Array>\n";
1327 for (i=0; i<(int)this->m_nSize; i++) {
1331 xml += blanks + blanks;
1347 xml += blanks +
"</Array>\n";
1354template <
class T,
class A, icTagTypeSignature Tsig>
1365 pNode = pDataNode->children;
1369 if (!a.ParseArray(pNode) || !a.GetSize()) {
1374 T *buf = a.GetBuf();
1378 for (i=0; i<n; i++) {
1379 this->m_Num[i] = buf[i];
1392template <
class T,
class A, icTagTypeSignature Tsig>
1396 return "CIccTagXmlFloat32";
1398 return "CIccTagXmlFloat32";
1400 return "CIccTagXmlFloat64";
1402 return "CIccTagXmlFloatNum<>";
1407template <
class T,
class A, icTagTypeSignature Tsig>
1412 if (this->m_nSize==1) {
1415 sprintf(buf,
"<Data>" icXmlFloatFmt "</Data>\n", this->m_Num[0]);
1417 sprintf(buf,
"<Data>" icXmlDoubleFmt "</Data>\n", this->m_Num[0]);
1420 sprintf(buf,
"<Data>" icXmlFloatFmt "</Data>", this->m_Num[0]);
1427 xml += blanks +
"<Data>\n";
1428 for (i=0; i<(int)this->m_nSize; i++) {
1432 xml += blanks + blanks;
1451 xml += blanks +
"</Data>\n";
1454 xml +=
" </Data>\n";
1462template <
class T,
class A, icTagTypeSignature Tsig>
1477 parseStr +=
"Error! - File '";
1478 parseStr += filename;
1479 parseStr +=
"' not found.\n";
1487 char *fbuf = (
char*)malloc(len+1);
1490 parseStr +=
"Memory error!\n";
1495 if (file->
Read8(fbuf, len)!=len) {
1496 parseStr +=
"Read error of (";
1497 parseStr += filename;
1505 if (!a.ParseTextArray(fbuf) || !a.GetSize()) {
1506 parseStr +=
"Parse error of (";
1507 parseStr += filename;
1517 if (file->
Read16(&this->m_Num[0], n)!=n) {
1547 if (file->
Read64(&this->m_Num[0], n)!=n) {
1557 parseStr +=
"Unsupported file parsing type!\n";
1562 pNode = pNode->children;
1564 if (!a.ParseArray(pNode) || !a.GetSize()) {
1570 T *buf = a.GetBuf();
1574 for (i=0; i<n; i++) {
1575 this->m_Num[i] = buf[i];
1594 xml += blanks + buf;
1598 xml += blanks + buf;
1601 xml += blanks + buf;
1604 xml += blanks + buf;
1606 sprintf(buf,
"<StandardIlluminant>%s</StandardIlluminant>\n",info.
GetIlluminantName(m_Data.illuminant));
1607 xml += blanks + buf;
1614 memset(&m_Data, 0,
sizeof(m_Data));
1665 CIccMultiLocalizedUnicode::iterator i;
1670 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
1671 xml += blanks +
"<LocalizedText LanguageCountry=\"";
1673 xml +=
"\"><![CDATA[";
1675 xml +=
"]]></LocalizedText>\n";
1690 for (pText = pNode->children; pText; pText = pText->next) {
1691 if (pText->type == XML_TEXT_NODE || pText->type == XML_CDATA_SECTION_NODE)
1716 std::string szFlag(
"ASCII");
1718 if (m_nDataFlag == 1)
1720 sprintf (buf,
"<Data Flag=\"%s\">\n", szFlag.c_str());
1721 xml += blanks + buf;
1723 xml += blanks +
"</Data>\n";
1732 if (pNode && pNode->children && pNode->children->content) {
1735 if (!strcmp(szFlag,
"binary"))
1739 SetSize(nSize,
false);
1741 icXmlGetHexData(m_pData, (
const char*)pNode->children->content, nSize);
1753 sprintf(buf,
"<DateTime>%d-%02d-%02dT%02d:%02d:%02d</DateTime>\n",
1754 m_DateTime.year, m_DateTime.month, m_DateTime.day, m_DateTime.hours, m_DateTime.minutes, m_DateTime.seconds);
1755 xml += blanks + buf;
1762 memset(&m_DateTime, 0,
sizeof(m_DateTime));
1766 m_DateTime =
icGetDateTimeValue(pNode->children ? (
const char*)pNode->children->content :
"");
1778 xml += blanks +
"<ColorantOrder>\n";
1779 for (i=0; i<(int)m_nCount; i++) {
1780 sprintf(buf,
" <n>%d</n>\n", m_pData[i]);
1781 xml += blanks + buf;
1784 xml += blanks +
"</ColorantOrder>\n";
1816 xml += blanks +
"<ColorantTable>\n";
1817 for (i=0; i<(int)m_nCount; i++) {
1819 lab[0] =
icU16toF(m_pData[i].data[0]);
1820 lab[1] =
icU16toF(m_pData[i].data[1]);
1821 lab[2] =
icU16toF(m_pData[i].data[2]);
1825 xml += blanks + buf;
1828 xml += blanks +
"</ColorantTable>\n";
1838 if (pNode && pNode->children) {
1839 pNode = pNode->children;
1847 for (i=0; pNode; pNode=pNode->next) {
1848 if (pNode->type == XML_ELEMENT_NODE &&
1857 if (name && L && a && b) {
1858 strncpy(m_pData[i].name,
icUtf8ToAnsi(str, name),
sizeof(m_pData[i].name));
1859 m_pData[i].name[
sizeof(m_pData[i].name)-1]=0;
1868 m_pData[i].data[0] =
icFtoU16(lab[0]);
1869 m_pData[i].data[1] =
icFtoU16(lab[1]);
1870 m_pData[i].data[2] =
icFtoU16(lab[2]);
1892 xml += blanks + buf;
1896 xml += blanks + buf;
1899 sprintf(buf,
"<IllumType>%s</IllumType>\n", info.
GetIlluminantName(m_illumType));
1900 xml += blanks + buf;
1910 memset(&m_XYZIllum, 0,
sizeof(m_XYZIllum));
1911 memset(&m_XYZSurround, 0,
sizeof(m_XYZSurround));
1952 if (pChild && pChild->children && pChild->children->content) {
1967 xml += blanks + buf;
1970 m_illuminantXYZ.X, m_illuminantXYZ.Y, m_illuminantXYZ.Z);
1971 xml += blanks + buf;
1975 icF16toF(m_observerRange.start),
icF16toF(m_observerRange.end), m_observerRange.steps);
1976 xml += blanks + buf;
1979 sprintf(buf,
" Reserved=\"%d\"", m_reserved2);
1984 ptr = &m_observer[0];
1986 for (j=0; j<3; j++) {
1988 for (i=0; i<m_observerRange.steps; i++) {
1999 xml += blanks +
"</ObserverFuncs>\n";
2002 sprintf(buf,
"<StdIlluminant>%s</StdIlluminant>\n", info.
GetIlluminantName(m_stdIlluminant));
2003 xml += blanks + buf;
2005 sprintf(buf,
"<ColorTemperature>" icXmlFloatFmt "</ColorTemperature>\n", m_colorTemperature);
2006 xml += blanks + buf;
2010 icF16toF(m_illuminantRange.start),
icF16toF(m_illuminantRange.end), m_illuminantRange.steps);
2011 xml += blanks + buf;
2014 sprintf(buf,
" Reserved=\"%d\"", m_reserved3);
2019 ptr = &m_illuminant[0];
2022 for (i=0; i<m_illuminantRange.steps; i++) {
2033 xml += blanks +
"</IlluminantSPD>\n";
2037 m_surroundXYZ.X, m_surroundXYZ.Y, m_surroundXYZ.Z);
2038 xml += blanks + buf;
2049 memset(&m_illuminantXYZ, 0,
sizeof(m_illuminantXYZ));
2050 memset(&m_surroundXYZ, 0,
sizeof(m_surroundXYZ));
2053 m_colorTemperature = 0;
2058 if (pChild && pChild->children && pChild->children->content) {
2100 if (pChild->children && pChild->children->content) {
2103 if (vals.
GetSize()!=m_observerRange.steps*3)
2109 memcpy(m_observer, pBuf, m_observerRange.steps*3*
sizeof(
icFloatNumber));
2114 if (pChild && pChild->children && pChild->children->content) {
2119 if (pChild && pChild->children && pChild->children->content) {
2142 if (pChild->children && pChild->children->content && m_illuminantRange.steps) {
2145 if (vals.
GetSize()!=m_illuminantRange.steps)
2151 memcpy(m_illuminant, pBuf, m_illuminantRange.steps *
sizeof(
icFloatNumber));
2154 setIlluminant(m_stdIlluminant, m_illuminantRange, NULL, m_colorTemperature);
2187 sprintf(buf,
"<ProfileDesc>\n");
2188 xml += blanks + buf;
2191 xml += blanks + blanks + buf;
2194 xml += blanks + blanks + buf;
2202 xml += blanks + blanks + buf;
2214 xml += blanks + blanks +
"<DeviceManufacturer>\n";
2217 sprintf(buf,
"<%s>\n", tagSig);
2218 xml += blanks + blanks + blanks + buf;
2220 if (!pExt->
ToXml(xml, blanks +
" "))
2223 sprintf(buf,
"</%s>\n", tagSig);
2224 xml += blanks + blanks + blanks + buf;
2226 xml += blanks + blanks +
"</DeviceManufacturer>\n";
2237 xml += blanks + blanks +
"<DeviceModel>\n";
2240 sprintf(buf,
"<%s>\n", tagSig);
2241 xml += blanks + blanks + blanks + buf;
2243 if (!pExt->
ToXml(xml, blanks +
" "))
2246 sprintf(buf,
"</%s>\n", tagSig);
2247 xml += blanks + blanks + blanks + buf;
2249 xml += blanks +
" </DeviceModel>\n";
2252 xml += blanks +
"</ProfileDesc>\n";
2259 if (pNode->type==XML_ELEMENT_NODE && !
icXmlStrCmp(pNode->name,
"ProfileDesc")) {
2262 for (pDescNode = pNode->children; pDescNode; pDescNode=pDescNode->next) {
2263 if (pDescNode->type == XML_ELEMENT_NODE) {
2264 if (!
icXmlStrCmp(pDescNode->name,
"DeviceManufacturerSignature")){
2267 else if (!
icXmlStrCmp(pDescNode->name,
"DeviceModelSignature")){
2270 else if (!
icXmlStrCmp(pDescNode->name,
"DeviceAttributes")){
2273 else if (!
icXmlStrCmp(pDescNode->name,
"Technology")){
2276 else if (!
icXmlStrCmp(pDescNode->name,
"DeviceManufacturer")) {
2277 xmlNode *pDevManNode =
icXmlFindNode(pDescNode->children,
"multiLocalizedUnicodeType");
2280 pDevManNode =
icXmlFindNode(pDescNode->children,
"textDescriptionType");
2299 pExt->
ParseXml(pDevManNode->children, parseStr);
2302 else if (!
icXmlStrCmp(pDescNode->name,
"DeviceModel")) {
2303 xmlNode *pDevModNode =
icXmlFindNode(pDescNode->children,
"multiLocalizedUnicodeType");
2306 pDevModNode =
icXmlFindNode(pDescNode->children,
"textDescriptionType");
2325 pExt->
ParseXml(pDevModNode->children, parseStr);
2343 CIccProfileSeqDesc::iterator i;
2344 if (!m_Descriptions)
2347 xml += blanks +
"<ProfileSequence>\n";
2348 for (i=m_Descriptions->begin(); i!=m_Descriptions->end(); i++) {
2352 xml += blanks +
"</ProfileSequence>\n";
2361 if (!m_Descriptions)
2364 m_Descriptions->clear();
2367 for (pNode = pNode->children; pNode; pNode=pNode->next) {
2368 if (pNode->type==XML_ELEMENT_NODE && !
icXmlStrCmp(pNode->name,
"ProfileDesc")) {
2374 m_Descriptions->push_back(ProfileDescStruct);
2389 sprintf(line,
"<CountOfChannels>%d</CountOfChannels>\n", m_nChannels);
2390 xml += blanks + line;
2395 xml += blanks + line;
2400 xml += blanks + line;
2402 CIccResponse16List::iterator j;
2403 for (j=pResponseList->begin(); j!=pResponseList->end(); j++) {
2404 sprintf(line,
" <Measurement DeviceCode=\"%d\" MeasValue=\"" icXmlFloatFmt "\"", j->deviceCode,
icFtoD(j->measurementValue));
2405 xml += blanks + line;
2408 sprintf(line,
" Reserved=\"%d\"", j->reserved);
2414 xml += blanks +
" </ChannelResponses>\n";
2416 xml += blanks +
" </ResponseCurve>\n";
2417 pCurves = GetNextCurves();
2431 int nChannels = atoi((
const char*)pNode->children->content);
2432 SetNumChannels(nChannels);
2434 if (!m_ResponseCurves)
2437 if (!m_ResponseCurves->empty())
2438 m_ResponseCurves->clear();
2440 for (pNode = pNode->next; pNode; pNode = pNode->next) {
2441 if (pNode->type==XML_ELEMENT_NODE && !
icXmlStrCmp(pNode->name,
"ResponseCurve")) {
2444 if (nChannels !=
icXmlNodeCount(pNode->children,
"ChannelResponses"))
2448 xmlNode *pChild, *pMeasurement;
2451 for (i=0, pChild = pNode->children; pChild; pChild = pChild->next) {
2452 if (pChild->type == XML_ELEMENT_NODE && !
icXmlStrCmp(pChild->name,
"ChannelResponses")) {
2461 if (!szX || !szY || !szZ || !*szX || !*szY || !*szZ)
2468 for (pMeasurement = pChild->children; pMeasurement; pMeasurement = pMeasurement->next) {
2469 if (pMeasurement->type == XML_ELEMENT_NODE && !
icXmlStrCmp(pMeasurement->name,
"Measurement")) {
2474 if (!szDeviceCode || !szValue || !*szDeviceCode || !*szValue)
2480 if (szReserved && *szReserved)
2481 response.
reserved = atoi(szReserved);
2483 pResponseList->push_back(response);
2489 m_ResponseCurves->push_back(curves);
2509 xml += blanks +
"<Curve/>\n";
2511 else if (IsIdentity()) {
2512 xml += blanks +
"<Curve IdentitySize=\"";
2513 sprintf(buf,
"%d", m_nSize);
2518 xml += blanks +
"<Curve>\n" + blanks;
2519 for (i=0; i<(int)m_nSize; i++) {
2520 if ( i && !(i%16)) {
2524 sprintf(buf,
" %3u", (
int)(m_Curve[i] * 255.0 + 0.5));
2528 xml += blanks +
"</Curve>\n";
2531 xml += blanks +
"<Curve>\n" + blanks;
2532 for (i=0; i<(int)m_nSize; i++) {
2535 xml += blanks +
" ";
2537 sprintf(buf,
" %5u", (
int)(m_Curve[i] * 65535.0 + 0.5));
2541 xml += blanks +
"</Curve>\n";
2544 xml += blanks +
"<Curve>\n" + blanks +
" ";
2545 for (i=0; i<(int)m_nSize; i++) {
2548 xml += blanks +
" ";
2550 sprintf(buf,
" %13.8f", m_Curve[i]);
2554 xml += blanks +
"</Curve>\n";
2572 xmlNode *pCurveNode;
2582 parseStr +=
"Error! - File '";
2583 parseStr += filename;
2584 parseStr +=
"' not found.\n";
2592 if (!strcmp(format,
"text")) {
2594 char *buf = (
char *)
new char[num];
2597 perror(
"Memory Error");
2599 parseStr += filename;
2600 parseStr +=
"' may not be a valid text file.\n";
2606 if (file->
Read8(buf, num) !=num) {
2607 perror(
"Read-File Error");
2609 parseStr += filename;
2610 parseStr +=
"' may not be a valid text file.\n";
2622 parseStr +=
"File '";
2623 parseStr += filename;
2624 parseStr +=
"' is not a valid text file.\n";
2637 for (i=0; i<data.
GetSize(); i++) {
2659 parseStr +=
"File '";
2660 parseStr += filename;
2661 parseStr +=
"' is not a valid text file.\n";
2675 for (i=0; i<data.
GetSize(); i++) {
2691 parseStr +=
"File '";
2692 parseStr += filename;
2693 parseStr +=
"' is not a valid text file.\n";
2706 for (i=0; i<data.
GetSize(); i++) {
2721 else if (!strcmp(format,
"binary")) {
2723 bool little_endian = !strcmp(order,
"little");
2732 for (i=0; i<num; i++) {
2733 if (!file->
Read8(&value)) {
2734 perror(
"Read-File Error");
2736 parseStr += filename;
2737 parseStr +=
"' may not be a valid binary file.\n";
2754 for (i=0; i<num; i++) {
2755 if (!file->
Read16(&value)) {
2756 perror(
"Read-File Error");
2758 parseStr += filename;
2759 parseStr +=
"' may not be a valid binary file.\n";
2763#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
2764 if (little_endian) {
2766 if (!little_endian) {
2786 for (i=0; i<num; i++) {
2788 perror(
"Read-File Error");
2790 parseStr += filename;
2791 parseStr +=
"' may not be a valid binary file.\n";
2795#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
2796 if (little_endian) {
2798 if (!little_endian) {
2801 tmp = ptr[0]; ptr[0] = ptr[3]; ptr[3] = tmp;
2802 tmp = ptr[1]; ptr[1] = ptr[2]; ptr[2] = tmp;
2824 if (!data.
ParseArray(pCurveNode->children)) {
2827 if (szSize && *szSize) {
2831 if (m_nSize == nSize) {
2834 for (j=0; j<nSize; j++) {
2852 for (j=0; j<data.
GetSize(); j++) {
2870 if (!data.
ParseArray(pCurveNode->children)) {
2873 if (szSize && *szSize) {
2877 if (m_nSize == nSize) {
2880 for (j=0; j<nSize; j++) {
2898 for (j=0; j<data.
GetSize(); j++) {
2909 if (!data.
ParseArray(pCurveNode->children)) {
2912 if (szSize && *szSize) {
2917 if (m_nSize == nSize) {
2920 for (j=0; j<nSize; j++) {
2938 for (j=0; j<data.
GetSize(); j++) {
2960 sprintf(buf,
"<ParametricCurve FunctionType=\"%d\"", m_nFunctionType);
2961 xml += blanks + buf;
2964 sprintf(buf,
" Reserved=\"%d\"", m_nReserved2);
2968 xml += blanks +
" ";
2970 for (i=0; i<(int)m_nNumParam; i++) {
2976 sprintf(buf,
"</ParametricCurve>\n");
2977 xml += blanks + buf;
2984 return ToXml(xml, blanks);
2989 return ParseXml (pNode, parseStr);
2994 xmlNode *pCurveNode =
icXmlFindNode(pNode->children,
"ParametricCurve");
2996 for (pCurveNode = pNode; pCurveNode; pCurveNode=pCurveNode->next) {
2997 if (pCurveNode->type==XML_ELEMENT_NODE) {
2998 if (!
icXmlStrCmp(pCurveNode->name,
"ParametricCurve")) {
3000 const char *functionType =
icXmlAttrValue(pCurveNode,
"FunctionType");
3005 if (!SetFunctionType(atoi(functionType))){
3014 if (data.
GetSize()!=GetNumParam()){
3021 for (j=0; j<data.
GetSize(); j++) {
3022 dParams[j] = dataBuf[j];
3043 xml += blanks +
"<" +
szName +
">\n";
3044 for (i=0; i<numCurve; i++) {
3049 if (!((
CIccCurveXml *)pTag)->ToXml(xml, nType, blanks +
" "))
3052 xml += blanks +
"</" +
szName +
">\n";
3069 return ToXml(xml, blanks);
3075 xmlNode *pCurveNode =
icXmlFindNode(pNode,
"SegmentedCurve");
3080 if (pCurve->
ParseXml(pCurveNode, parseStr)) {
3089 parseStr +=
"Unable to allocate Segmented Curve\n";
3092 parseStr +=
"Unable to find Segmented Curve\n";
3099 return ParseXml(pNode, parseStr);
3106 xml += blanks +
"<Matrix\n";
3109 xml += blanks + buf;
3112 xml += blanks + buf;
3115 xml += blanks + buf;
3120 xml += blanks + buf;
3133 xml += blanks + buf;
3231 xmlNode *pCurveNode;
3233 for (i=0, pCurveNode = pNode; i<nChannels && pCurveNode; pCurveNode=pCurveNode->next) {
3234 if (pCurveNode->type==XML_ELEMENT_NODE) {
3239 else if (!
icXmlStrCmp(pCurveNode->name,
"ParametricCurve")) {
3250 if (pCurveXml->
ParseXml(pCurveNode, nType, parseStr)) {
3251 pCurve[i] = pCurveTag;
3257 parseStr +=
"Unable to parse curve at Line";
3258 sprintf(num,
"%d\n", pCurveNode->line);
3266 if (pXmlTag->
ParseXml(pCurveNode, parseStr)) {
3267 pCurve[i] = pCurveTag;
3273 parseStr +=
"Unable to parse curve tag at Line";
3274 sprintf(num,
"%d\n", pCurveNode->line);
3283 if (!i != nChannels) {
3284 parseStr +=
"Channel number mismatch!\n";
3286 return i==nChannels;
3291 memset(pMatrix->
m_e, 0,
sizeof(pMatrix->
m_e));
3297 for (i=0; i<9; i++) {
3298 sprintf(attrName,
"e%d", i+1);
3304 for (i=9; i<12; i++) {
3305 sprintf(attrName,
"e%d", i+1);
3326 pCLUT =
new CIccCLUT(nInput, nOutput, nPrecision);
3329 parseStr +=
"Error in creating CLUT Table. Check values of Precision, InputChannel, or OutputChannels.\n";
3333 xmlNode *grid =
icXmlFindNode(pNode->children,
"GridPoints");
3339 parseStr +=
"Error in setting the size of GridPoints. Check values of GridPoints, InputChannel, or OutputChannels.\n";
3345 parseStr +=
"Error parsing GridPoints.\n";
3353 xmlAttr *gridGranularity =
icXmlFindAttr(pNode,
"GridGranularity");
3355 if (gridGranularity) {
3362 if (!pCLUT->
Init(nGridGranularity)) {
3363 parseStr +=
"Error in setting the size of GridGranularity. Check values of GridGranularity, InputChannel, or OutputChannels.\n";
3369 xmlNode *table =
icXmlFindNode(pNode->children,
"TableData");
3374 if (precision && atoi(precision) == 1) {
3385 if (!filename || !filename[0]) {
3394 parseStr +=
"Error! - File '";
3395 parseStr += filename;
3396 parseStr +=
"' not found.\n";
3403 if (!strcmp(format,
"text")) {
3405 char *buf = (
char *)malloc(num);
3408 perror(
"Memory Error");
3410 parseStr += filename;
3411 parseStr +=
"' may not be a valid text file.\n";
3420 if (!strcmp(encoding,
"int8"))
3422 else if (!strcmp(encoding,
"int16"))
3424 else if (!strcmp(encoding,
"float"))
3426 else if (encoding[0]) {
3427 parseStr+=
"Unknown encoding \"";
3428 parseStr+= encoding;
3429 parseStr+=
"\" - using default encoding\n";
3432 if (file->
Read8(buf, num)!=num) {
3433 perror(
"Read-File Error");
3435 parseStr += filename;
3436 parseStr +=
"' may not be a valid text file.\n";
3447 parseStr +=
"File '";
3448 parseStr += filename;
3449 parseStr +=
"' is not a valid text file.\n";
3457 parseStr +=
"Error! - Number of entries in file '";
3458 parseStr += filename;
3459 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3460 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3461 parseStr +=
" b. File may not be a valid text file.\n";
3471 for (i=0; i<data.
GetSize(); i++) {
3479 parseStr +=
"File '";
3480 parseStr += filename;
3481 parseStr +=
"' is not a valid text file.\n";
3489 parseStr +=
"Error! - Number of entries in file '";
3490 parseStr += filename;
3491 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3492 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3493 parseStr +=
" b. File may not be a valid text file.\n";
3503 for (i=0; i<data.
GetSize(); i++) {
3511 parseStr +=
"File '";
3512 parseStr += filename;
3513 parseStr +=
"' is not a valid text file.\n";
3521 parseStr +=
"Error! - Number of entries in file '";
3522 parseStr += filename;
3523 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3524 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3525 parseStr +=
" b. File may not be a valid text file.\n";
3535 for (i=0; i<data.
GetSize(); i++) {
3540 parseStr +=
"Error! Unknown text data type.\n";
3548 else if (!strcmp(format,
"binary")) {
3550 bool little_endian = !strcmp(order,
"little");
3556 if (!strcmp(encoding,
"int8"))
3558 else if (!strcmp(encoding,
"int16"))
3560 else if (!strcmp(encoding,
"float"))
3562 else if (encoding[0]) {
3563 parseStr+=
"Unknown encoding \"";
3564 parseStr+= encoding;
3565 parseStr+=
"\" - using int16.\n";
3569 parseStr+=
"CLUT TableData Encoding type not specified.\n";
3578 parseStr +=
"Error! - Number of entries in file '";
3579 parseStr += filename;
3580 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3581 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3582 parseStr +=
" b. File may not be a valid binary file.\n";
3589 for (i=0; i<num; i++) {
3590 if (!file->
Read8(&value)) {
3591 perror(
"Read-File Error");
3593 parseStr += filename;
3594 parseStr +=
"' may not be a valid binary file.\n";
3608 parseStr +=
"Error! - Number of entries in file '";
3609 parseStr += filename;
3610 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3611 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3612 parseStr +=
" b. File may not be a valid binary file.\n";
3620 for (i=0; i<num; i++) {
3621 if (!file->
Read16(&value)) {
3622 perror(
"Read-File Error");
3624 parseStr += filename;
3625 parseStr +=
"' may not be a valid binary file.\n";
3630#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
3631 if (little_endian) {
3633 if (!little_endian) {
3648 parseStr +=
"Error! - Number of entries in file '";
3649 parseStr += filename;
3650 parseStr +=
"'is not equal to the size of the CLUT Table.\n";
3651 parseStr +=
" a. Check values of GridGranularity/GridPoints, InputChannel, or OutputChannels.\n";
3652 parseStr +=
" b. File may not be a valid binary file.\n";
3660 for (i=0; i<num; i++) {
3662 perror(
"Read-File Error");
3664 parseStr += filename;
3665 parseStr +=
"' may not be a valid binary file.\n";
3670#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
3671 if (little_endian) {
3673 if (!little_endian) {
3676 tmp = ptr[0]; ptr[0] = ptr[3]; ptr[3] = tmp;
3677 tmp = ptr[1]; ptr[1] = ptr[2]; ptr[2] = tmp;
3683 parseStr +=
"Error! Unknown binary data type.\n";
3691 parseStr +=
"Error! Unknown Format type.\n";
3703 parseStr +=
"Error! - unable to parse data in CLUT.\n";
3709 parseStr +=
"Error! - Number of entries is not equal to the size of the CLUT Table.\n";
3717 for (i=0; i<data.
GetSize(); i++) {
3725 parseStr +=
"Error! - unable to parse data in CLUT.\n";
3731 parseStr +=
"Error! - Number of entries is not equal to the size of the CLUT Table.\n";
3739 for (i=0; i<data.
GetSize(); i++) {
3747 parseStr +=
"Error! - unable to parse data in CLUT.\n";
3753 parseStr +=
"Error! - Number of entries is not equal to the size of the CLUT Table.\n";
3761 for (i=0; i<data.
GetSize(); i++) {
3766 parseStr +=
"Error! Unknown table data type.";
3773 parseStr +=
"Error! Cannot find table data.";
3797 pMBB->
Init(nIn, nOut);
3799 for (; pNode; pNode = pNode->next) {
3800 if (pNode->type == XML_ELEMENT_NODE) {
3804 parseStr +=
"Error! - Failed to parse ACurves.\n";
3811 parseStr +=
"Error! - Failed to parse BCurves.\n";
3818 parseStr +=
"Error! - Failed to parse MCurves.\n";
3825 parseStr +=
"Error! - Failed to parse Matrix.\n";
3833 parseStr +=
"Error! - Failed to set CLUT to LUT.\n";
3838 parseStr +=
"Error! - Failed to parse CLUT.\n";
3933 CIccMultiProcessElementList::iterator i;
3935 sprintf(line,
"<MultiProcessElements InputChannels=\"%d\" OutputChannels=\"%d\">\n", NumInputChannels(), NumOutputChannels());
3936 xml += blanks + line;
3938 for (i=m_list->begin(); i!=m_list->end(); i++) {
3948 pMpeXml->
ToXml(xml, blanks +
" ");
3959 xml += blanks +
"</MultiProcessElements>\n";
3966 if (!strcmp(szElementNodeName,
"CurveSetElement")) {
3969 if (!strcmp(szElementNodeName,
"MatrixElement")) {
3972 if (!strcmp(szElementNodeName,
"CLutElement")) {
3975 if (!strcmp(szElementNodeName,
"ExtCLutElement")) {
3978 if (!strcmp(szElementNodeName,
"CalculatorElement")) {
3981 if (!strcmp(szElementNodeName,
"TintArrayElement")) {
3984 if (!strcmp(szElementNodeName,
"ToneMapElement")) {
3987 if (!strcmp(szElementNodeName,
"JabToXYZElement")) {
3990 if (!strcmp(szElementNodeName,
"UnknownElement")) {
3993 if (!strcmp(szElementNodeName,
"XYZToJabElement")) {
3996 if (!strcmp(szElementNodeName,
"EmissionMatrixElement")) {
3999 if (!strcmp(szElementNodeName,
"InvEmissionMatrixElement")) {
4002 if (!strcmp(szElementNodeName,
"EmissionCLutElement")) {
4005 if (!strcmp(szElementNodeName,
"ReflectanceCLutElement")) {
4008 if (!strcmp(szElementNodeName,
"EmissionObserverElement")) {
4011 if (!strcmp(szElementNodeName,
"ReflectanceObserverElement")) {
4014 if (!strcmp(szElementNodeName,
"BAcsElement")) {
4017 if (!strcmp(szElementNodeName,
"EAcsElement")) {
4028 if (pNode->type != XML_ELEMENT_NODE) {
4035 parseStr += std::string(
"Unknown Element Type (") + (
const icChar*)pNode->name +
")\n";
4047 if (pXmlMpe->
ParseXml(pNode, parseStr)) {
4053 m_list->push_back(ptr);
4056 parseStr += std::string(
"Unable to parse element of type ") + pMpe->
GetClassName() +
"\n";
4062 parseStr += std::string(
"Element ") + pMpe->
GetClassName() +
"isn't of type CIccMpeXml\n";
4068 parseStr += std::string(
"Element ") + pMpe->
GetClassName() +
"isn't of type CIccMpeXml\n";
4082 parseStr +=
"Cannot Find MultiProcessElements\n";
4086 xmlAttr *pInputChannels =
icXmlFindAttr(pNode,
"InputChannels");
4087 xmlAttr *pOutputChannels =
icXmlFindAttr(pNode,
"OutputChannels");
4089 if (!pInputChannels || !pOutputChannels) {
4090 parseStr +=
"Invalid channels in MultiProcessElements\n";
4105 for (elemNode = pNode->children; elemNode; elemNode = elemNode->next) {
4106 if (elemNode->type == XML_ELEMENT_NODE) {
4107 if (!ParseElement(elemNode, parseStr)) {
4109 parseStr +=
"Unable to parse element (";
4110 parseStr += (
char*)elemNode->name;
4111 sprintf(str,
") starting on line %d\n", elemNode->line);
4126 xml += blanks +
"<ProfileSequenceId>\n";
4128 CIccProfileIdDescList::iterator pid;
4130 for (pid=m_list->begin(); pid!=m_list->end(); pid++) {
4137 for (n=0; n<16; n++) {
4138 sprintf(buf + n*2,
"%02X", pid->m_profileID.ID8[n]);
4141 xml += blanks +
" <ProfileIdDesc id=\"";
4145 if (pid->m_desc.m_Strings) {
4146 CIccMultiLocalizedUnicode::iterator i;
4148 for (i=pid->m_desc.m_Strings->begin(); i!=pid->m_desc.m_Strings->end(); i++) {
4149 sprintf(buf,
"<LocalizedText LanguangeCountry=\"%s\"",
icFixXml(fix,
icGetSigStr(data, (i->m_nLanguageCode<<16) + i->m_nCountryCode)));
4150 xml += blanks + buf;
4152 sprintf(buf,
">%s</LocalizedText>\n",
icFixXml(fix,
icUtf16ToUtf8(bufstr, i->GetBuf(), i->GetLength())));
4156 xml += blanks +
" </ProfileIdDesc>\n";
4159 xml += blanks +
"</ProfileSequenceId>\n";
4177 if (szDesc && *szDesc)
4187 for (pText = pNode->children; pText && pText->type != XML_TEXT_NODE; pText = pText->next);
4199 m_list->push_back(desc);
4210 CIccNameValueDict::iterator nvp;
4212 for (nvp=m_Dict->begin(); nvp!=m_Dict->end(); nvp++) {
4222 xml += blanks +
" <DictEntry Name=\"";
4239 CIccMultiLocalizedUnicode::iterator i;
4242 sprintf(buf,
" <LocalizedName LanguageCountry=\"%s\"",
icFixXml(fix,
icGetSigStr(data, (i->m_nLanguageCode<<16) + i->m_nCountryCode)));
4243 xml += blanks + buf;
4245 sprintf(buf,
"><![CDATA[%s]]></LocalizedName>\n",
icFixXml(fix,
icUtf16ToUtf8(bufstr, i->GetBuf(), i->GetLength())));
4250 CIccMultiLocalizedUnicode::iterator i;
4253 sprintf(buf,
" <LocalizedValue LanguageCountry=\"%s\"",
icFixXml(fix,
icGetSigStr(data, (i->m_nLanguageCode<<16) + i->m_nCountryCode)));
4254 xml += blanks + buf;
4256 sprintf(buf,
"><![CDATA[%s]]></LocalizedValue>\n",
icFixXml(fix,
icUtf16ToUtf8(bufstr, i->GetBuf(), i->GetLength())));
4260 xml += blanks +
" </DictEntry>\n";
4295 for (pChild = pNode->children; pChild; pChild = pChild->next) {
4296 if (pChild->type == XML_ELEMENT_NODE && !
icXmlStrCmp(pChild->name,
"LocalizedName")) {
4303 if ((pAttr =
icXmlFindAttr(pChild,
"LanguageCountry")) && pChild->children) {
4307 for (pText = pChild->children; pText && pText->type != XML_TEXT_NODE && pText->type != XML_CDATA_SECTION_NODE; pText = pText->next);
4319 else if (pChild->type == XML_ELEMENT_NODE && !
icXmlStrCmp(pChild->name,
"LocalizedValue")) {
4326 if ((pAttr =
icXmlFindAttr(pChild,
"LanguageCountry")) && pChild->children) {
4330 for (pText = pChild->children; pText && pText->type != XML_TEXT_NODE && pText->type != XML_CDATA_SECTION_NODE; pText = pText->next);
4343 m_Dict->push_back(ptr);
4353 char buf[256], fix[256], line[256];
4359 if (structName && strcmp(structName,
"privateStruct")) {
4360 sprintf(line,
"<%s> <MemberTags>\n", structName);
4364 sprintf(line,
"<privateStruct StructSignature=\"%s\"/> <MemberTags>\n",
icFixXml(fix,
icGetSigStr(buf, m_sigStructType)));
4365 structName =
"privateStruct";
4368 xml += blanks + line;
4369 TagEntryList::iterator i, j;
4370 std::set<icTagSignature> sigSet;
4374 for (i=m_ElemEntries->begin(); i!=m_ElemEntries->end(); i++) {
4375 if (sigSet.find(i->TagInfo.sig)==sigSet.end()) {
4376 CIccTag *pTag = FindElem(i->TagInfo.sig);
4381 IccOffsetTagSigMap::iterator prevTag = offsetTags.find(i->TagInfo.offset);
4383 if (prevTag == offsetTags.end()) {
4386 if (tagName.size() && strncmp(tagName.c_str(),
"PrivateSubTag", 13)) {
4387 sprintf(line,
" <%s>",
icFixXml(fix, tagName.c_str()));
4390 sprintf(line,
" <PrivateSubTag TagSignature=\"%s\">",
icFixXml(fix,
icGetSigStr(buf, i->TagInfo.sig)));
4391 tagName =
"PrivateSubTag";
4393 xml += blanks + line;
4396 if (!strcmp(
"PrivateType", tagSig))
4399 sprintf(line,
" <%s>\n", tagSig);
4405 sprintf(line,
" <TagSignature>%s</TagSignature>\n",
icFixXml(fix,
icGetSigStr(buf, i->TagInfo.sig)));
4406 xml += blanks + line;
4408 sigSet.insert(i->TagInfo.sig);
4411 for (j++; j != m_ElemEntries->end(); j++) {
4412 if (j->pTag == i->pTag || j->TagInfo.offset == i->TagInfo.offset) {
4413 sprintf(line,
" <TagSignature>%s</TagSignature>\n",
icFixXml(fix,
icGetSigStr(buf, j->TagInfo.sig)));
4414 xml += blanks + line;
4415 sigSet.insert(j->TagInfo.sig);
4425 if (!pTagXml->
ToXml(xml, blanks +
" ")) {
4426 printf(
"Unable to output sub-tag with type %s\n",
icGetSigStr(buf, i->TagInfo.sig));
4429 sprintf(line,
" </%s> </%s>\n", tagSig, tagName.c_str());
4430 xml += blanks + line;
4431 offsetTags[i->TagInfo.offset] = i->TagInfo.sig;
4434 std::string prevTagName = ((pStruct != NULL) ? pStruct->
GetElemName(prevTag->second) :
"");
4437 if (tagName.size() && strncmp(tagName.c_str(),
"PrivateSubTag", 13))
4438 sprintf(line,
" <%s SameAs=\"%s\"",
icFixXml(fix, tagName.c_str()),
icFixXml(fix2, prevTagName.c_str()));
4440 sprintf(line,
" <PrivateSubTag TagSignature=\"%s\" SameAs=\"%s\"",
icFixXml(fix2,
icGetSigStr(buf, i->TagInfo.sig)),
icFixXml(fix, prevTagName.c_str()));
4443 if (prevTagName.size() || !strncmp(prevTagName.c_str(),
"PrivateSubTag", 13)) {
4444 sprintf(line,
" SameAsSignature=\"%s\"",
icFixXml(fix2,
icGetSigStr(buf, prevTag->second)));
4452 printf(
"Non XML tag in list with type %s!\n",
icGetSigStr(buf, i->TagInfo.sig));
4457 printf(
"Unable to find tag with type %s!\n",
icGetSigStr(buf, i->TagInfo.sig));
4463 xml += blanks +
"</MemberTags> </" + structName +
">\n";
4487 if (pNode->type != XML_ELEMENT_NODE) {
4488 parseStr +=
"Invalid Tag Node: ";
4489 parseStr += (
const char *)pNode->name;
4496 std::string nodeName = (
icChar*)pNode->name;
4499 sigTag = m_pStruct->GetElemSig(nodeName.c_str());
4503 if (sigTag != 0 || nodeName ==
"PrivateSubTag") {
4504 if (nodeName ==
"PrivateSubTag") {
4510 parseStr +=
"Invalid TagSignature for PrivateSubTag\n";
4519 if (!strcmp(sameAs,
"PrivateSubTag") || sigParentTag ==
icSigUnknownTag) {
4520 const char *sameAsSig =
icXmlAttrValue(pNode,
"SameAsSignature",
"");
4525 parseStr +=
"Invalid SameAsSignature for PrivateSubTag\n";
4529 pTag = this->FindElem(sigParentTag);
4531 AttachElem(sigTag, pTag);
4534 parseStr +=
"SameAs tag ";
4536 parseStr +=
" for ";
4537 parseStr += nodeName +
" does not exist\n";
4545 for (pTypeNode = pNode->children; pTypeNode; pTypeNode = pTypeNode->next) {
4546 if (pTypeNode->type == XML_ELEMENT_NODE) {
4552 parseStr +=
"No tag type node defined for ";
4553 parseStr += nodeName;
4576 if (pXmlTag->
ParseXml(pTypeNode->children, parseStr)) {
4580 AttachElem(sigTag, pTag);
4583 parseStr +=
"Unable to Parse \"";
4584 parseStr += (
const char*)pTypeNode->name;
4586 parseStr += nodeName;
4587 parseStr +=
") Tag\n";
4592 parseStr +=
"Invalid tag extension for \"";
4593 parseStr += (
const char*)pTypeNode->name;
4595 parseStr += nodeName;
4596 parseStr +=
") Tag\n";
4621 if (pXmlTag->
ParseXml(pNode->children, parseStr)) {
4626 for (xmlNode *tagSigNode = pNode->children; tagSigNode; tagSigNode = tagSigNode->next) {
4627 if (tagSigNode->type == XML_ELEMENT_NODE && !
icXmlStrCmp(tagSigNode->name,
"TagSignature")) {
4629 AttachElem(sigTag, pTag);
4634 parseStr +=
"Unable to Parse \"";
4637 parseStr += nodeName;
4638 parseStr +=
") Tag\n";
4643 parseStr +=
"Invalid tag extension for \"";
4646 parseStr += nodeName;
4647 parseStr +=
") Tag\n";
4659 xmlNode *tagNode, *firstNode=pNode;
4661 for (; pNode; pNode = pNode->next) {
4662 if (pNode->type == XML_ELEMENT_NODE)
4666 parseStr +=
"Invalid Tag Structure: ";
4667 parseStr += (
const char *)firstNode->name;
4672 std::string nodeName = (
icChar*)pNode->name;
4677 SetTagStructType(sigStruct);
4678 pNode = pNode->children;
4683 parseStr +=
"Unable to find StructureSignature\n";
4687 if (tagNode->type == XML_ELEMENT_NODE && tagNode->children && tagNode->children->content) {
4690 SetTagStructType(sigStruct);
4693 parseStr +=
"Invalid XNode type for StructureSignature\n";
4700 parseStr +=
"Unable to find structure MemberTags\n";
4704 for (tagNode = tagNode->children; tagNode; tagNode = tagNode->next) {
4705 if (tagNode->type == XML_ELEMENT_NODE) {
4706 if (!ParseTag(tagNode, parseStr)) {
4707 parseStr +=
"Failed to parse tag member (";
4708 parseStr += (
char*)tagNode->name;
4721 char buf[256], fix[256], line[256];
4723 std::string arrayName;
4724 std::string arrayBlanks =
"";
4728 sprintf(line,
"<%s> ", arrayName.c_str());
4733 sprintf(line,
"<privateArray StructSignature=\"%s\"/> ",
icFixXml(fix,
icGetSigStr(buf, m_sigArrayType)));
4734 arrayName =
"privateArray";
4737 xml += blanks + line +
"<ArrayTags>\n";
4740 for (i=0; i<(int)m_nSize; i++) {
4741 CIccTag* pTag = m_TagVals[i].ptr;
4748 if ( !strcmp(
"PrivateType", tagSig) )
4751 sprintf(line,
" <%s>\n", tagSig);
4753 xml += blanks + arrayBlanks + line;
4756 if (!pTagXml->
ToXml(xml, blanks + arrayBlanks +
" ")) {
4760 sprintf(line,
" </%s>\n\n", tagSig);
4761 xml += blanks + arrayBlanks + line;
4769 xml += blanks +
"</ArrayTags> </" + arrayName +
">\n";
4778 xmlNode *tagNode, *indexNode, *firstNode = pNode;;
4781 for (; pNode; pNode = pNode->next) {
4782 if (pNode->type == XML_ELEMENT_NODE)
4786 parseStr +=
"Invalid Tag Array: ";
4787 parseStr += (
const char *)firstNode->name;
4792 std::string nodeName = (
icChar*)pNode->name;
4796 SetTagArrayType(sigArray);
4797 pNode = pNode->children;
4802 parseStr +=
"Unable to find ArraySignature\n";
4806 if (tagNode->type == XML_ELEMENT_NODE && tagNode->children && tagNode->children->content) {
4808 SetTagArrayType(sigArray);
4811 parseStr +=
"Invalid XNode type for ArraySignature\n";
4820 int nMaxIndex = 0, n=0;
4821 for (tagNode = indexNode->children; tagNode; tagNode = tagNode->next) {
4822 if (tagNode->type == XML_ELEMENT_NODE) {
4826 if (!SetSize(nMaxIndex))
4830 for (tagNode = indexNode->children; tagNode; tagNode = tagNode->next) {
4831 if (tagNode->type == XML_ELEMENT_NODE) {
4853 if (pXmlTag->
ParseXml(tagNode->children, parseStr)) {
4858 if (!m_TagVals[n].ptr)
4859 m_TagVals[n].ptr = pTag;
4861 parseStr +=
"Tag Array Index ";
4863 parseStr +=
" already filled!\n";
4868 parseStr +=
"Unable to Parse xml node named \"";
4869 parseStr += (
icChar*)tagNode->name;
4878 for (n=0; n<(int)m_nSize; n++) {
4879 if (!m_TagVals[n].ptr) {
4880 parseStr +=
"Undefined Array Tag at index ";
4896 if (m_NumberOfVertices && (m_PCSValues || m_DeviceValues)) {
4897 xml += blanks +
"<Vertices>\n";
4900 sprintf(line,
" <PCSValues channels=\"%d\">\n", m_nPCSChannels);
4901 xml += blanks + line;
4903 xml += blanks +
" </PCSValues>\n";
4905 if (m_DeviceValues) {
4906 sprintf(line,
" <DeviceValues channels=\"%d\">\n", m_nDeviceChannels);
4907 xml += blanks + line;
4909 xml += blanks +
" </DeviceValues>\n";
4911 xml += blanks +
"</Vertices>\n";
4914 if (m_Triangles && m_NumberOfTriangles) {
4915 xml += blanks +
"<Triangles>\n";
4917 for (i=0; i<m_NumberOfTriangles; i++) {
4918 sprintf(line,
" <T>%u %u %u</T>\n", m_Triangles[i].m_VertexNumbers[0], m_Triangles[i].m_VertexNumbers[1], m_Triangles[i].m_VertexNumbers[2]);
4919 xml += blanks + line;
4922 xml += blanks +
"</Triangles>\n";
4932 xmlNode *childNode, *subNode;
4936 parseStr +=
"Cannot find Vertices\n";
4945 if (!m_nPCSChannels) {
4946 parseStr +=
"Bad PCSValues channels\n";
4952 parseStr +=
"Unable to parse GamutBoundaryDesc PCSValues\n";
4956 m_NumberOfVertices = vals.
GetSize() / m_nPCSChannels;
4958 if (m_NumberOfVertices<4) {
4959 parseStr +=
"Must have at least 4 PCSValues vertices\n";
4963 m_PCSValues =
new icFloatNumber[m_NumberOfVertices * m_nPCSChannels];
4968 memcpy(m_PCSValues, vals.
GetBuf(), m_NumberOfVertices * m_nPCSChannels*
sizeof(
icFloatNumber));
4971 parseStr +=
"Cannot find PCSValues\n";
4975 subNode =
icXmlFindNode(childNode->children,
"DeviceValues");
4978 m_nDeviceChannels = atoi(
icXmlAttrValue(subNode,
"channels",
"0"));
4980 if (!m_nDeviceChannels) {
4981 parseStr +=
"Bad DeviceValues channels\n";
4987 parseStr +=
"Unable to parse GamutBoundaryDesc DeviceValues\n";
4991 int nVertices = vals.
GetSize() / m_nDeviceChannels;
4993 if (m_NumberOfVertices != nVertices) {
4994 parseStr +=
"Number of Device vertices doesn't match PCS verticies\n";
4998 m_DeviceValues =
new icFloatNumber[m_NumberOfVertices * m_nDeviceChannels];
5000 if (!m_DeviceValues)
5003 memcpy(m_DeviceValues, vals.
GetBuf(), m_NumberOfVertices * m_nDeviceChannels *
sizeof(
icFloatNumber));
5005 else if (!m_PCSValues)
5006 m_NumberOfVertices = 0;
5010 parseStr +=
"Cannot find Triangles\n";
5014 int nMaxIndex = 0, n=0;
5015 for (subNode = childNode->children; subNode; subNode = subNode->next) {
5016 if (subNode->type == XML_ELEMENT_NODE && !strcmp((
icChar*)subNode->name,
"T")) {
5020 m_NumberOfTriangles = nMaxIndex;
5024 for (subNode = childNode->children; subNode && n<nMaxIndex; subNode = subNode->next) {
5025 if (subNode->type == XML_ELEMENT_NODE && !strcmp((
icChar*)subNode->name,
"T")) {
5029 parseStr +=
"Invalid Triangle entry\n";
5034 m_Triangles[n].m_VertexNumbers[0] = v[0];
5035 m_Triangles[n].m_VertexNumbers[1] = v[1];
5036 m_Triangles[n].m_VertexNumbers[2] = v[2];
5059 m_pProfile = pProfile;
5061 if (!pProfile->
ParseXml(tagNode, parseStr)) {
5071 if (!m_pProfile || strcmp(m_pProfile->GetClassName(),
"CIccProfileXml")) {
5089 m_nSeamlesIndicator = atoi(
icXmlAttrValue(tagNode,
"SeamlessIndicator",
"0"));
5094 xmlNode *pImageNode;
5099 if (!filename || !filename[0]) {
5107 parseStr +=
"Error! - File '";
5108 parseStr += filename;
5109 parseStr +=
"' not found.\n";
5118 if (file->
Read8(dst, num)!=num) {
5119 perror(
"Read-File Error");
5121 parseStr += filename;
5122 parseStr +=
"' may not be a valid binary file.\n";
5130 else if (pImageNode->children && pImageNode->children->content){
5149 xml += blanks +
"<HeightImage";
5150 sprintf(buf,
" SeamlessIndicator=\"%d\"", m_nSeamlesIndicator);
5153 sprintf(buf,
" EncodingFormat=\"%d\"", m_nEncodingFormat);
5156 sprintf(buf,
" MetersMinPixelValue=\"%.12f\"", m_fMetersMinPixelValue);
5159 sprintf(buf,
" MetersMaxPixelValue=\"%.12f\"", m_fMetersMaxPixelValue);
5163 xml += blanks +
"/>\n";
5167 xml += blanks +
" <Image>\n";
5169 xml += blanks +
" </Image>\n";
5170 xml += blanks +
"</HeightImage>\n";
5185 m_nSeamlesIndicator = atoi(
icXmlAttrValue(tagNode,
"SeamlessIndicator",
"0"));
5188 xmlNode *pImageNode;
5193 if (!filename || !filename[0]) {
5201 parseStr +=
"Error! - File '";
5202 parseStr += filename;
5203 parseStr +=
"' not found.\n";
5212 if (file->
Read8(dst, num) != num) {
5213 perror(
"Read-File Error");
5215 parseStr += filename;
5216 parseStr +=
"' may not be a valid binary file'.\n";
5224 else if (pImageNode->children && pImageNode->children->content) {
5242 xml += blanks +
"<NormalImage";
5243 sprintf(buf,
" SeamlessIndicator=\"%d\"", m_nSeamlesIndicator);
5246 sprintf(buf,
" EncodingFormat=\"%d\"", m_nEncodingFormat);
5250 xml += blanks +
"/>\n";
5254 xml += blanks +
" <Image>\n";
5256 xml += blanks +
" </Image>\n";
5257 xml += blanks +
"</NormalImage>\n";
5264#ifdef USEREFICCMAXNAMESPACE
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
CIccIO * IccOpenFileIO(const icChar *szFilename, const char *szAttr)
CIccCLUT * icCLutFromXml(xmlNode *pNode, int nIn, int nOut, icConvertType nType, std::string &parseStr)
std::map< icUInt32Number, icTagSignature > IccOffsetTagSigMap
File: IccStructFactory.h.
std::list< icResponse16Number > CIccResponse16List
List Class: CIccResponse16List.
std::list< CIccMultiProcessElementPtr > CIccMultiProcessElementList
bool icCurvesToXml(std::string &xml, const char *szName, CIccCurve **pCurves, int numCurve, icConvertType nType, std::string blanks)
bool icXmlParseProfDesc(xmlNode *pNode, CIccProfileDescStruct &p, std::string &parseStr)
bool icMBBToXml(std::string &xml, CIccMBB *pMBB, icConvertType nType, std::string blanks="", bool bSaveGridPoints=false)
static std::string icXmlParseTextString(xmlNode *pNode, std::string &parseStr, bool bConvert=true)
bool icProfDescToXml(std::string &xml, CIccProfileDescStruct &p, std::string blanks="")
std::map< icUInt32Number, icTagSignature > IccOffsetTagSigMap
static bool icXmlDumpTextData(std::string &xml, std::string blanks, const char *szText, bool bConvert=true)
bool icMatrixToXml(std::string &xml, CIccMatrix *pMatrix, std::string blanks)
bool icCurvesFromXml(LPIccCurve *pCurve, icUInt32Number nChannels, xmlNode *pNode, icConvertType nType, std::string &parseStr)
bool icMBBFromXml(CIccMBB *pMBB, xmlNode *pNode, icConvertType nType, std::string &parseStr)
bool icMatrixFromXml(CIccMatrix *pMatrix, xmlNode *pNode)
icFloatNumber icU16toF(icUInt16Number num)
void icXyzToPcs(icFloatNumber *XYZ)
icU16Fixed16Number icDtoUF(icFloatNumber num)
void icXyzFromPcs(icFloatNumber *XYZ)
Floating point encoding of XYZ in PCS is in range 0.0 to 1.0 (Note: X=1.0 is encoded as about 0....
icFloatNumber icUFtoD(icU16Fixed16Number num)
icFloatNumber icFtoD(icS15Fixed16Number num)
const icChar * icGetColorSigStr(icChar *pBuf, icUInt32Number nSig)
void icLabFromPcs(icFloatNumber *Lab)
Floating point encoding of Lab in PCS is in range 0.0 to 1.0.
void icLabToPcs(icFloatNumber *Lab)
icFloat16Number icFtoF16(icFloat32Number num)
icS15Fixed16Number icDtoF(icFloatNumber num)
icUInt16Number icFtoU16(icFloatNumber num)
icUInt32Number icGetSigVal(const icChar *pBuf)
icFloatNumber icF16toF(icFloat16Number num)
const icChar * icGetSigStr(icChar *pBuf, icUInt32Number nSig)
icMeasurementGeometry icGeNamedtMeasurementGeometryValue(const icChar *str)
const char * icUtf8ToAnsi(std::string &buf, const char *szSrc)
const std::string icGetDeviceAttrName(icUInt64Number devAttr)
icUInt32Number icXmlNodeCount3(xmlNode *pNode, const char *szNodeName1, const char *szNodeName2, const char *szNodeName3)
icColorantEncoding icGetColorantValue(const icChar *str)
icUInt32Number icXmlNodeCount(xmlNode *pNode, const char *szNodeName)
icUInt32Number icXmlGetHexDataSize(const char *szText)
icDateTimeNumber icGetDateTimeValue(const icChar *str)
const char * icUtf16ToUtf8(std::string &buf, const icUInt16Number *szSrc, int sizeSrc)
xmlAttr * icXmlFindAttr(xmlNode *pNode, const char *szAttrName)
xmlNode * icXmlFindNode(xmlNode *pNode, const char *szNodeName)
icUInt32Number icXmlGetHexData(void *pBuf, const char *szText, icUInt32Number nBufSize)
icTagTypeSignature icGetTypeNameTagSig(const icChar *szTagType)
icMeasurementFlare icGetNamedMeasurementFlareValue(const icChar *str)
const icChar * icGetStandardObserverName(icStandardObserver str)
const icChar * icGetTagSigTypeName(icTagTypeSignature tagTypeSig)
icUInt32Number icXmlDumpHexData(std::string &xml, std::string blanks, void *pBuf, icUInt32Number nBufSize)
icTagSignature icGetTagNameSig(const icChar *szName)
icUInt64Number icGetDeviceAttrValue(xmlNode *pNode)
const char * icFixXml(std::string &buf, const char *szStr)
icIlluminant icGetIlluminantValue(const icChar *str)
icMeasurementUnitSig icGetMeasurementValue(const icChar *str)
icStandardObserver icGetNamedStandardObserverValue(const icChar *str)
const char * icXmlAttrValue(xmlAttr *attr, const char *szDefault)
icSignature icXmlStrToSig(const char *szStr)
bool icCLUTToXml(std::string &xml, CIccCLUT *pCLUT, icConvertType nType, std::string blanks, bool bSaveGridPoints, const char *szExtraAttrs, const char *szName)
const char * icAnsiToUtf8(std::string &buf, const char *szSrc)
#define icXmlStrCmp(x, y)
unsigned int icUInt32Number
static bool GetArraySigName(std::string &arrayName, icArraySignature arrayTypeSig, bool bFillUnknown=true)
Function: GetArraySigName(structTypeSig) Get display name of structTypeSig.
static icArraySignature GetArraySig(const icChar *arrayName)
Function: GetArraySig(arrayName) Get signature associate with display name arrayName handler.
icUInt16Number GetOutputChannels() const
icUInt32Number NumPoints() const
void SetPrecision(icUInt8Number nPrecision)
icFloatNumber * GetData(int index)
bool Init(icUInt8Number nGridPoints, icUInt32Number nMaxSize=0, icUInt8Number nBytesPerPoint=4)
Name: CIccCLUT::Init.
virtual bool ParseXml(xmlNode *pNode, icConvertType nType, std::string &parseStr)=0
Data Class: CIccDictEntry.
bool SetValueLocalized(CIccTagMultiLocalizedUnicode *pValueLocalized)
Name: CIccDictEntry::SetValueLocalized.
bool SetNameLocalized(CIccTagMultiLocalizedUnicode *pNameLocalized)
Name: CIccDictEntry::SetNameLocalized.
CIccTagMultiLocalizedUnicode * GetValueLocalized()
CIccTagMultiLocalizedUnicode * GetNameLocalized()
bool SetValue(std::wstring sValue)
icInt32Number ReadFloat16Float(void *pBufFloat, icInt32Number nNum=1)
icInt32Number ReadFloat32Float(void *pBufFloat, icInt32Number nNum=1)
virtual icInt32Number GetLength()
virtual icInt32Number Read8(void *pBuf8, icInt32Number nNum=1)
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
icInt32Number ReadLine(void *pBuf8, icInt32Number nNum=256)
icInt32Number Read64(void *pBuf64, icInt32Number nNum=1)
const icChar * GetColorantEncoding(icColorantEncoding colorant)
const icChar * GetIlluminantName(icIlluminant val)
const icChar * GetMeasurementUnit(icSignature sig)
const icChar * GetMeasurementGeometryName(icMeasurementGeometry val)
const icChar * GetMeasurementFlareName(icMeasurementFlare val)
const icChar * GetTagTypeSigName(icTagTypeSignature sig)
const icChar * GetStandardObserverName(icStandardObserver val)
LPIccCurve * GetCurvesM() const
LPIccCurve * NewCurvesB()
Name: CIccMBB::NewCurvesB.
CIccMatrix * NewMatrix()
Name: CIccMBB::NewMatrix.
virtual bool IsInputMatrix()
icUInt8Number InputChannels() const
icUInt8Number OutputChannels() const
CIccCLUT * SetCLUT(CIccCLUT *clut)
Name: CIccMBB::SetCLUT.
LPIccCurve * GetCurvesB() const
LPIccCurve * NewCurvesM()
Name: CIccMBB::NewCurvesM.
LPIccCurve * NewCurvesA()
Name: CIccMBB::NewCurvesA.
CIccCLUT * GetCLUT() const
CIccMatrix * GetMatrix() const
LPIccCurve * GetCurvesA() const
void Init(icUInt8Number nInputChannels, icUInt8Number nOutputChannels)
Name: CIccMBB::Init.