72 #pragma warning( disable: 4786)
98#ifdef USEREFICCMAXNAMESPACE
103#define BRIEF_STRING_SIZE (1024)
168 if (m_nReserved != 0) {
172 sReport +=
" - Reserved Value must be zero.\n";
226 if (&UnknownTag ==
this)
279 if (!pIO->
Read32(&m_nType))
320 if (m_nSize && m_pData) {
343 sDescription =
"Unknown Tag Type of ";
344 sprintf(buf,
"%u Bytes.", m_nSize-4);
347 if (nVerboseness > 50) {
348 sDescription +=
"\n\nData Follows:\n";
350 icMemDump(sDescription, m_pData+4, m_nSize-4);
365 m_szText = (
icChar*)malloc(1);
382 m_szText = (
icChar*)malloc(1);
400 if (&TextTag ==
this)
403 m_szText = (
icChar*)malloc(1);
451 if (!pIO->
Read32(&m_nReserved))
456 icChar *pBuf = GetBuffer(nSize);
492 if (!pIO->
Write32(&m_nReserved))
518 sDescription +=
"Text Length = ";
519 if (m_szText && *m_szText) {
521 sprintf(buf,
"%zu bytes\n", strlen(m_szText));
524 sDescription +=
"0 (NULL)";
526 if (nVerboseness > 25) {
527 sDescription +=
"\"";
528 if (m_szText && *m_szText) {
531 sDescription += m_szText;
539 sDescription +=
"\n... <!truncated!>";
542 sDescription +=
"\"\n";
563 icChar *szBuf = GetBuffer(len);
565 strcpy(szBuf, szText);
602 if (m_nBufSize < nSize) {
606 m_szText[nSize] =
'\0';
628 if (nSize < m_nBufSize-1) {
630 m_nBufSize = nSize+1;
664 sReport += sSigPathName;
665 sReport +=
" - Tag must have at least seven text characters.\n";
671 sReport += sSigPathName;
672 sReport +=
" - Unknown Tag.\n";
676 for (i=0; m_szText[i] && i<(int)m_nBufSize; i++) {
677 if (m_szText[i]&0x80) {
679 sReport += sSigPathName;
680 sReport +=
" - Text does not contain just 7-bit data.\n";
687 sReport += sSigPathName;
688 sReport +=
" - Empty Tag.\n";
708 m_szText = (
icUChar*)malloc(1);
725 m_szText = (
icUChar*)malloc(1);
743 if (&TextTag ==
this)
746 m_szText = (
icUChar*)malloc(1);
793 if (!pIO->
Read32(&m_nReserved))
801 icUChar *pBuf = GetBuffer(nSize);
837 if (!pIO->
Write32(&m_nReserved))
863 sDescription +=
"UTF8 Length = ";
864 if (m_szText && *m_szText) {
866 sprintf(buf,
"%d bytes\n", m_nBufSize);
870 sDescription +=
"0 (NULL)";
872 if (nVerboseness > 25) {
873 sDescription +=
"\"";
874 if (m_szText && *m_szText) {
877 sDescription += (
icChar*)m_szText;
885 sDescription +=
"\n... <!truncated!>";
888 sDescription +=
"\"\n";
909 icUChar *szBuf = GetBuffer(len);
933 for (len=0; szText[len]; len++);
937 SetText((
const icUChar*)&text[0]);
973 if (m_nBufSize < nSize) {
977 m_szText[nSize] =
'\0';
1000 if (nSize < m_nBufSize-1) {
1002 m_nBufSize = nSize+1;
1030 sReport += sSigPathName;
1031 sReport +=
" - Empty Tag.\n";
1072 memcpy(m_pZipBuf, ITT.
GetBuffer(), m_nBufSize);
1093 memcpy(m_pZipBuf, ITT.
GetBuffer(), m_nBufSize);
1139 if (!pIO->
Read32(&m_nReserved))
1144 icUChar *pBuf = AllocBuffer(nSize);
1146 if (m_nBufSize && pBuf) {
1178 if (!pIO->
Write32(&m_nReserved))
1202 if (!GetText(str)) {
1203 sDescription +=
"Error! - Unable to decompress text data.\n";
1206 sDescription +=
"Warning! - Correcting for improperly encoded ";
1208 sDescription +=
" tag.\n\n";
1211 sDescription +=
"ZLib Compressed String=\"";
1212 sDescription += str;
1213 sDescription +=
"\"\n";
1216 sprintf(size,
"%d", m_nBufSize);
1217 sDescription +=
"BEGIN_COMPESSED_DATA[\"";
1218 sDescription += size;
1219 sDescription +=
"]\n";
1222 sDescription += str;
1223 sDescription +=
"\n";
1225 sDescription +=
"END_COMPRESSED_DATA\n";
1247 memset(&zstr, 0,
sizeof(zstr));
1248 unsigned char buf[32767] = { 0 };
1250 zstat = inflateInit(&zstr);
1252 if (zstat != Z_OK) {
1256 zstat = inflateReset(&zstr);
1258 if (zstat != Z_OK) {
1264 zstr.next_in = m_pZipBuf+4;
1265 zstr.avail_in = m_nBufSize-4;
1268 zstr.next_in = m_pZipBuf;
1269 zstr.avail_in = m_nBufSize;
1275 zstr.next_out = buf;
1276 zstr.avail_out =
sizeof(buf);
1278 zstat = inflate(&zstr, Z_SYNC_FLUSH);
1280 if (zstat != Z_OK && zstat != Z_STREAM_END) {
1285 n =
sizeof(buf) - zstr.avail_out;
1287 for (i = 0; i < n; i++) {
1290 }
while (zstat != Z_STREAM_END);
1315 icUtf8Vector compress;
1320 unsigned char buf[32767];
1321 memset(&zstr, 0,
sizeof(zstr));
1323 zstat = deflateInit(&zstr, Z_DEFAULT_COMPRESSION);
1325 if (zstat != Z_OK) {
1329 zstat = deflateReset(&zstr);
1330 zstr.next_in = (Bytef*)szText;
1331 zstr.avail_in = nSize;
1333 if (zstat != Z_OK) {
1340 zstr.next_out = buf;
1341 zstr.avail_out =
sizeof(buf);
1343 zstat = deflate(&zstr, Z_FINISH);
1345 if (zstat != Z_OK && zstat != Z_STREAM_END) {
1350 n =
sizeof(buf) - zstr.avail_out;
1352 for (i = 0; i < n; i++) {
1353 compress.push_back(buf[i]);
1355 }
while (zstat != Z_STREAM_END);
1362 for (i = 0; i < (int)m_nBufSize; i++) {
1363 pBuf[i] = compress[i];
1388 for (len=0; szText[len]; len++);
1392 return SetText((
const icUChar*)&text[0]);
1412 if (m_nBufSize != nSize) {
1422 m_pZipBuf = (
icUChar*)malloc(nSize);
1457 sReport += sSigPathName;
1458 sReport +=
" - Empty Tag.\n";
1464 if (!GetText(sText)) {
1466 sReport += sSigPathName;
1467 sReport +=
" - Unable to get text for tag (possibly corrupt compressed data).\n";
1472 sReport += sSigPathName;
1473 sReport +=
" - Improperly encoded ";
1475 sReport +=
" tag.\n";
1480 sReport += sSigPathName;
1481 sReport +=
" - Zip compression not supported by CMM - unable to validate text compression.\n";
1536 if (&TextTag ==
this)
1571 if (!m_szText || !m_nBufSize)
1574 for (n=0; n<m_nBufSize && m_szText[n]; n++);
1605 if (!pIO->
Read32(&m_nReserved))
1646 if (!pIO->
Write32(&m_nReserved))
1674 sDescription +=
"UTF16 Length = ";
1675 if (m_szText && *m_szText) {
1677 sprintf(buf,
"%d bytes\n", m_nBufSize);
1678 sDescription += buf;
1681 sDescription +=
"0 (NULL)";
1683 if (nVerboseness > 25) {
1684 sDescription +=
"\"";
1685 if (m_szText && *m_szText) {
1689 sDescription += GetText(s);
1696 sDescription += buf;
1697 sDescription +=
"\n... <!truncated!>";
1700 sDescription +=
"\"\n";
1723 icUtf8Vector::iterator c;
1725 if (str.size()>2 && (str[0]==0xff && str[1]==0xfe)) {
1728 for (; c!=str.end(); c++)
1753 for (n=0; szText[n]; n++);
1758 memcpy(szBuf, szText, len*
sizeof(
icUChar16));
1783 if (str[0]==0xfeff) {
1791 memcpy(m_szText, &str[pos], nSize*
sizeof(
icUChar));
1828 if (m_nBufSize < nSize) {
1831 m_szText[nSize] = 0;
1851 if (nSize < m_nBufSize-1) {
1853 m_nBufSize = nSize+1;
1881 sReport += sSigPathName;
1882 sReport +=
" - Empty Tag.\n";
1901 m_szText = (
icChar*)malloc(1);
1906 m_uzUnicodeText[0] = 0;
1908 m_nUnicodeLanguageCode = 0;
1912 memset(m_szScriptText, 0,
sizeof(m_szScriptText));
1914 m_bInvalidScript =
false;
1936 m_szText = (
icChar*)malloc(m_nASCIISize *
sizeof(
icChar));
1941 m_szText = (
icChar*)calloc(m_nASCIISize,
sizeof(
icChar));
1945 if (m_nUnicodeSize) {
1952 m_uzUnicodeText[0] = 0;
1955 memcpy(m_szScriptText, ITTD.
m_szScriptText,
sizeof(m_szScriptText));
1973 if (&TextDescTag ==
this)
1985 m_szText = (
icChar*)calloc(m_nASCIISize,
sizeof(
icChar));
1986 memcpy(m_szText, TextDescTag.
m_szText, m_nASCIISize*
sizeof(
icChar));
1990 m_szText = (
icChar*)calloc(m_nASCIISize,
sizeof(
icChar));
1994 if (m_uzUnicodeText)
1995 free(m_uzUnicodeText);
1996 if (m_nUnicodeSize) {
2003 m_uzUnicodeText[0] = 0;
2006 memcpy(m_szScriptText, TextDescTag.
m_szScriptText,
sizeof(m_szScriptText));
2024 free(m_uzUnicodeText);
2047 nEnd = pIO->
Tell() + size;
2055 !pIO->
Read32(&m_nReserved) ||
2062 icChar *pBuf = GetBuffer(nSize);
2077 if (!pIO->
Read32(&m_nUnicodeLanguageCode) ||
2082 if (nSize == 0xFFFFFFFF)
2100 if (!pIO->
Read16(&m_nScriptCode) ||
2101 !pIO->
Read8(&m_nScriptSize))
2105 m_nScriptSize >
sizeof(m_szScriptText))
2108 int nScriptLen = pIO->
Read8(m_szScriptText, 67);
2113 if (nScriptLen<67) {
2114 memset(&m_szScriptText[0], 0, 67-nScriptLen);
2115 m_bInvalidScript =
true;
2143 !pIO->
Write32(&m_nReserved) ||
2152 if (!pIO->
Write32(&m_nUnicodeLanguageCode))
2155 if (m_nUnicodeSize > 1) {
2156 if (!pIO->
Write32(&m_nUnicodeSize) ||
2165 if (!pIO->
Write16(&m_nScriptCode) ||
2166 !pIO->
Write8(&m_nScriptSize) ||
2167 pIO->
Write8(m_szScriptText, 67)!= 67)
2170 m_bInvalidScript =
false;
2187 sDescription +=
"TextDescription Length = ";
2188 if (m_szText && *m_szText) {
2190 sprintf(buf,
"%zu bytes\n", strlen(m_szText));
2191 sDescription += buf;
2194 sDescription +=
"0 (NULL)";
2196 if (nVerboseness > 25) {
2197 sDescription +=
"\"";
2198 if (m_szText && *m_szText) {
2201 sDescription += m_szText;
2208 sDescription += buf;
2209 sDescription +=
"\n... <!truncated!>";
2212 sDescription +=
"\"\n";
2229 m_bInvalidScript =
false;
2235 icChar *szBuf = GetBuffer(len);
2237 strcpy(szBuf, szText);
2274 if (m_nASCIISize < nSize) {
2277 m_szText[nSize] =
'\0';
2279 m_nASCIISize = nSize;
2297 if (nSize < m_nASCIISize-1) {
2299 m_nASCIISize = nSize+1;
2318 if (m_nUnicodeSize < nSize) {
2321 m_uzUnicodeText[nSize] = 0;
2323 m_nUnicodeSize = nSize;
2326 return m_uzUnicodeText;
2340 for (i=0; m_uzUnicodeText[i]; i++);
2344 if (nSize < m_nUnicodeSize-1) {
2346 m_nUnicodeSize = nSize+1;
2372 if (m_nScriptSize>67) {
2374 sReport += sSigPathName;
2375 sReport +=
" - ScriptCode count must not be greater than 67.\n";
2380 if (m_bInvalidScript) {
2382 sReport += sSigPathName;
2383 sReport +=
" - ScriptCode must contain 67 bytes.\n";
2401 m_nSig = 0x3f3f3f3f;
2435 if (&SignatureTag ==
this)
2438 m_nSig = SignatureTag.
m_nSig;
2478 m_nSig = 0x3f3f3f3f;
2485 if (!pIO->
Read32(&m_nReserved))
2488 if (!pIO->
Read32(&m_nSig))
2517 if (!pIO->
Write32(&m_nReserved))
2542 sDescription +=
"\n";
2602 sReport += sSigPathName;
2603 sprintf(buf,
" - %s: Unknown Technology.\n", Info.
GetSigName(m_nSig));
2618 sReport += sSigPathName;
2619 sprintf(buf,
" - %s: Unknown Reference Medium Gamut.\n", Info.
GetSigName(m_nSig));
2637 sReport += sSigPathName;
2638 sprintf(buf,
" - %s: Unknown Colorimetric Intent Image State.\n", Info.
GetSigName(m_nSig));
2662 m_nSize = nSize <1 ? 1 : nSize;
2664 m_nDeviceCoords = nDeviceCoords;
2665 if (nDeviceCoords<0)
2666 m_nDeviceCoords = nDeviceCoords = 0;
2668 if (nDeviceCoords>0)
2671 m_szPrefix[0] =
'\0';
2672 m_szSufix[0] =
'\0';
2676 m_nColorEntrySize = 32 + (3 + 1 + nDeviceCoords)*
sizeof(
icFloatNumber);
2704 memcpy(m_szPrefix, ITNC.
m_szPrefix,
sizeof(m_szPrefix));
2705 memcpy(m_szSufix, ITNC.
m_szSufix,
sizeof(m_szSufix));
2708 memcpy(m_NamedColor, ITNC.
m_NamedColor, m_nColorEntrySize*m_nSize);
2726 if (&NamedColor2Tag ==
this)
2732 m_nSize = NamedColor2Tag.
m_nSize;
2734 m_csPCS = NamedColor2Tag.
m_csPCS;
2737 memcpy(m_szPrefix, NamedColor2Tag.
m_szPrefix,
sizeof(m_szPrefix));
2738 memcpy(m_szSufix, NamedColor2Tag.
m_szSufix,
sizeof(m_szSufix));
2743 memcpy(m_NamedColor, NamedColor2Tag.
m_NamedColor, m_nColorEntrySize*m_nSize);
2765 delete [] m_NamedLab;
2783 if (nDeviceCoords<0)
2784 nDeviceCoords = m_nDeviceCoords;
2788 if (nDeviceCoords>0)
2801 for (i=0; i<nCopy; i++) {
2809 for (j=0; j<nCoords; j++) {
2815 m_nColorEntrySize = nColorEntrySize;
2817 m_NamedColor = pNamedColor;
2819 m_nDeviceCoords = nNewCoords;
2839 strncpy(m_szPrefix, szPrefix,
sizeof(m_szPrefix));
2840 m_szPrefix[
sizeof(m_szPrefix)-1]=
'\0';
2856 strncpy(m_szSufix, szSufix,
sizeof(m_szSufix));
2857 m_szSufix[
sizeof(m_szSufix)-1]=
'\0';
2885 sizeof(m_szPrefix) +
2887 if (nTagHdrSize > size)
2895 !pIO->
Read32(&m_nReserved) ||
2896 !pIO->
Read32(&m_nVendorFlags) ||
2898 !pIO->
Read32(&nCoords) ||
2899 pIO->
Read8(m_szPrefix,
sizeof(m_szPrefix))!=
sizeof(m_szPrefix) ||
2900 pIO->
Read8(m_szSufix,
sizeof(m_szSufix))!=
sizeof(m_szSufix)) {
2904 size -= nTagHdrSize;
2911 if (!SetSize(nNum, nCoords))
2917 for (i=0; i<nNum; i++) {
2955 if (!pIO->
Write32(&m_nReserved))
2958 if (!pIO->
Write32(&m_nVendorFlags))
2964 if (!pIO->
Write32(&m_nDeviceCoords))
2967 if (!pIO->
Write8(m_szPrefix,
sizeof(m_szPrefix)))
2970 if (!pIO->
Write8(m_szSufix,
sizeof(m_szSufix)))
2976 for (i=0; i<m_nSize; i++) {
2980 if (m_nDeviceCoords) {
3003 icChar buf[128], szColorVal[40], szColor[40];
3008 sDescription.reserve(sDescription.size() + m_nSize*79);
3010 sprintf(buf,
"BEGIN_NAMED_COLORS flags=%08x %u %u\n", m_nVendorFlags, m_nSize, m_nDeviceCoords);
3011 sDescription += buf;
3013 sprintf(buf,
"Prefix=\"%s\"\n", m_szPrefix);
3014 sDescription += buf;
3016 sprintf(buf,
"Sufix= \"%s\"\n", m_szSufix);
3017 sDescription += buf;
3019 for (i=0; i<m_nSize; i++) {
3020 sprintf(buf,
"Color[%u]: %s :", i, pNamedColor->
rootName);
3021 sDescription += buf;
3025 pcsCoord[j] = pNamedColor->
pcsCoords[j];
3029 pcsCoord[j] = (
icFloatNumber)(pcsCoord[j] * 65535.0 / 65280.0);
3032 for (j=0; j<3; j++) {
3035 sprintf(buf,
" %s=%s", szColor, szColorVal);
3036 sDescription += buf;
3038 if (m_nDeviceCoords) {
3039 sDescription +=
" :";
3040 for (j=0; j<m_nDeviceCoords; j++) {
3043 sprintf(buf,
" %s=%s", szColor, szColorVal);
3044 sDescription += buf;
3047 sDescription +=
"\n";
3068 m_csDevice = csDevice;
3087 if (
stricmp(m_NamedColor[i].rootName,szRootColor) == 0)
3106 delete [] m_NamedLab;
3132 pLab = m_NamedLab[i].
lab;
3133 pXYZ = m_NamedColor[i].pcsCoords;
3140 pLab = m_NamedLab[i].lab;
3141 Lab2ToLab4(pLab, m_NamedColor[i].pcsCoords);
3176 Lab2ToLab4(pLabIn, pPCS);
3184 pLab = m_NamedLab[i].lab;
3193 if (dCalcDE<dMinDE) {
3194 if (dCalcDE<dLeastDE) {
3201 return leastDEindex;
3221 InitFindCachedPCSColor();
3223 return FindCachedPCSColor(pPCS, dMinDE);
3241 std::string sColorName;
3246 if (strncmp(szColor, m_szPrefix, j))
3253 if (strncmp(szColor+(i-j), m_szSufix, j))
3259 sColorName = m_szPrefix;
3260 sColorName += m_NamedColor[i].rootName;
3261 sColorName += m_szSufix;
3263 if (strcmp(sColorName.c_str(),szColor) == 0)
3285 if (!m_nDeviceCoords)
3294 pDevOut = m_NamedColor[i].deviceCoords;
3297 dCalcDiff += (pDevColor[j]-pDevOut[j])*(pDevColor[j]-pDevOut[j]);
3302 dLeastDiff = dCalcDiff;
3306 if (dCalcDiff<dLeastDiff) {
3307 dLeastDiff = dCalcDiff;
3314 return leastDiffindex;
3337 sColorName += m_szPrefix;
3339 sColorName += pNamedColor->
rootName;
3340 sColorName += m_szSufix;
3452 sReport += sSigPathName;
3453 sReport +=
" - Empty tag!\n";
3457 if (m_nDeviceCoords) {
3460 if (m_nDeviceCoords != nCoords) {
3462 sReport += sSigPathName;
3463 sReport +=
" - Incorrect number of device co-ordinates.\n";
3469 sReport += sSigPathName;
3470 sReport +=
" - Tag validation incomplete: Pointer to profile unavailable.\n";
3532 if (&XYZTag ==
this)
3591 if (!pIO->
Read32(&m_nReserved))
3630 if (!pIO->
Write32(&m_nReserved))
3657 if (m_nSize == 1 ) {
3658 sprintf(buf,
"X=%.4lf, Y=%.4lf, Z=%.4lf\n",
icFtoD(m_XYZ[0].X),
icFtoD(m_XYZ[0].Y),
icFtoD(m_XYZ[0].Z));
3659 sDescription += buf;
3663 sDescription.reserve(sDescription.size() + m_nSize*79);
3665 for (i=0; i<m_nSize; i++) {
3666 sprintf(buf,
"value[%u]: X=%.4lf, Y=%.4lf, Z=%.4lf\n", i,
icFtoD(m_XYZ[i].X),
icFtoD(m_XYZ[i].Y),
icFtoD(m_XYZ[i].Z));
3667 sDescription += buf;
3695 if (bZeroNew && m_nSize < nSize) {
3696 memset(&m_XYZ[m_nSize], 0, (nSize-m_nSize)*
sizeof(
icXYZNumber));
3727 sReport += sSigPathName;
3728 sReport +=
" - Empty tag.\n";
3734 for (
int i=0; i<(int)m_nSize; i++) {
3755 m_nChannels = nSize;
3793 if (&ChromTag ==
this)
3854 if (!pIO->
Read32(&m_nReserved))
3857 if (!pIO->
Read16(&nChannels) ||
3858 !pIO->
Read16(&m_nColorantType))
3864 if (nNum < nChannels)
3904 if (!pIO->
Write32(&m_nReserved))
3907 if (!pIO->
Write16(&m_nChannels))
3910 if (!pIO->
Write16(&m_nColorantType))
3939 sprintf(buf,
"Number of Channels : %u\n", m_nChannels);
3940 sDescription += buf;
3943 sDescription += buf;
3945 for (i=0; i<m_nChannels; i++) {
3946 sprintf(buf,
"value[%u]: x=%.3lf, y=%.3lf\n", i,
icUFtoD(m_xy[i].x),
icUFtoD(m_xy[i].y));
3947 sDescription += buf;
3965 if (m_nChannels == nSize)
3975 if (bZeroNew && nSize > m_nChannels) {
3979 m_nChannels = nSize;
4005 if (m_nColorantType) {
4007 if (m_nChannels!=3) {
4009 sReport += sSigPathName;
4010 sReport +=
" - Number of device channels must be three.\n";
4014 switch(m_nColorantType) {
4021 sReport += sSigPathName;
4022 sReport +=
" - Chromaticity data does not match specification.\n";
4034 sReport += sSigPathName;
4035 sReport +=
" - Chromaticity data does not match specification.\n";
4047 sReport += sSigPathName;
4048 sReport +=
" - Chromaticity data does not match specification.\n";
4060 sReport += sSigPathName;
4061 sReport +=
" - Chromaticity data does not match specification.\n";
4070 sReport += sSigPathName;
4071 sReport +=
" - Invalid colorant type encoding.\n";
4094 m_nColorPrimaries = 0;
4095 m_nTransferCharacteristics = 0;
4096 m_nMatrixCoefficients = 0;
4097 m_nVideoFullRangeFlag = 0;
4129 if (&cicpTag ==
this)
4184 if (!pIO->
Read32(&m_nReserved))
4187 if (!pIO->
Read8(&m_nColorPrimaries) ||
4188 !pIO->
Read8(&m_nTransferCharacteristics) ||
4189 !pIO->
Read8(&m_nMatrixCoefficients) ||
4190 !pIO->
Read8(&m_nVideoFullRangeFlag))
4220 if (!pIO->
Write32(&m_nReserved))
4223 if (!pIO->
Write8(&m_nColorPrimaries) ||
4224 !pIO->
Write8(&m_nTransferCharacteristics) ||
4225 !pIO->
Write8(&m_nMatrixCoefficients) ||
4226 !pIO->
Write8(&m_nVideoFullRangeFlag))
4237 {
"1-1-0-0",
"RGB narrow range representation specified in Recommendation ITU-R BT.709-6, Item 3.4"},
4238 {
"1-13-0-1",
"RGB full range representation specified in IEC 61966-2-1 sRGB"},
4239 {
"9-14-0-0",
"R’G’B’ narrow range representation specified in Recommendation ITU-R BT.2020-2, Table 5"},
4240 {
"9-16-0-0",
"PQ R’G’B’ narrow range representation specified in Recommendation ITU-R BT.2100-2, Table 9"},
4241 {
"9-16-0-1",
"PQ R’G’B’ full range representation specified in Recommendation ITU-R BT.2100-2, Table 9"},
4242 {
"9-18-0-0 ",
"HLG R’G’B’ narrow range representation specified in Recommendation ITU-R BT.2100-2 "},
4243 {
"9-18-0-1",
"HLG R’G’B’ full range representation specified in Recommendation ITU-R BT.2100-2"},
4244 {
"1-1-1-0 ",
"YCbCr representation specified in Recommendation ITU-R BT.709-6, Item 3.4"},
4245 {
"9-14-9-0",
"Y’Cb’Cr’ narrow range representation specified in Recommendation ITU-R BT.2020-2, Table 5"},
4246 {
"9-16-9-0",
"PQ Y’Cb’Cr’ narrow range representation specified in Recommendation ITU-R BT.2100-2, Table 9"},
4247 {
"9-16-14-0",
"PQ ICtCp narrow range representation specified in Recommendation ITU-R BT.2100-2, Table 9"},
4248 {
"9-18-9-0",
"HLG Y’Cb’Cr’ narrow range representation specified in Recommendation ITU-R BT.2100-2"},
4249 {
"9-18-14-0 ",
"HLG ICtCp narrow range representation specified in Recommendation ITU-R BT.2100-2"},
4266 sprintf(
code,
"%u-%u-%u-%u", m_nColorPrimaries, m_nTransferCharacteristics, m_nMatrixCoefficients, m_nVideoFullRangeFlag);
4268 sprintf(buf,
"ColorPrimaries=%u\r\n", m_nColorPrimaries);
4269 sDescription += buf;
4271 sprintf(buf,
"TransferCharacteristics=%u\r\n", m_nTransferCharacteristics);
4272 sDescription += buf;
4274 sprintf(buf,
"MatrixCoefficients=%u\r\n", m_nMatrixCoefficients);
4275 sDescription += buf;
4277 sprintf(buf,
"VideoFullRangeFlag=%u\r\n\r\n", m_nVideoFullRangeFlag);
4278 sDescription += buf;
4280 sprintf(buf,
"Combined Code: %s\r\n",
code);
4281 sDescription += buf;
4288 sDescription +=
"Interpretation: ";
4293 sDescription +=
"unknown";
4295 sDescription +=
"\r\n";
4314 colorPrimaries = m_nColorPrimaries;
4315 transferCharacteristics = m_nTransferCharacteristics;
4316 matrixCoefficients = m_nMatrixCoefficients;
4317 videoFullRangeFlag = m_nVideoFullRangeFlag;
4336 m_nColorPrimaries = colorPrimaries;
4337 m_nTransferCharacteristics = transferCharacteristics;
4338 m_nMatrixCoefficients =matrixCoefficients;
4339 m_nVideoFullRangeFlag = videoFullRangeFlag;
4368 if ((pProfile->m_Header.colorSpace ==
icSigRgbData || pProfile->m_Header.colorSpace ==
icSigXYZData) && m_nMatrixCoefficients) {
4370 sReport += sSigPathName;
4371 sReport +=
" - CICP MatrixCoefficients not zero for RGB or XYZ colour space data.\r\n";
4375 if (pProfile->m_Header.colorSpace ==
icSigYCbCrData && !m_nMatrixCoefficients) {
4377 sReport += sSigPathName;
4378 sReport +=
" - CICP MatrixCoefficients zero for YCbCr colour space data.\r\n";
4400 m_nSize = nNumMatrices;
4401 m_nChannelsPerMatrix = nChannelsPerMatrix;
4406 if (nChannelsPerMatrix<4)
4407 m_nChannelsPerMatrix = 4;
4409 m_RawData = (
icUInt8Number*)calloc(m_nSize, GetBytesPerMatrix());
4411 m_bNonZeroPadding =
false;
4431 m_RawData = (
icUInt8Number*)calloc(m_nSize, GetBytesPerMatrix());
4432 memcpy(m_RawData, ITSMA.
m_RawData, m_nSize*GetBytesPerMatrix());
4458 m_RawData = (
icUInt8Number*)calloc(m_nSize, m_nChannelsPerMatrix);
4459 memcpy(m_RawData, ITSMA.
m_RawData, m_nSize*GetBytesPerMatrix());
4518 !pIO->
Read32(&m_nReserved) ||
4519 !pIO->
Read16(&nChannels) ||
4520 !pIO->
Read16(&nMatrixType) ||
4521 !pIO->
Read32(&nNumMatrices))
4528 Reset(nNumMatrices, nChannels);
4529 nBytesPerMatrix = GetBytesPerMatrix();
4539 m_bNonZeroPadding =
false;
4542 for (i=0; i<(int)m_nSize; i++) {
4549 if (pIO->
Read16(pMatrix, 2)!=2) {
4584 nAligned = ((pos+3)/4)*4;
4585 if (nAligned != pos) {
4590 char zbuf[3] = { 0 };
4591 if (pIO->
Read8(&zbuf[0], n)!=n)
4593 for (j=0; j<(int)n; j++) {
4595 m_bNonZeroPadding =
true;
4602 switch(m_nMatrixType) {
4649 nAligned = ((pos+3)/4)*4;
4650 if (nAligned != pos) {
4656 if (pIO->
Read8(&zbuf[0], n)!=n)
4658 for (j=0; j<(int)n; j++) {
4660 m_bNonZeroPadding =
true;
4669 for (i=0; i<(int)nSizeLeft; i++) {
4670 if (!pIO->
Read8(&b))
4673 m_bNonZeroPadding =
true;
4704 !pIO->
Write32(&m_nReserved) ||
4705 !pIO->
Write16(&m_nChannelsPerMatrix) ||
4715 for (i=0; i<(int)m_nSize; i++) {
4722 if (pIO->
Write16(pMatrix, nRows+3)!=nRows+3 ||
4723 pIO->
Write16(mtx.GetColumnsForRow(0), mtx.GetNumEntries())!=mtx.GetNumEntries()) {
4730 switch(m_nMatrixType) {
4732 if (pIO->
WriteUInt8Float(mtx.GetData()->getPtr(), mtx.GetNumEntries())!=mtx.GetNumEntries()) {
4737 if (pIO->
WriteUInt16Float(mtx.GetData()->getPtr(), mtx.GetNumEntries())!=mtx.GetNumEntries()) {
4742 if (pIO->
WriteFloat16Float(mtx.GetData()->getPtr(), mtx.GetNumEntries())!=mtx.GetNumEntries()) {
4747 if (pIO->
WriteFloat32Float(mtx.GetData()->getPtr(), mtx.GetNumEntries())!=mtx.GetNumEntries()) {
4777 sDescription +=
"Begin_SparseMatrix_Array\n";
4778 sprintf(buf,
"OutputChannels = %d\n", m_nChannelsPerMatrix);
4779 sDescription += buf;
4780 sprintf(buf,
"MatrixType = %d\n", m_nMatrixType);
4781 sDescription += buf;
4785 for (i=0; i<(int)m_nSize; i++) {
4788 sprintf(buf,
"\nBegin_Matrix_%d\n", i);
4789 sDescription += buf;
4793 for (r=0; r<mtx.
Rows(); r++) {
4796 sprintf(buf,
"Row%d:", r);
4797 sDescription += buf;
4799 for (c=rs; c<re; c++) {
4800 sprintf(buf,
" (%d, %.4lf)", cols[c], mtx.
GetData()->
get(c));
4801 sDescription += buf;
4805 sprintf(buf,
"End_Matrix_%d\n", i);
4806 sDescription += buf;
4808 sDescription +=
"\nEnd_SparseMatrix_Array\n";
4830 switch(m_nMatrixType) {
4838 sReport += sSigPathName;
4839 sReport +=
" - Invalid Sparse Matrix Type.\n";
4844 bool bCheckPCS=
false;
4853 if (bCheckPCS && pProfile) {
4856 sReport += sSigPathName;
4857 sReport +=
" - SparseMatrix data incompatible with spectral PCS.\n";
4862 sReport += sSigPathName;
4863 sReport +=
" - SparseMatrix Output channels doesn't match spectral PCS channels.\n";
4868 if (m_bNonZeroPadding) {
4870 sReport += sSigPathName;
4871 sReport +=
" - Non zero padding in matrices used.\n";
4877 sReport += sSigPathName;
4878 sReport +=
" - No Matrices Defined.\n";
4885 sReport += sSigPathName;
4886 sReport +=
" - Data dont defined for matrices\n";
4904 for (i=0; i<(int)m_nSize; i++) {
4906 if (mtx.
Rows() != nRows || mtx.
Cols() != nCols) {
4908 sReport += sSigPathName;
4909 sprintf(buf,
" - Matrix[%d] doesn't have matching rows and columns.\n", i);
4916 sReport += sSigPathName;
4917 sprintf(buf,
" - Matrix[%d] entries exceeds number supported by Output channels.\n", i);
4924 sReport += sSigPathName;
4925 sprintf(buf,
" - Matrix[%d] has an invalid matrix structure.\n", i);
4930 if (i<(
int)(m_nSize-1)) {
4934 umtx.
Init(nRows, nCols);
4935 if (!umtx.
Union(mtx, mtx2)) {
4937 sReport += sSigPathName;
4938 sprintf(buf,
" - Interpolation from Matrix[%d] exceeds number of supported Output channels.\n", i);
4964 if (nNumMatrices==m_nSize && nChannelsPerMatrix==m_nChannelsPerMatrix)
4967 m_nSize = nNumMatrices;
4968 m_nChannelsPerMatrix = nChannelsPerMatrix;
4979 memset(m_RawData, 0, nSize);
4997 if (nIndex<0 || nIndex>(
int)m_nSize) {
5012 if (nVectorSize!=nBytesPerMatrix)
5014 if (nStart % nBytesPerMatrix != 0)
5017 if (nStart / nBytesPerMatrix > m_nSize)
5020 memcpy(DstVector, m_RawData+nStart, nVectorSize);
5041 if (!nMatrix || nVectorSize != GetBytesPerMatrix())
5046 else if (nMatrix<=1)
5058 if (iPos == nMatrix-1) {
5071 lo = &m_RawData[(iPos-1)*nVectorSize];
5072 hi = &lo[nVectorSize];
5076 lo = &m_RawData[iPos*nVectorSize];
5077 hi = &lo[nVectorSize];
5087 if (!dst.
Interp(1.0f-x, mlo, x, mhi))
5124template <
class T, icTagTypeSignature Tsig>
5130 m_Num = (T*)calloc(nSize,
sizeof(T));
5144template <
class T, icTagTypeSignature Tsig>
5148 m_Num = (T*)calloc(m_nSize,
sizeof(T));
5149 memcpy(m_Num, ITFN.
m_Num, m_nSize*
sizeof(T));
5163template <
class T, icTagTypeSignature Tsig>
5173 m_Num = (T*)calloc(m_nSize,
sizeof(T));
5174 memcpy(m_Num, ITFN.
m_Num, m_nSize*
sizeof(T));
5189template <
class T, icTagTypeSignature Tsig>
5204template <
class T, icTagTypeSignature Tsig>
5208 return "CIccTagS15Fixed16";
5210 return "CIccTagU16Fixed16";
5228template <
class T, icTagTypeSignature Tsig>
5245 if (!pIO->
Read32(&m_nReserved))
5250 if (!SetSize(nSize))
5273template <
class T, icTagTypeSignature Tsig>
5284 if (!pIO->
Write32(&m_nReserved))
5303template <
class T, icTagTypeSignature Tsig>
5308 if (m_nSize == 1 ) {
5310 sprintf(buf,
"Value = %.4lf\n",
icFtoD(m_Num[0]));
5312 sprintf(buf,
"Value = %.4lf\n",
icUFtoD(m_Num[0]));
5313 sDescription += buf;
5319 sDescription +=
"Matrix Form:\n";
5322 sDescription +=
"\nArrayForm:\n";
5324 sDescription.reserve(sDescription.size() + m_nSize*79);
5326 for (i=0; i<m_nSize; i++) {
5328 sprintf(buf,
"Value[%u] = %8.4lf\n", i,
icFtoD(m_Num[i]));
5330 sprintf(buf,
"Value[%u] = %8.4lf\n", i,
icUFtoD(m_Num[i]));
5331 sDescription += buf;
5347template <
class T, icTagTypeSignature Tsig>
5353 m_Num = (T*)
icRealloc(m_Num, nSize*
sizeof(T));
5360 if (bZeroNew && m_nSize < nSize) {
5361 memset(&m_Num[m_nSize], 0, (nSize-m_nSize)*
sizeof(T));
5379template <
class T, icTagTypeSignature Tsig>
5382 if (nVectorSize+nStart >m_nSize)
5389 for (i=0; i<m_nSize; i++) {
5394 for (i=0; i<m_nSize; i++) {
5416template <
class T, icTagTypeSignature Tsig>
5427 else if (nVector<=1)
5439 if (iPos == nVector-1) {
5452 lo = &m_Num[(iPos-1)*nVectorSize];
5453 hi = &lo[nVectorSize];
5457 lo = &m_Num[iPos*nVectorSize];
5458 hi = &lo[nVectorSize];
5466 for (i=0; i<m_nSize; i++) {
5471 for (i=0; i<m_nSize; i++) {
5478 for (i=0; i<m_nSize; i++) {
5483 for (i=0; i<m_nSize; i++) {
5506template <
class T, icTagTypeSignature Tsig>
5524 bNoZero = (lv!=0.0);
5527 DstPos = val/lv - 1.0f;
5532 for (i=1; i<m_nSize; i++, lv=nv) {
5544 DstPos = (val-lv)/(nv-lv) + i - 1.0f;
5568template <
class T, icTagTypeSignature Tsig>
5574 m_Num = (T*)calloc(nSize,
sizeof(T));
5588template <
class T, icTagTypeSignature Tsig>
5593 m_Num = (T*)calloc(m_nSize,
sizeof(T));
5594 memcpy(m_Num, ITNum.
m_Num, m_nSize *
sizeof(T));
5608template <
class T, icTagTypeSignature Tsig>
5616 m_Num = (T*)calloc(m_nSize,
sizeof(T));
5617 memcpy(m_Num, ITNum.
m_Num, m_nSize *
sizeof(T));
5632template <
class T, icTagTypeSignature Tsig>
5647template <
class T, icTagTypeSignature Tsig>
5651 return "CIccTagUInt8";
5653 return "CIccTagUInt16";
5655 return "CIccTagUInt32";
5657 return "CIccTagUInt64";
5659 return "CIccTagNum<>";
5677template <
class T, icTagTypeSignature Tsig>
5694 if (!pIO->
Read32(&m_nReserved))
5699 if (!SetSize(nSize))
5738template <
class T, icTagTypeSignature Tsig>
5749 if (!pIO->
Write32(&m_nReserved))
5785template <
class T, icTagTypeSignature Tsig>
5790 if (m_nSize == 1 ) {
5791 switch (
sizeof(T)) {
5793 sprintf(buf,
"Value = %u (0x02%x)\n", m_Num[0], m_Num[0]);
5796 sprintf(buf,
"Value = %u (0x04%x)\n", m_Num[0], m_Num[0]);
5799 sprintf(buf,
"Value = %u (0x08%x)\n", m_Num[0], m_Num[0]);
5802 sprintf(buf,
"Value = %u (0x016%x)\n", m_Num[0], m_Num[0]);
5805 sprintf(buf,
"Value = %u (0x%x)\n", m_Num[0], m_Num[0]);
5808 sDescription += buf;
5812 sDescription.reserve(sDescription.size() + m_nSize*79);
5814 for (i=0; i<m_nSize; i++) {
5815 switch (
sizeof(T)) {
5817 sprintf(buf,
"Value = %u (0x02%x)\n", m_Num[i], m_Num[i]);
5820 sprintf(buf,
"Value = %u (0x04%x)\n", m_Num[i], m_Num[i]);
5823 sprintf(buf,
"Value = %u (0x08%x)\n", m_Num[i], m_Num[i]);
5826 sprintf(buf,
"Value = %u (0x016%x)\n", m_Num[i], m_Num[i]);
5829 sprintf(buf,
"Value = %u (0x%x)\n", m_Num[i], m_Num[i]);
5832 sDescription += buf;
5837template <
class T, icTagTypeSignature Tsig>
5849 sReport += sSigPathName;
5850 sReport +=
" - Number of material default values does not match MCS in header.\n";
5865 if (m_nSize == 1 ) {
5866 sprintf(buf,
"Value = %llu (0x016%llx)\n", m_Num[0], m_Num[0]);
5867 sDescription += buf;
5871 sDescription.reserve(sDescription.size() + m_nSize*79);
5873 for (i=0; i<m_nSize; i++) {
5874 sprintf(buf,
"Value = %llu (0x016%llx)\n", m_Num[i], m_Num[i]);
5875 sDescription += buf;
5894template <
class T, icTagTypeSignature Tsig>
5900 m_Num = (T*)
icRealloc(m_Num, nSize*
sizeof(T));
5907 if (bZeroNew && m_nSize < nSize) {
5908 memset(&m_Num[m_nSize], 0, (nSize-m_nSize)*
sizeof(T));
5926template <
class T, icTagTypeSignature Tsig>
5929 if (nVectorSize+nStart >m_nSize)
5936 for (i=0; i<m_nSize; i++) {
5941 for (i=0; i<m_nSize; i++) {
5976template <
class T, icTagTypeSignature Tsig>
5987 else if (nVector<=1)
5999 if (iPos == nVector-1) {
6012 lo = &m_Num[(iPos-1)*nVectorSize];
6013 hi = &lo[nVectorSize];
6017 lo = &m_Num[iPos*nVectorSize];
6018 hi = &lo[nVectorSize];
6026 for (i=0; i<m_nSize; i++) {
6031 for (i=0; i<m_nSize; i++) {
6038 for (i=0; i<m_nSize; i++) {
6043 for (i=0; i<m_nSize; i++) {
6069template <
class T, icTagTypeSignature Tsig>
6089 bNoZero = (lv!=0.0);
6092 DstPos = val/lv - 1.0f;
6097 for (i=1; i<m_nSize; i++, lv=nv) {
6111 DstPos = (val-lv)/(nv-lv) + i - 1.0f;
6161template <
class T, icTagTypeSignature Tsig>
6167 m_Num = (T*)calloc(nSize,
sizeof(T));
6181template <
class T, icTagTypeSignature Tsig>
6186 m_Num = (T*)calloc(m_nSize,
sizeof(T));
6187 memcpy(m_Num, ITNum.
m_Num, m_nSize *
sizeof(T));
6201template <
class T, icTagTypeSignature Tsig>
6209 m_Num = (T*)calloc(m_nSize,
sizeof(T));
6210 memcpy(m_Num, ITNum.
m_Num, m_nSize *
sizeof(T));
6225template <
class T, icTagTypeSignature Tsig>
6240template <
class T, icTagTypeSignature Tsig>
6244 return "CIccFlaot16";
6246 return "CIccFloat32";
6248 return "CIccFloat64";
6250 return "CIccTagFloatNum<>";
6268template <
class T, icTagTypeSignature Tsig>
6293 if (!pIO->
Read32(&m_nReserved))
6299 if (!SetSize(nSize))
6308 if (!SetSize(nSize))
6317 if (!SetSize(nSize))
6343template <
class T, icTagTypeSignature Tsig>
6354 if (!pIO->
Write32(&m_nReserved))
6386template <
class T, icTagTypeSignature Tsig>
6391 if (m_nSize == 1 ) {
6392 switch (
sizeof(T)) {
6394 sprintf(buf,
"Value = %.8f\n", m_Num[0]);
6397 sprintf(buf,
"Value = %.16f\n", m_Num[0]);
6400 sprintf(buf,
"Value = %.f\n", m_Num[0]);
6403 sDescription += buf;
6407 sDescription.reserve(sDescription.size() + m_nSize*79);
6409 sprintf(buf,
"Begin_Value_Array[%d]\n", m_nSize);
6410 sDescription += buf;
6417 for (i=0; i<m_nSize; i++) {
6419 sDescription +=
"\n";
6421 switch (
sizeof(T)) {
6423 sprintf(buf,
" %.8f", m_Num[i]);
6426 sprintf(buf,
" %.16f", m_Num[i]);
6429 sprintf(buf,
" %f", m_Num[i]);
6431 sDescription += buf;
6434 sDescription +=
"\n";
6435 sDescription +=
"End_Value_Array\n";
6451template <
class T, icTagTypeSignature Tsig>
6457 m_Num = (T*)
icRealloc(m_Num, nSize*
sizeof(T));
6464 if (bZeroNew && m_nSize < nSize) {
6465 memset(&m_Num[m_nSize], 0, (nSize-m_nSize)*
sizeof(T));
6483template <
class T, icTagTypeSignature Tsig>
6486 if (nVectorSize >m_nSize)
6491 for (i=0; i<m_nSize; i++) {
6509template <
class T, icTagTypeSignature Tsig>
6521 sReport += sSigPathName;
6522 sReport +=
" - Number of material default values does not match MCS in header.\n";
6544template <
class T, icTagTypeSignature Tsig>
6555 else if (nVector<=1)
6568 if (iPos == nVector-1) {
6582 lo = &m_Num[(iPos-1)*nVectorSize];
6583 hi = &lo[nVectorSize];
6587 lo = &m_Num[iPos*nVectorSize];
6588 hi = &lo[nVectorSize];
6594 for (i=0; i<nVectorSize; i++) {
6599 for (i=0; i<nVectorSize; i++) {
6619template <
class T, icTagTypeSignature Tsig>
6630 bNoZero = (lv!=0.0);
6633 DstPos = val/lv - 1.0f;
6638 for (i=1; i<m_nSize; i++, lv=nv) {
6642 DstPos = (val-lv)/(nv-lv) + i - 1.0f;
6666 memset(&m_Data, 0,
sizeof(m_Data));
6682 memcpy(&m_Data, &ITM.
m_Data,
sizeof(m_Data));
6698 if (&MeasTag ==
this)
6701 memcpy(&m_Data, &MeasTag.
m_Data,
sizeof(m_Data));
6741 sizeof(m_Data) > size)
6751 if (!pIO->
Read32(&m_nReserved))
6786 if (!pIO->
Write32(&m_nReserved))
6814 sprintf(buf,
"Backing measurement: X=%.4lf, Y=%.4lf, Z=%.4lf\n",
6815 icFtoD(m_Data.backing.X),
6816 icFtoD(m_Data.backing.Y),
6817 icFtoD(m_Data.backing.Z));
6818 sDescription += buf;
6846 switch(m_Data.stdObserver) {
6854 sReport += sSigPathName;
6855 sReport +=
" - Invalid standard observer encoding.\n";
6859 switch(m_Data.geometry) {
6867 sReport += sSigPathName;
6868 sReport +=
" - Invalid measurement geometry encoding.\n";
6872 switch(m_Data.illuminant) {
6886 sReport += sSigPathName;
6887 sReport +=
" - Invalid standard illuminant encoding.\n";
6927 m_pBuf[m_nLength] = 0;
6945 if (&UnicodeText ==
this)
7004 if (!szBuf || !nBufSize)
7010 if (nBufSize - 1 < str.size()) {
7011 memcpy(szBuf, str.c_str(), nBufSize - 1);
7012 szBuf[nBufSize] = 0;
7015 strcpy(szBuf, str.c_str());
7042 if (*str <= 0xD7FF) {
7046 else if (*str <= 0xDBFF) {
7049 code32 = (low | high) + 0x10000;
7055 if (code32 <= 0x007F) {
7056 sText += (
unsigned char)code32;
7058 else if (code32 <= 0x07FF) {
7059 sText += (
unsigned char)(((code32 >> 6) & 0x1F) | 0xC0);
7060 sText += (
unsigned char)((code32 & 0x3F) | 0x80);
7062 else if (code32 <= 0xFFFF) {
7063 sText += (
unsigned char)(((code32 >> 12) & 0x0F) | 0xE0);
7064 sText += (
unsigned char)(((code32 >> 6) & 0x3F) | 0x80);
7065 sText += (
unsigned char)(((code32) & 0x3F) | 0x80);
7067 else if (code32 <= 0x10FFFF) {
7068 sText += (
unsigned char)(((code32 >> 18) & 0x07) | 0xF0);
7069 sText += (
unsigned char)(((code32 >> 12) & 0x3F) | 0x80);
7070 sText += (
unsigned char)(((code32 >> 6) & 0x3F) | 0x80);
7071 sText += (
unsigned char)(((code32) & 0x3F) | 0x80);
7092 if (nSize == m_nLength)
7126 std::vector<unsigned long> unicode;
7133 unsigned char ch = szText[i++];
7139 else if (ch <= 0xBF)
7145 else if (ch <= 0xDF)
7150 else if (ch <= 0xEF)
7155 else if (ch <= 0xF7)
7166 for (
size_t j = 0; j < todo; ++j)
7173 unsigned char ch = szText[i];
7174 if (ch < 0x80 || ch > 0xBF) {
7185 if (uni >= 0xD800 && uni <= 0xDFFF) {
7189 else if (uni > 0x10FFFF) {
7193 unicode.push_back(uni);
7197 std::vector<unsigned short> utf16;
7198 for (i = 0; i < unicode.size(); ++i)
7200 unsigned long uni = unicode[i];
7203 utf16.push_back((
unsigned short)uni);
7208 utf16.push_back((
unsigned short)((uni >> 10) + 0xD800));
7209 utf16.push_back((
unsigned short)((uni & 0x3FF) + 0xDC00));
7215 size_t len = utf16.size();
7220 for (i=0; i<len; i++) {
7225 m_nLanguageCode = nLanguageCode;
7226 m_nCountryCode = nRegionCode;
7250 for (len=0; *pBuf; len++, pBuf++);
7254 memcpy(m_pBuf, sszUnicode16Text, (len+1)*
sizeof(
icUInt16Number));
7256 m_nLanguageCode = nLanguageCode;
7257 m_nCountryCode = nRegionCode;
7281 for (len=0; *pBuf; len++, pBuf++);
7285 if (!SetSize(len*2))
7296 m_nLanguageCode = nLanguageCode;
7297 m_nCountryCode = nRegionCode;
7346 if (&MultiLocalizedTag ==
this)
7350 *m_Strings = *MultiLocalizedTag.
m_Strings;
7396 if (!m_Strings->empty())
7410 !pIO->
Read32(&m_nReserved) ||
7411 !pIO->
Read32(&nNumRec) ||
7424 for (i=0; i<nNumRec; i++) {
7430 if (!pIO->
Read16(&nLanguageCode) ||
7431 !pIO->
Read16(&nRegionCode) ||
7432 !pIO->
Read32(&nLength) ||
7436 if (nOffset+nLength > size)
7440 if (nOffset+nLength > nLastPos)
7441 nLastPos = nOffset + nLength;
7445 if (!Unicode.
SetSize(nNumChar))
7456 m_Strings->push_back(Unicode);
7491 !pIO->
Write32(&m_nReserved) ||
7499 CIccMultiLocalizedUnicode::iterator i;
7501 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
7504 if (!pIO->
Write16(&i->m_nLanguageCode) ||
7505 !pIO->
Write16(&i->m_nCountryCode) ||
7512 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
7513 nLength = i->GetLength();
7540 CIccMultiLocalizedUnicode::iterator i;
7542 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
7543 if (i!=m_Strings->begin())
7544 sDescription +=
"\n";
7547 sDescription +=
"Language = ";
7548 if (isprint(i->m_nLanguageCode >> 8) && isprint(i->m_nLanguageCode & 0x00FF)) {
7549 sprintf(szBuf,
"'%c%c'", i->m_nLanguageCode >> 8, i->m_nLanguageCode & 0x00FF);
7552 sprintf(szBuf,
"'\?\?' (0x%04X)", i->m_nLanguageCode);
7554 sDescription += szBuf;
7556 if (i->m_nCountryCode) {
7558 sDescription +=
", Region = ";
7559 if (isprint(i->m_nCountryCode >> 8) && isprint(i->m_nCountryCode & 0x00FF)) {
7560 sprintf(szBuf,
"'%c%c'", i->m_nCountryCode>>8, i->m_nCountryCode & 0x00FF);
7563 sprintf(szBuf,
"'\?\?' (0x%04X)", i->m_nCountryCode);
7565 sDescription += szBuf;
7567 sDescription +=
"\n";
7570 sDescription +=
"\"";
7571 sDescription += utf8;
7572 sDescription +=
"\"\n";
7598 if (!m_Strings->size()) {
7600 sReport += sSigPathName;
7601 sReport +=
" - Empty tag!\n";
7605 CIccMultiLocalizedUnicode::iterator i;
7606 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
7632 CIccMultiLocalizedUnicode::iterator i;
7634 for (i=m_Strings->begin(); i!=m_Strings->end(); i++) {
7635 if (i->m_nLanguageCode == nLanguageCode &&
7636 i->m_nCountryCode == nRegionCode) {
7664 newText.
SetText(szText, nLanguageCode, nRegionCode);
7665 m_Strings->push_back(newText);
7668 pText->
SetText(szText, nLanguageCode, nRegionCode);
7693 newText.
SetText(sszUnicode16Text, nLanguageCode, nRegionCode);
7694 m_Strings->push_back(newText);
7697 pText->
SetText(sszUnicode16Text, nLanguageCode, nRegionCode);
7721 newText.
SetText(sszUnicode32Text, nLanguageCode, nRegionCode);
7722 m_Strings->push_back(newText);
7725 pText->
SetText(sszUnicode32Text, nLanguageCode, nRegionCode);
7786 if (&DataTag ==
this)
7847 if (!pIO->
Read32(&m_nReserved))
7850 if (!pIO->
Read32(&m_nDataFlag))
7861 if (IsTypeCompressed()) {
7892 if (!pIO->
Write32(&m_nReserved))
7895 if (!pIO->
Write32(&m_nDataFlag))
7898 if (IsTypeCompressed()) {
7929 sDescription =
"\n";
7930 if (IsTypeCompressed())
7931 sDescription +=
"Compressed ";
7933 if (IsTypeAscii()) {
7934 sDescription =
"Ascii Data:\n";
7936 for (
int i=0; i<(int)m_nSize; i++)
7937 sDescription += (
icChar)m_pData[i];
7939 else if (IsTypeUtf()) {
7941 ((m_pData[0]==0xff && m_pData[1]==0xfe) ||
7942 (m_pData[0]==0xfe && m_pData[1]==0xff))) {
7943 sprintf(buf,
"UTF-16%s Data:", m_pData[0]==0xff ?
"LE" :
"BE" );
7946 icMemDump(sDescription, m_pData, m_nSize);
7949 sDescription =
"UTF-8 Data:\n";
7951 for (
int i=0; i<(int)m_nSize; i++)
7952 sDescription += (
icChar)m_pData[i];
7956 if (IsTypeBinary()) {
7957 sDescription =
"Binary Data:\n";
7960 sDescription =
"Other Data:\n";
7963 icMemDump(sDescription, m_pData, m_nSize);
7965 sDescription +=
"\n";
7981 if (m_nSize == nSize)
7991 if (bZeroNew && nSize > m_nSize) {
7992 memset(&m_pData[m_nSize], 0, (nSize-m_nSize)*
sizeof(
icUInt8Number));
8024 for (
int i = 0; i < (int)m_nSize; i++) {
8025 if (m_pData[i] & 0x80) {
8027 sReport += sSigPathName;
8028 sReport +=
" - Ascii Data is not just 7-bit data.\n";
8042 sReport += sSigPathName;
8043 sReport +=
" - Invalid data flag encoding.\n";
8049 sReport += sSigPathName;
8050 sReport +=
" - Invalid data flag encoding (reserved high order bits).\n";
8068 memset(&m_DateTime, 0,
sizeof(m_DateTime));
8084 memcpy(&m_DateTime, &ITDT.
m_DateTime,
sizeof(m_DateTime));
8100 if (&DateTimeTag ==
this)
8103 memcpy(&m_DateTime, &DateTimeTag.
m_DateTime,
sizeof(m_DateTime));
8153 if (!pIO->
Read32(&m_nReserved))
8193 if (!pIO->
Write32(&m_nReserved))
8196 if (pIO->
Write16(&m_DateTime,6) != 6)
8218 sDescription =
"Date = ";
8219 sprintf(buf,
"%u-%u-%u\n", m_DateTime.month, m_DateTime.day, m_DateTime.year);
8220 sDescription += buf;
8222 sDescription +=
"Time = ";
8223 sprintf(buf,
"%u:%u:%u\n", m_DateTime.hours, m_DateTime.minutes, m_DateTime.seconds);
8224 sDescription += buf;
8306 if (&ColorantOrderTag ==
this)
8309 m_nCount = ColorantOrderTag.
m_nCount;
8367 if (!pIO->
Read32(&m_nReserved))
8370 if (!pIO->
Read32(&nCount))
8412 if (!pIO->
Write32(&m_nReserved))
8440 sprintf(buf,
"Colorant Count : %u\n", m_nCount);
8441 sDescription += buf;
8442 sDescription +=
"Order of Colorants:\n";
8444 for (
int i=0; i<(int)m_nCount; i++) {
8445 sprintf(buf,
"%u\n", m_pData[i]);
8446 sDescription += buf;
8464 if (m_nCount == nSize)
8474 if (bZeroNew && nSize > m_nCount) {
8475 memset(&m_pData[m_nCount], 0, (nSize - m_nCount)*
sizeof(
icUInt8Number));
8507 sReport += sSigPathName;
8508 sReport +=
" - Tag validation incomplete: Pointer to profile unavailable.\n";
8516 sReport += sSigPathName;
8517 sReport +=
" - Incorrect number of colorants.\n";
8524 sReport += sSigPathName;
8525 sReport +=
" - Incorrect number of colorants.\n";
8531 sReport += sSigPathName;
8532 sReport +=
" - Unknown number of required colorants.\n";
8594 if (&ColorantTableTag ==
this)
8597 m_PCS = ColorantTableTag.
m_PCS;
8598 m_nCount = ColorantTableTag.
m_nCount;
8656 if (!pIO->
Read32(&m_nReserved))
8659 if (!pIO->
Read32(&nCount))
8666 if (nNum < nCount || nCount > 0xffff)
8707 if (!pIO->
Write32(&m_nReserved))
8745 sprintf(buf,
"BEGIN_COLORANTS %u\n", m_nCount);
8746 sDescription += buf;
8748 for (i=0; i<m_nCount; i++) {
8753 sDescription +=
"# NAME ";
8756 sprintf(buf,
"XYZ_X XYZ_Y XYZ_Z\n");
8757 sDescription += buf;
8760 sprintf(buf,
"Lab_L Lab_a Lab_b\n");
8761 sDescription += buf;
8763 for (i=0; i<m_nCount; i++) {
8764 sprintf(buf,
"%2u \"%s\"", i, m_pData[i].name);
8765 sDescription += buf;
8766 memset(buf,
' ', 128);
8767 buf[nMaxLen + 1 - strlen(m_pData[i].name)] =
'\0';
8768 sDescription += buf;
8771 sprintf(buf,
"%7.4lf %7.4lf %7.4lf\n",
icUSFtoD(m_pData[i].data[0]),
icUSFtoD(m_pData[i].data[1]),
icUSFtoD(m_pData[i].data[2]));
8772 sDescription += buf;
8775 Lab[0] =
icU16toF(m_pData[i].data[0]);
8776 Lab[1] =
icU16toF(m_pData[i].data[1]);
8777 Lab[2] =
icU16toF(m_pData[i].data[2]);
8779 sprintf(buf,
"%7.4lf %8.4lf %8.4lf\n", Lab[0], Lab[1], Lab[2]);
8780 sDescription += buf;
8799 if (m_nCount == nSize)
8809 if (bZeroNew && nSize > m_nCount) {
8842 sReport += sSigPathName;
8843 sReport +=
" - Tag validation incomplete: Pointer to profile unavailable.\n";
8852 sReport += sSigPathName;
8853 sReport +=
" - Use of this tag is allowed only in DeviceLink Profiles.\n";
8858 sReport += sSigPathName;
8859 sReport +=
" - Incorrect number of colorants.\n";
8866 sReport += sSigPathName;
8867 sReport +=
" - Incorrect number of colorants.\n";
8890 m_XYZSurround.X = 0;
8891 m_XYZSurround.Y = 0;
8892 m_XYZSurround.Z = 0;
8929 if (&ViewCondTag ==
this)
8984 if (!pIO->
Read32(&m_nReserved))
8987 if (pIO->
Read32(&m_XYZIllum.X, 3) != 3)
8990 if (pIO->
Read32(&m_XYZSurround.X, 3) != 3)
8993 if (!pIO->
Read32(&m_illumType))
9023 if (!pIO->
Write32(&m_nReserved))
9026 if (pIO->
Write32(&m_XYZIllum.X, 3) !=3)
9029 if (pIO->
Write32(&m_XYZSurround.X, 3) !=3)
9032 if (!pIO->
Write32(&m_illumType))
9054 sprintf(buf,
"Illuminant Tristimulus values: X = %.4lf, Y = %.4lf, Z = %.4lf\n",
9058 sDescription += buf;
9060 sprintf(buf,
"Surround Tristimulus values: X = %.4lf, Y = %.4lf, Z = %.4lf\n",
9063 icFtoD(m_XYZSurround.Z));
9064 sDescription += buf;
9066 sDescription +=
"Illuminant Type: ";
9069 sDescription +=
"\n";
9113 m_bNeedsPading =
false;
9135 m_bNeedsPading =
false;
9152 if (&ProfDescText ==
this)
9158 if (ProfDescText.
m_pTag) {
9164 m_bNeedsPading =
false;
9203 if (m_pTag->GetType() == nType)
9215 return(m_pTag != NULL);
9231 return m_pTag->GetType();
9250 m_pTag->Describe(sDescription, nVerboseness);
9276 if ((nPos&0x03) != 0)
9277 m_bNeedsPading =
true;
9284 m_bNeedsPading =
false;
9286 if (!SetType(
sig)) {
9296 if (!SetType(
sig)) {
9302 return m_pTag->Read(size, pIO);
9327 if (m_pTag->Write(pIO)) {
9386 if (&ProfDescStruct ==
this)
9444 if (&ProfSeqDescTag ==
this)
9463 delete m_Descriptions;
9486 nEnd = pIO->
Tell() + size;
9497 !pIO->
Read32(&m_nReserved) ||
9512 for (i=0; i<nCount; i++) {
9529 m_Descriptions->push_back(ProfileDescStruct);
9559 !pIO->
Write32(&m_nReserved) ||
9563 CIccProfileSeqDesc::iterator i;
9565 for (i=m_Descriptions->begin(); i!=m_Descriptions->end(); i++) {
9567 if (!pIO->
Write32(&i->m_deviceMfg) ||
9568 !pIO->
Write32(&i->m_deviceModel) ||
9569 !pIO->
Write64(&i->m_attributes) ||
9570 !pIO->
Write32(&i->m_technology))
9573 if (!i->m_deviceMfgDesc.Write(pIO) ||
9574 !i->m_deviceModelDesc.Write(pIO))
9594 CIccProfileSeqDesc::iterator i;
9595 icChar buf[128], buf2[28];
9598 sprintf(buf,
"Number of Profile Description Structures: %u\n", (
icUInt32Number)m_Descriptions->size());
9599 sDescription += buf;
9601 for (i=m_Descriptions->begin(); i!=m_Descriptions->end(); i++, count++) {
9602 sDescription +=
"\n";
9604 sprintf(buf,
"Profile Description Structure Number [%u] follows:\n", count+1);
9605 sDescription += buf;
9607 sprintf(buf,
"Device Manufacturer Signature: %s\n",
icGetSig(buf2, i->m_deviceMfg,
false));
9608 sDescription += buf;
9610 sprintf(buf,
"Device Model Signature: %s\n",
icGetSig(buf2, i->m_deviceModel,
false));
9611 sDescription += buf;
9614 sDescription += buf;
9616 sprintf(buf,
"Device Technology Signature: %s\n",
icGetSig(buf2, i->m_technology,
false));
9617 sDescription += buf;
9619 sprintf(buf,
"Description of device manufacturer: \n");
9620 sDescription += buf;
9621 i->m_deviceMfgDesc.Describe(sDescription, nVerboseness);
9623 sprintf(buf,
"Description of device model: \n");
9624 sDescription += buf;
9625 i->m_deviceModelDesc.Describe(sDescription, nVerboseness);
9652 CIccProfileSeqDesc::iterator i;
9653 for (i=m_Descriptions->begin(); i!=m_Descriptions->end(); i++) {
9654 switch(i->m_technology) {
9683 sReport += sSigPathName;
9684 sprintf(buf,
" - %s: Unknown Technology.\n", Info.
GetSigName(i->m_technology));
9690 if (i->m_deviceMfgDesc.m_bNeedsPading) {
9692 sReport += sSigPathName;
9694 sReport +=
" Contains non-aligned deviceMfgDesc text tag information\n";
9699 if (i->m_deviceModelDesc.m_bNeedsPading) {
9701 sReport += sSigPathName;
9703 sReport +=
" Contains non-aligned deviceModelDesc text tag information\n";
9708 rv =
icMaxStatus(rv, i->m_deviceMfgDesc.GetTag()->Validate(sigPath+
icGetSigPath(GetType()), sReport, pProfile));
9709 rv =
icMaxStatus(rv, i->m_deviceModelDesc.GetTag()->Validate(sigPath+
icGetSigPath(GetType()), sReport, pProfile));
9729 m_nChannels = nChannels;
9748 m_nChannels = nChannels;
9749 m_measurementUnitSig =
sig;
9790 if (&RespCurveStruct ==
this)
9796 if (m_maxColorantXYZ)
9797 free(m_maxColorantXYZ);
9802 if (m_Response16ListArray)
9803 delete [] m_Response16ListArray;
9822 if (m_maxColorantXYZ)
9823 free(m_maxColorantXYZ);
9825 if (m_Response16ListArray)
9826 delete [] m_Response16ListArray;
9859 if (!pIO->
Read32(&m_measurementUnitSig))
9864 if (pIO->
Read32(&nMeasurements[0],m_nChannels) != m_nChannels) {
9865 delete[] nMeasurements;
9871 delete[] nMeasurements;
9878 for (
int i = 0; i<m_nChannels; i++) {
9879 if (!nResponseList.empty())
9880 nResponseList.clear();
9881 for (
int j=0; j<(int)nMeasurements[i]; j++) {
9885 delete[] nMeasurements;
9888 nResponseList.push_back(nResponse16);
9890 m_Response16ListArray[i] = nResponseList;
9893 delete [] nMeasurements;
9928 for (
int i=0; i<m_nChannels; i++)
9929 nMeasurements[i] = (
icUInt32Number)m_Response16ListArray[i].size();
9931 if (pIO->
Write32(&nMeasurements[0],m_nChannels) != m_nChannels)
9933 delete [] nMeasurements;
9943 CIccResponse16List::iterator j;
9945 for (
int i = 0; i<m_nChannels; i++) {
9946 nResponseList = m_Response16ListArray[i];
9947 for (j=nResponseList.begin(); j!=nResponseList.end(); j++) {
9948 if (!pIO->
Write16(&j->deviceCode) ||
9949 !pIO->
Write16(&j->reserved) ||
9950 !pIO->
Write32(&j->measurementValue))
9953 nResponseList.clear();
9975 CIccResponse16List::iterator j;
9977 sDescription +=
"Measurement Unit: ";
9981 for (
int i=0; i<m_nChannels; i++) {
9982 nResponseList = m_Response16ListArray[i];
9984 sDescription +=
"\n";
9985 sprintf(buf,
"Maximum Colorant XYZ Measurement for Channel-%u : X=%.4lf, Y=%.4lf, Z=%.4lf\n", i+1,
9986 icFtoD(m_maxColorantXYZ[i].X),
icFtoD(m_maxColorantXYZ[i].Y),
icFtoD(m_maxColorantXYZ[i].Z));
9987 sDescription += buf;
9989 sprintf(buf,
"Number of Measurements for Channel-%u : %u\n", i+1, (
icUInt32Number)nResponseList.size());
9990 sDescription += buf;
9992 sprintf(buf,
"Measurement Data for Channel-%u follows:\n", i+1);
9993 sDescription += buf;
9995 for (j=nResponseList.begin(); j!=nResponseList.end(); j++) {
9996 sprintf(buf,
"Device Value= %u : Measurement Value= %.4lf\n", j->deviceCode,
icFtoD(j->measurementValue));
9997 sDescription += buf;
10022 std::string sSigName = Info.
GetSigName(m_measurementUnitSig);
10023 switch(m_measurementUnitSig) {
10037 sReport += sSigName;
10038 sReport +=
" - Unknown measurement unit signature.\n";
10042 if (!m_nChannels) {
10044 sReport += sSigName;
10045 sReport +=
" - Incorrect number of channels.\n";
10049 for (
int i=0; i<m_nChannels; i++) {
10072 m_Curve->inited =
false;
10108 if (&RespCurveSet16Tag ==
this)
10111 if (!m_ResponseCurves->empty())
10112 m_ResponseCurves->clear();
10116 *m_Curve = *RespCurveSet16Tag.
m_Curve;
10132 if (!m_ResponseCurves->empty())
10133 m_ResponseCurves->clear();
10135 delete m_ResponseCurves;
10163 if (headerSize > size)
10171 !pIO->
Read32(&m_nReserved))
10176 if (!pIO->
Read16(&m_nChannels) ||
10177 !pIO->
Read16(&nCountMeasmntTypes))
10185 if (pIO->
Read32(&nOffset[0], nCountMeasmntTypes) != nCountMeasmntTypes) {
10193 if (nOffset[i] + 4 > size) {
10199 if (!entry.
Read(size-nOffset[i], pIO)) {
10204 m_ResponseCurves->push_back(entry);
10209 m_Curve->inited =
false;
10244 if (!pIO->
Write16(&m_nChannels) ||
10245 !pIO->
Write16(&nCountMeasmntTypes))
10253 for (j=0; j<nCountMeasmntTypes; j++) {
10255 if (!pIO->
Write32(&nOffset[j]))
10259 CIccResponseCurveSet::iterator i;
10261 for (i=m_ResponseCurves->begin(), j=0; i!=m_ResponseCurves->end(); i++, j++) {
10262 nOffset[j] = pIO->
GetLength() - startPos;
10263 if (!i->Write(pIO))
10271 for (j=0; j<nCountMeasmntTypes; j++) {
10272 if (!pIO->
Write32(&nOffset[j]))
10295 CIccResponseCurveSet::iterator i;
10298 sprintf(buf,
"Number of Channels: %u\n", m_nChannels);
10299 sDescription += buf;
10301 sprintf(buf,
"Number of Measurement Types used: %u\n", (
icUInt32Number)m_ResponseCurves->size());
10302 sDescription += buf;
10305 for (i=m_ResponseCurves->begin(); i!=m_ResponseCurves->end(); i++, count++) {
10306 sDescription +=
"\n";
10308 sprintf(buf,
"Response Curve for measurement type [%u] follows:\n", count+1);
10309 sDescription += buf;
10311 i->Describe(sDescription, nVerboseness);
10329 m_nChannels = nChannels;
10331 if (!m_ResponseCurves->empty())
10332 m_ResponseCurves->clear();
10353 pResponseCurveStruct = GetResponseCurves(
sig);
10355 if (pResponseCurveStruct)
10356 return pResponseCurveStruct;
10360 m_ResponseCurves->push_back(entry);
10361 m_Curve->inited =
false;
10363 return GetResponseCurves(
sig);
10382 CIccResponseCurveSet::iterator i;
10384 for (i=m_ResponseCurves->begin(); i!=m_ResponseCurves->end(); i++) {
10385 if (i->GetMeasurementType() ==
sig)
10386 return (i->GetThis());
10406 m_Curve->item = m_ResponseCurves->begin();
10407 if (m_Curve->item == m_ResponseCurves->end()) {
10408 m_Curve->inited =
false;
10411 m_Curve->inited =
true;
10412 return m_Curve->item->
GetThis();
10427 if (!m_Curve || !m_Curve->inited)
10431 if (m_Curve->item==m_ResponseCurves->end()) {
10432 m_Curve->inited =
false;
10435 return m_Curve->item->
GetThis();
10476 sReport += sSigPathName;
10477 sReport +=
" - Tag validation incomplete: Pointer to profile unavailable.\n";
10484 sReport += sSigPathName;
10485 sReport +=
" - Incorrect number of channels.\n";
10488 if (!GetNumResponseCurveTypes()) {
10490 sReport += sSigPathName;
10491 sReport +=
" - Empty Tag!.\n";
10495 CIccResponseCurveSet::iterator i;
10496 for (i=m_ResponseCurves->begin(); i!=m_ResponseCurves->end(); i++) {
10516 memset(&m_spectralRange, 0,
sizeof(m_spectralRange));
10517 memset(&m_biSpectralRange, 0,
sizeof(m_biSpectralRange));
10599 memset(&m_spectralRange, 0,
sizeof(m_spectralRange));
10600 memset(&m_biSpectralRange, 0,
sizeof(m_biSpectralRange));
10607 if (!pIO->
Read32(&m_nReserved))
10610 if (!pIO->
Read32(&m_nSig))
10613 if (!pIO->
Read16(&m_spectralRange.start))
10616 if (!pIO->
Read16(&m_spectralRange.end))
10619 if (!pIO->
Read16(&m_spectralRange.steps))
10622 if (!pIO->
Read16(&m_biSpectralRange.start))
10625 if (!pIO->
Read16(&m_biSpectralRange.end))
10628 if (!pIO->
Read16(&m_biSpectralRange.steps))
10657 if (!pIO->
Write32(&m_nReserved))
10663 if (!pIO->
Write16(&m_spectralRange.start))
10666 if (!pIO->
Write16(&m_spectralRange.end))
10669 if (!pIO->
Write16(&m_spectralRange.steps))
10672 if (!pIO->
Write16(&m_biSpectralRange.start))
10675 if (!pIO->
Write16(&m_biSpectralRange.end))
10678 if (!pIO->
Write16(&m_biSpectralRange.steps))
10698 sDescription +=
"ColorSignature: ";
10700 sDescription +=
"\n";
10702 sprintf(buf,
"SpectralRange: start %fnm end %fnm with %d steps\n",
icF16toF(m_spectralRange.start),
icF16toF(m_spectralRange.end), m_spectralRange.steps);
10703 sDescription += buf;
10704 if (m_biSpectralRange.steps) {
10705 sprintf(buf,
"BiSpectralRange: start %fnm end %fnm with %d steps\n",
icF16toF(m_spectralRange.start),
icF16toF(m_spectralRange.end), m_spectralRange.steps);
10706 sDescription += buf;
10734 const icHeader *pHdr = &pProfile->m_Header;
10737 memcmp(&m_spectralRange, &pHdr->
spectralRange,
sizeof(m_spectralRange)) ||
10738 memcmp(&m_biSpectralRange, &pHdr->
biSpectralRange,
sizeof(m_biSpectralRange))) {
10740 sReport += sSigPathName;
10741 sReport +=
" - SpectralDataInfo should be the same as the profile spectralPCS.\n";
10746 if (m_biSpectralRange.steps)
10763 m_observerRange.start = 0;
10764 m_observerRange.end = 0;
10765 m_observerRange.steps = 0;
10769 m_colorTemperature = 5000.0f;
10771 m_illuminantRange.start = 0;
10772 m_illuminantRange.end = 0;
10773 m_illuminantRange.steps = 0;
10777 m_illuminantXYZ.X = 0;
10778 m_illuminantXYZ.Y = 0;
10779 m_illuminantXYZ.Z = 0;
10781 m_surroundXYZ.X = 0;
10782 m_surroundXYZ.Y = 0;
10783 m_surroundXYZ.Z = 0;
10817 m_illuminantRange.start = 0;
10818 m_illuminantRange.end = 0;
10819 m_illuminantRange.steps = 0;
10823 if (m_illuminant) {
10828 m_illuminant = NULL;
10831 m_illuminantXYZ.X = 0;
10832 m_illuminantXYZ.Y = 0;
10833 m_illuminantXYZ.Z = 0;
10835 m_surroundXYZ.X = 0;
10836 m_surroundXYZ.Y = 0;
10837 m_surroundXYZ.Z = 0;
10871 m_illuminantRange.start = 0;
10872 m_illuminantRange.end = 0;
10873 m_illuminantRange.steps = 0;
10877 if (m_illuminant) {
10882 m_illuminant = NULL;
10885 m_illuminantXYZ.X = 0;
10886 m_illuminantXYZ.Y = 0;
10887 m_illuminantXYZ.Z = 0;
10889 m_surroundXYZ.X = 0;
10890 m_surroundXYZ.Y = 0;
10891 m_surroundXYZ.Z = 0;
10908 delete [] m_observer;
10911 delete [] m_illuminant;
10936 if (headerSize > size)
10944 !pIO->
Read32(&m_nReserved))
10948 if (!pIO->
Read32(&m_stdObserver) ||
10949 !pIO->
Read16(&m_observerRange.start) ||
10950 !pIO->
Read16(&m_observerRange.end) ||
10951 !pIO->
Read16(&m_observerRange.steps) ||
10952 !pIO->
Read16(&m_reserved2))
10958 delete [] m_observer;
10964 if (m_observerRange.steps) {
10965 vals = m_observerRange.steps * 3;
10969 if (headerSize + observerSize > size)
10981 if (headerSize + observerSize +illumInfoSize > size)
10984 if (!pIO->
Read32(&m_stdIlluminant) ||
10986 !pIO->
Read16(&m_illuminantRange.start) ||
10987 !pIO->
Read16(&m_illuminantRange.end) ||
10988 !pIO->
Read16(&m_illuminantRange.steps) ||
10989 !pIO->
Read16(&m_reserved3))
10993 if (m_illuminant) {
10994 delete [] m_illuminant;
10995 m_illuminant = NULL;
11000 if (m_illuminantRange.steps) {
11001 vals = m_illuminantRange.steps;
11005 if (headerSize + observerSize + illumInfoSize + illuminantSize > size)
11016 setIlluminant(m_stdIlluminant, m_illuminantRange, NULL, m_colorTemperature);
11019 if (headerSize + observerSize + illumInfoSize + illuminantSize + 6*
sizeof(
icFloat32Number) > size)
11056 if (!pIO->
Write32(&m_stdObserver) ||
11057 !pIO->
Write16(&m_observerRange.start) ||
11058 !pIO->
Write16(&m_observerRange.end) ||
11059 !pIO->
Write16(&m_observerRange.steps) ||
11069 if (!pIO->
Write32(&m_stdIlluminant) ||
11071 !pIO->
Write16(&m_illuminantRange.start) ||
11072 !pIO->
Write16(&m_illuminantRange.end) ||
11073 !pIO->
Write16(&m_illuminantRange.steps) ||
11077 vals = m_illuminantRange.steps;
11107 sDescription += buf;
11109 sprintf(buf,
"Illuminant Tristimulus values: X = %.4lf, Y = %.4lf, Z = %.4lf\n\n",
11110 m_illuminantXYZ.X, m_illuminantXYZ.Y,m_illuminantXYZ.Z);
11111 sDescription += buf;
11114 sprintf(buf,
"Observer Functions: start=%.1fnm end=%.1fnm, steps=%d\n",
11115 icF16toF(m_observerRange.start),
icF16toF(m_observerRange.end), m_observerRange.steps);
11116 sDescription += buf;
11118 if (nVerboseness > 75) {
11121 for (j=0; j<3; j++) {
11122 for (i=0; i<m_observerRange.steps; i++) {
11123 sprintf(buf,
" %.4f", *ptr);
11124 sDescription += buf;
11127 sDescription +=
"\n\n";
11132 sDescription +=
"No custom Observer defined\n\n";
11135 sDescription +=
"StdIlluminant Type: ";
11138 sDescription +=
"\n";
11140 sprintf(buf,
"Color Temperature: %.1fK\n\n", m_colorTemperature);
11141 sDescription += buf;
11143 if (m_illuminant) {
11144 sprintf(buf,
"Illuminant SPD: start=%.1fm end=%.1fnm, steps=%d\n",
11145 icF16toF(m_illuminantRange.start),
icF16toF(m_illuminantRange.end), m_illuminantRange.steps);
11146 sDescription += buf;
11147 if (nVerboseness > 75) {
11150 for (i=0; i<m_illuminantRange.steps; i++) {
11151 sprintf(buf,
" %.4f", *ptr);
11152 sDescription += buf;
11156 sDescription +=
"\n\n";
11159 sDescription +=
"No custom Observer defined\n\n";
11162 sprintf(buf,
"Surround Tristimulus values: X = %.4lf, Y = %.4lf, Z = %.4lf\n",
11163 m_surroundXYZ.X, m_surroundXYZ.Y, m_surroundXYZ.Z);
11164 sDescription += buf;
11190 rv =
icMaxStatus(rv, Info.
CheckData(sReport, m_illuminantXYZ, sSigPathName +
":>illuminantXYZ"));
11198 if (getObserver(range)) {
11203 sReport += sSigPathName;
11204 sReport +=
" - Missing Observer CMF not supported by profile version!\r\n";
11209 rv =
icMaxStatus(rv, Info.
CheckData(sReport, m_observerRange, sSigPathName +
":>observerRange"));
11212 sReport += sSigPathName;
11213 sReport +=
" - Missing Observer CMF!\r\n";
11217 if (getIlluminant(range)) {
11222 sReport += sSigPathName;
11223 sReport +=
" - Missing illuminant SPD not supported by profile version!\r\n";
11228 rv =
icMaxStatus(rv, Info.
CheckData(sReport, m_illuminantRange, sSigPathName +
":>illuminantRange"));
11230 sReport += sSigPathName;
11231 sReport +=
" - Missing Illuminant SPD!\r\n";
11240 int n = newRange.
steps*3;
11246 range->
VectorMult(&rv[newRange.
steps], &m_observer[m_observerRange.steps]);
11247 range->
VectorMult(&rv[newRange.
steps*2], &m_observer[m_observerRange.steps*2]);
11251 memcpy(rv, m_observer, m_observerRange.steps*3*
sizeof(
icFloatNumber));
11261 CIccMatrixMath *range = CIccPcsXform::rangeMap(m_observerRange, newRange);
11264 range->
VectorMult(pMtx->
entry(1), &m_observer[m_observerRange.steps]);
11265 range->
VectorMult(pMtx->
entry(2), &m_observer[m_observerRange.steps*2]);
11282 { 24.457147f, 27.147280f, 29.837414f, 39.547443f, 49.257472f, 52.859364f, 56.461255f,
11283 58.222678f, 59.984100f, 58.878685f, 57.773270f, 66.274622f, 74.775973f, 80.987003f,
11284 87.198034f, 88.882488f, 90.566943f, 90.947782f, 91.328622f, 93.200755f, 95.072887f,
11285 93.503707f, 91.934527f, 93.817670f, 95.700813f, 96.147589f, 96.594366f, 96.854869f,
11286 97.115372f, 99.602130f, 102.088888f, 101.418624f, 100.748359f, 101.531110f, 102.313861f,
11287 101.156931f, 100.000000f, 98.868725f, 97.737450f, 98.330520f, 98.923589f, 96.216919f,
11288 93.510248f, 95.607997f, 97.705746f, 98.498795f, 99.291845f, 99.179895f, 99.067945f,
11289 97.409311f, 95.750676f, 97.322057f, 98.893438f, 97.299430f, 95.705421f, 96.969799f,
11290 98.234177f, 100.644248f, 103.054319f, 101.119636f, 99.184954f, 93.304566f, 87.424178f,
11291 89.538557f, 91.652935f, 92.293256f, 92.933577f, 84.912496f, 76.891415f, 81.721450f,
11292 86.551486f, 89.586840f, 92.622195f, 85.443791f, 78.265387f, 67.992302f, 57.719217f,
11293 70.340670f, 82.962124f, 80.636096f, 78.310068f }
11296 { 49.975500f, 52.311800f, 54.648200f, 68.701500f, 82.754900f, 87.120400f, 91.486000f,
11297 92.458900f, 93.431800f, 90.057000f, 86.682300f, 95.773600f, 104.865000f, 110.936000f,
11298 117.008000f, 117.410000f, 117.812000f, 116.336000f, 114.861000f, 115.392000f, 115.923000f,
11299 112.367000f, 108.811000f, 109.082000f, 109.354000f, 108.578000f, 107.802000f, 106.296000f,
11300 104.790000f, 106.239000f, 107.689000f, 106.047000f, 104.405000f, 104.225000f, 104.046000f,
11301 102.023000f, 100.000000f, 98.167100f, 96.334200f, 96.061100f, 95.788000f, 92.236800f,
11302 88.685600f, 89.345900f, 90.006200f, 89.802600f, 89.599100f, 88.648900f, 87.698700f,
11303 85.493600f, 83.288600f, 83.493900f, 83.699200f, 81.863000f, 80.026800f, 80.120700f,
11304 80.214600f, 81.246200f, 82.277800f, 80.281000f, 78.284200f, 74.002700f, 69.721300f,
11305 70.665200f, 71.609100f, 72.979000f, 74.349000f, 67.976500f, 61.604000f, 65.744800f,
11306 69.885600f, 72.486300f, 75.087000f, 69.339800f, 63.592700f, 55.005400f, 46.418200f,
11307 56.611800f, 66.805400f, 65.094100f, 63.382800f }
11310 { 92.424314f, 92.694368f, 92.964422f, 111.383899f, 129.803377f, 135.801152f, 141.798926f,
11311 141.447583f, 141.096240f, 133.975439f, 126.854638f, 135.602812f, 144.350987f, 149.960021f,
11312 155.569056f, 154.184112f, 152.799168f, 148.783207f, 144.767246f, 143.338753f, 141.910261f,
11313 136.139746f, 130.369231f, 128.545220f, 126.721209f, 124.329813f, 121.938418f, 117.937629f,
11314 113.936841f, 114.043847f, 114.150853f, 111.519464f, 108.888075f, 107.474441f, 106.060808f,
11315 103.030404f, 100.000000f, 97.314129f, 94.628259f, 93.347855f, 92.067450f, 88.659570f,
11316 85.251689f, 84.758623f, 84.265557f, 83.380599f, 82.495642f, 80.837162f, 79.178681f,
11317 76.519588f, 73.860495f, 73.447089f, 73.033684f, 71.360089f, 69.686495f, 69.189247f,
11318 68.692000f, 68.742482f, 68.792965f, 67.049716f, 65.306467f, 61.725711f, 58.144955f,
11319 58.497707f, 58.850460f, 60.339599f, 61.828738f, 56.573774f, 51.318811f, 54.969052f,
11320 58.619293f, 60.929241f, 63.239189f, 58.464199f, 53.689209f, 46.273925f, 38.858642f,
11321 47.398674f, 55.938706f, 54.609104f, 53.279502f,
11325 { 9.7951f, 10.8996f, 12.0853f, 13.3543f, 14.7080f, 16.1480f, 17.6753f, 19.2907f,
11326 20.9950f, 22.7883f, 24.6709f, 26.6425f, 28.7027f, 30.8508f, 33.0859f, 35.4068f,
11327 37.8121f, 40.3002f, 42.8693f, 45.5174f, 48.2423f, 51.0418f, 53.9132f, 56.8539f,
11328 59.8611f, 62.9320f, 66.0635f, 69.2525f, 72.4959f, 75.7903f, 79.1326f, 82.5193f,
11329 85.9470f, 89.4124f, 92.9120f, 96.4423f, 100.0000f, 103.5820f, 107.1840f, 110.8030f,
11330 114.4360f, 118.0800f, 121.7310f, 125.3860f, 129.0430f, 132.6970f, 136.3460f, 139.9880f,
11331 143.6180f, 147.2350f, 150.8360f, 154.4180f, 157.9790f, 161.5160f, 165.0280f, 168.5100f,
11332 171.9630f, 175.3830f, 178.7690f, 182.1180f, 185.4290f, 188.7010f, 191.9310f, 195.1180f,
11333 198.2610f, 201.3590f, 204.4090f, 207.4110f, 210.3650f, 213.2680f, 216.1200f, 218.9200f,
11334 221.6670f, 224.3610f, 227.0000f, 229.5850f, 232.1150f, 234.5890f, 237.0080f, 239.3700f,
11338#define NUM_KNOWN_ILLUM (sizeof(icKnownIllums)/sizeof(icKnownIllums[0]))
11344 if (!m_illuminant || !m_illuminantRange.steps) {
11353 illumRange = m_illuminantRange;
11354 return m_illuminant;
11359 m_stdIlluminant = illumId;
11360 m_colorTemperature = illumCCT;
11362 if (m_illuminant) {
11363 free(m_illuminant);
11366 m_illuminantRange = illumRange;
11368 if (illumRange.
steps && illum) {
11372 memcpy(m_illuminant, illum, size);
11374 memset(&m_illuminantRange, 0,
sizeof(m_illuminantRange));
11380 memset(&m_illuminantRange, 0,
sizeof(m_illuminantRange));
11382 m_illuminant = NULL;
11391 memset(&zeroRange, 0,
sizeof(zeroRange));
11393 white[0] = pWhiteXYZ[0] / pWhiteXYZ[1];
11395 white[2] = pWhiteXYZ[2] / pWhiteXYZ[1];
11397 if (!pWhiteXYZ || !
icNotZero(pWhiteXYZ[1])) {
11404 (
icIsNear(white[0], 0.9642f, 0.0001f) &&
icIsNear(white[2], 0.8251f, 0.0001f))) {
11407 else if (
icIsNear(white[0], 0.9505f, 0.0001f) &&
icIsNear(white[2], 1.0888f, 0.0001f)) {
11427 { 0.001368f, 0.002236f, 0.004243f, 0.007650f, 0.014310f, 0.023190f, 0.043510f,
11428 0.077630f, 0.134380f, 0.214770f, 0.283900f, 0.328500f, 0.348280f, 0.348060f,
11429 0.336200f, 0.318700f, 0.290800f, 0.251100f, 0.195360f, 0.142100f, 0.095640f,
11430 0.057950f, 0.032010f, 0.014700f, 0.004900f, 0.002400f, 0.009300f, 0.029100f,
11431 0.063270f, 0.109600f, 0.165500f, 0.225750f, 0.290400f, 0.359700f, 0.433450f,
11432 0.512050f, 0.594500f, 0.678400f, 0.762100f, 0.842500f, 0.916300f, 0.978600f,
11433 1.026300f, 1.056700f, 1.062200f, 1.045600f, 1.002600f, 0.938400f, 0.854450f,
11434 0.751400f, 0.642400f, 0.541900f, 0.447900f, 0.360800f, 0.283500f, 0.218700f,
11435 0.164900f, 0.121200f, 0.087400f, 0.063600f, 0.046770f, 0.032900f, 0.022700f,
11436 0.015840f, 0.011359f, 0.008111f, 0.005790f, 0.004109f, 0.002899f, 0.002049f,
11437 0.001440f, 0.001000f, 0.000690f, 0.000476f, 0.000332f, 0.000235f, 0.000166f,
11438 0.000117f, 0.000083f, 0.000059f, 0.000042f,
11439 0.000039f, 0.000064f, 0.000120f, 0.000217f, 0.000396f, 0.000640f, 0.001210f,
11440 0.002180f, 0.004000f, 0.007300f, 0.011600f, 0.016840f, 0.023000f, 0.029800f,
11441 0.038000f, 0.048000f, 0.060000f, 0.073900f, 0.090980f, 0.112600f, 0.139020f,
11442 0.169300f, 0.208020f, 0.258600f, 0.323000f, 0.407300f, 0.503000f, 0.608200f,
11443 0.710000f, 0.793200f, 0.862000f, 0.914850f, 0.954000f, 0.980300f, 0.994950f,
11444 1.000000f, 0.995000f, 0.978600f, 0.952000f, 0.915400f, 0.870000f, 0.816300f,
11445 0.757000f, 0.694900f, 0.631000f, 0.566800f, 0.503000f, 0.441200f, 0.381000f,
11446 0.321000f, 0.265000f, 0.217000f, 0.175000f, 0.138200f, 0.107000f, 0.081600f,
11447 0.061000f, 0.044580f, 0.032000f, 0.023200f, 0.017000f, 0.011920f, 0.008210f,
11448 0.005723f, 0.004102f, 0.002929f, 0.002091f, 0.001484f, 0.001047f, 0.000740f,
11449 0.000520f, 0.000361f, 0.000249f, 0.000172f, 0.000120f, 0.000085f, 0.000060f,
11450 0.000042f, 0.000030f, 0.000021f, 0.000015f,
11451 0.006450f, 0.010550f, 0.020050f, 0.036210f, 0.067850f, 0.110200f, 0.207400f,
11452 0.371300f, 0.645600f, 1.039050f, 1.385600f, 1.622960f, 1.747060f, 1.782600f,
11453 1.772110f, 1.744100f, 1.669200f, 1.528100f, 1.287640f, 1.041900f, 0.812950f,
11454 0.616200f, 0.465180f, 0.353300f, 0.272000f, 0.212300f, 0.158200f, 0.111700f,
11455 0.078250f, 0.057250f, 0.042160f, 0.029840f, 0.020300f, 0.013400f, 0.008750f,
11456 0.005750f, 0.003900f, 0.002750f, 0.002100f, 0.001800f, 0.001650f, 0.001400f,
11457 0.001100f, 0.001000f, 0.000800f, 0.000600f, 0.000340f, 0.000240f, 0.000190f,
11458 0.000100f, 0.000050f, 0.000030f, 0.000020f, 0.000010f, 0.000000f, 0.000000f,
11459 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11460 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11461 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11462 0.000000f, 0.000000f, 0.000000f, 0.000000f }
11465 { 0.000160f, 0.000662f, 0.002362f, 0.007242f, 0.019110f, 0.043400f, 0.084736f,
11466 0.140638f, 0.204492f, 0.264737f, 0.314679f, 0.357719f, 0.383734f, 0.386726f,
11467 0.370702f, 0.342957f, 0.302273f, 0.254085f, 0.195618f, 0.132349f, 0.080507f,
11468 0.041072f, 0.016172f, 0.005132f, 0.003816f, 0.015444f, 0.037465f, 0.071358f,
11469 0.117749f, 0.172953f, 0.236491f, 0.304213f, 0.376772f, 0.451584f, 0.529826f,
11470 0.616053f, 0.705224f, 0.793832f, 0.878655f, 0.951162f, 1.014160f, 1.074300f,
11471 1.118520f, 1.134300f, 1.123990f, 1.089100f, 1.030480f, 0.950740f, 0.856297f,
11472 0.754930f, 0.647467f, 0.535110f, 0.431567f, 0.343690f, 0.268329f, 0.204300f,
11473 0.152568f, 0.112210f, 0.081261f, 0.057930f, 0.040851f, 0.028623f, 0.019941f,
11474 0.013842f, 0.009577f, 0.006605f, 0.004553f, 0.003145f, 0.002175f, 0.001506f,
11475 0.001045f, 0.000727f, 0.000508f, 0.000356f, 0.000251f, 0.000178f, 0.000126f,
11476 0.000090f, 0.000065f, 0.000046f, 0.000033f,
11477 0.000017f, 0.000072f, 0.000253f, 0.000769f, 0.002004f, 0.004509f, 0.008756f,
11478 0.014456f, 0.021391f, 0.029497f, 0.038676f, 0.049602f, 0.062077f, 0.074704f,
11479 0.089456f, 0.106256f, 0.128201f, 0.152761f, 0.185190f, 0.219940f, 0.253589f,
11480 0.297665f, 0.339133f, 0.395379f, 0.460777f, 0.531360f, 0.606741f, 0.685660f,
11481 0.761757f, 0.823330f, 0.875211f, 0.923810f, 0.961988f, 0.982200f, 0.991761f,
11482 0.999110f, 0.997340f, 0.982380f, 0.955552f, 0.915175f, 0.868934f, 0.825623f,
11483 0.777405f, 0.720353f, 0.658341f, 0.593878f, 0.527963f, 0.461834f, 0.398057f,
11484 0.339554f, 0.283493f, 0.228254f, 0.179828f, 0.140211f, 0.107633f, 0.081187f,
11485 0.060281f, 0.044096f, 0.031800f, 0.022602f, 0.015905f, 0.011130f, 0.007749f,
11486 0.005375f, 0.003718f, 0.002565f, 0.001768f, 0.001222f, 0.000846f, 0.000586f,
11487 0.000407f, 0.000284f, 0.000199f, 0.000140f, 0.000098f, 0.000070f, 0.000050f,
11488 0.000036f, 0.000025f, 0.000018f, 0.000013f,
11489 0.000705f, 0.002928f, 0.010482f, 0.032344f, 0.086011f, 0.197120f, 0.389366f,
11490 0.656760f, 0.972542f, 1.282500f, 1.553480f, 1.798500f, 1.967280f, 2.027300f,
11491 1.994800f, 1.900700f, 1.745370f, 1.554900f, 1.317560f, 1.030200f, 0.772125f,
11492 0.570060f, 0.415254f, 0.302356f, 0.218502f, 0.159249f, 0.112044f, 0.082248f,
11493 0.060709f, 0.043050f, 0.030451f, 0.020584f, 0.013676f, 0.007918f, 0.003988f,
11494 0.001091f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11495 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11496 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11497 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11498 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11499 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f, 0.000000f,
11500 0.000000f, 0.000000f, 0.000000f, 0.000000f, }
11503#define NUM_KNOWN_OBSERVERS (sizeof(icKnownObservers)/sizeof(icKnownObservers[0]))
11508 if (!m_observer || !m_observerRange.steps) {
11517 observerRange = m_observerRange;
11523 m_stdObserver = observerId;
11524 m_observerRange = observerRange;
11529 if (observerRange.
steps && observer) {
11533 memcpy(m_observer, observer, size);
11535 memset(&m_observerRange, 0,
sizeof(m_observerRange));
11541 memset(&m_observerRange, 0,
sizeof(m_illuminantRange));
11560 const char *szText = pTextTag->
GetText();
11572 const char *szText = (
const char*)pTextTag->
GetText();
11584 bool rv = pTextTag->
GetText(text);
11600 const char *szText = pTextTag->
GetText();
11614 bool rv = pText->
GetText(text);
11645 m_nSeamlesIndicator = 0;
11647 m_fMetersMinPixelValue = 0;
11648 m_fMetersMaxPixelValue = 0;
11687 if (&HeightImageTag ==
this)
11694 m_nSize = HeightImageTag.
m_nSize;
11754 if (!pIO->
Read32(&m_nReserved))
11757 if (!pIO->
Read32(&m_nSeamlesIndicator))
11760 if (!pIO->
Read32(&m_nEncodingFormat))
11771 if (!SetSize(nNum))
11804 if (!pIO->
Write32(&m_nReserved))
11807 if (!pIO->
Write32(&m_nSeamlesIndicator))
11810 if (!pIO->
Write32(&m_nEncodingFormat))
11840 sprintf(buf,
"\nSeamlessIndicater: %d\n", m_nSeamlesIndicator);
11841 sDescription += buf;
11843 switch (m_nEncodingFormat) {
11845 strcpy(buf,
"EncodingFormat: PNG\n");
11848 strcpy(buf,
"EncodingFormat: TIFF\n");
11851 sprintf(buf,
"EncodingFormat: %d", m_nEncodingFormat);
11854 sDescription += buf;
11856 sprintf(buf,
"Height minimum pixel: %.4fmeters\n", m_fMetersMinPixelValue);
11857 sprintf(buf,
"Height maximum pixel: %.4fmeters\n", m_fMetersMaxPixelValue);
11859 sDescription +=
"\nImage Data:\n";
11861 for (
int i = 0; i<(int)m_nSize; i++) {
11863 sDescription +=
"\n";
11864 sprintf(buf,
"%02X", m_pData[i]);
11865 sDescription += buf;
11867 sDescription +=
"\n";
11883 if (m_nSize == nSize)
11893 if (bZeroNew && nSize > m_nSize) {
11894 memset(&m_pData[m_nSize], 0, (nSize - m_nSize) *
sizeof(
icUInt8Number));
11923 switch (m_nSeamlesIndicator) {
11929 sReport += sSigPathName;
11930 sReport +=
" - Invalid data flag Seamless Indicator.\n";
11934 switch (m_nEncodingFormat) {
11940 sReport += sSigPathName;
11941 sReport +=
" - Invalid data flag Encoding Image Type.\n";
11967 m_nSeamlesIndicator = 0;
12005 if (&NormalImageTag ==
this)
12010 m_nSize = NormalImageTag.
m_nSize;
12068 if (!pIO->
Read32(&m_nReserved))
12071 if (!pIO->
Read32(&m_nSeamlesIndicator))
12074 if (!pIO->
Read32(&m_nEncodingFormat))
12079 if (!SetSize(nNum))
12112 if (!pIO->
Write32(&m_nReserved))
12115 if (!pIO->
Write32(&m_nSeamlesIndicator))
12118 if (!pIO->
Write32(&m_nEncodingFormat))
12142 sprintf(buf,
"\nSeamlessIndicater: %d\n", m_nSeamlesIndicator);
12143 sDescription += buf;
12145 switch (m_nEncodingFormat) {
12147 strcpy(buf,
"EncodingFormat: PNG\n");
12150 strcpy(buf,
"EncodingFormat: TIFF\n");
12153 sprintf(buf,
"EncodingFormat: %d", m_nEncodingFormat);
12156 sDescription += buf;
12158 sDescription +=
"\nImage Data:\n";
12160 for (
int i = 0; i < (int)m_nSize; i++) {
12162 sDescription +=
"\n";
12163 sprintf(buf,
"%02X", m_pData[i]);
12164 sDescription += buf;
12166 sDescription +=
"\n";
12182 if (m_nSize == nSize)
12192 if (bZeroNew && nSize > m_nSize) {
12193 memset(&m_pData[m_nSize], 0, (nSize - m_nSize) *
sizeof(
icUInt8Number));
12222 switch (m_nSeamlesIndicator) {
12228 sReport += sSigPathName;
12229 sReport +=
" - Invalid data flag Seamless Indicator.\n";
12233 switch (m_nEncodingFormat) {
12235 if (m_nSize > 4 && m_pData) {
12236 unsigned char PNGhdr[] = {
'P',
'N',
'G' };
12237 if (memcmp(m_pData+1, PNGhdr, 3)) {
12239 sReport += sSigPathName;
12240 sReport +=
" - Non-PNG file stored as Embedded image.\n";
12246 if (m_nSize > 4 && m_pData) {
12247 unsigned char IIhdr[] = {
'I',
'I', 42, 0 };
12248 unsigned char MMhdr[] = {
'M',
'M', 0, 42 };
12250 if (memcmp(m_pData, IIhdr, 4) && memcmp(m_pData, MMhdr, 4)) {
12252 sReport += sSigPathName;
12253 sReport +=
" - Non-TIFF file stored as Embedded image.\n";
12260 sReport += sSigPathName;
12261 sReport +=
" - Invalid data flag Encoding Image Type.\n";
12270#ifdef USEREFICCMAXNAMESPACE
icFloatNumber icD50XYZ[3]
icUtfConversionResult icConvertUTF8toUTF16(const UTF8 **sourceStart, const UTF8 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, icUtfConversionFlags flags)
icUtfConversionResult icConvertUTF16toUTF8(const UTF16 **sourceStart, const UTF16 *sourceEnd, UTF8 **targetStart, UTF8 *targetEnd, icUtfConversionFlags flags)
icUtfConversionResult icConvertUTF32toUTF16(const UTF32 **sourceStart, const UTF32 *sourceEnd, UTF16 **targetStart, UTF16 *targetEnd, icUtfConversionFlags flags)
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
@ icValidateCriticalError
#define NUM_KNOWN_OBSERVERS
bool icGetTagText(const CIccTag *pTag, std::string &text)
#define BRIEF_STRING_SIZE
static icIllumDef icKnownIllums[]
static struct @4 icExampleCicpCodes[]
static unsigned char icFaultyXmlZipData[4]
static icSpectralRange icKnownIllumObsRange
static icObserverDef icKnownObservers[]
std::list< icResponse16Number > CIccResponse16List
List Class: CIccResponse16List.
std::list< CIccResponseCurveStruct > CIccResponseCurveSet
List Class: CIccResponseCurveSet.
std::list< CIccProfileDescStruct > CIccProfileSeqDesc
List Class: CIccProfileSeqDesc.
std::list< CIccLocalizedUnicode > CIccMultiLocalizedUnicode
List Class: CIccMultiLocalizedUnicode.
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
std::string icGetSigPath(icUInt32Number nSig)
const char * icMsgValidateWarning
icFloatNumber icU16toF(icUInt16Number num)
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)
icUInt32Number icGetSpaceSamples(icColorSpaceSignature sig)
void icMatrixDump(std::string &sDump, icS15Fixed16Number *pMatrix)
bool icIsNear(icFloatNumber v1, icFloatNumber v2, icFloatNumber nearRange)
Name: icIsNear.
void * icRealloc(void *ptr, size_t size)
Name: icRealloc.
icFloatNumber icFtoD(icS15Fixed16Number num)
const icChar * icGetColorSigStr(icChar *pBuf, icUInt32Number nSig)
icFloatNumber icU8toF(icUInt8Number num)
void icLabFromPcs(icFloatNumber *Lab)
Floating point encoding of Lab in PCS is in range 0.0 to 1.0.
icSignature icGetSecondSigPathSig(std::string sigPath)
void icColorValue(icChar *szValue, icFloatNumber nValue, icColorSpaceSignature csSig, int nIndex, bool bUseLegacy)
icUInt32Number icGetMaterialColorSpaceSamples(icMaterialColorSignature sig)
void icMemDump(std::string &sDump, void *pBuf, icUInt32Number nNum)
icFloatNumber icDeltaE(const icFloatNumber *lab1, const icFloatNumber *lab2)
const char * icMsgValidateNonCompliant
icFloatNumber icUSFtoD(icU1Fixed15Number num)
void icColorIndexName(icChar *szName, icColorSpaceSignature csSig, int nIndex, int nColors, const icChar *szUnknown)
const char * icMsgValidateCriticalError
void icXYZtoLab(icFloatNumber *Lab, const icFloatNumber *XYZ, const icFloatNumber *WhiteXYZ)
icFloatNumber icF16toF(icFloat16Number num)
icSignature icGetFirstSigPathSig(std::string sigPath)
const icChar * icGetSig(icChar *pBuf, icUInt32Number nSig, bool bGetHexVal)
unsigned int icUInt32Number
icInt32Number ReadFloat16Float(void *pBufFloat, icInt32Number nNum=1)
icInt32Number ReadFloat32Float(void *pBufFloat, icInt32Number nNum=1)
virtual icInt32Number Write8(void *pBuf8, icInt32Number nNum=1)
virtual icInt32Number GetLength()
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
virtual icInt32Number Read8(void *pBuf8, icInt32Number nNum=1)
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
icInt32Number WriteFloat16Float(void *pBuf16, icInt32Number nNum=1)
virtual icInt32Number Tell()
bool Align32()
Write operation to make sure that filelength is evenly divisible by 4.
icInt32Number ReadUInt8Float(void *pBufFloat, icInt32Number nNum=1)
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
virtual icInt32Number Seek(icInt32Number nOffset, icSeekVal pos)
icInt32Number Write64(void *pBuf64, icInt32Number nNum=1)
icInt32Number WriteFloat32Float(void *pBufFloat, icInt32Number nNum=1)
icInt32Number WriteUInt8Float(void *pBuf16, icInt32Number nNum=1)
icInt32Number ReadUInt16Float(void *pBufFloat, icInt32Number nNum=1)
icInt32Number Read64(void *pBuf64, icInt32Number nNum=1)
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
bool Sync32(icUInt32Number nOffset=0)
Operation to make sure read position is evenly divisible by 4.
icInt32Number WriteUInt16Float(void *pBuf16, 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 * GetSigName(icUInt32Number val)
icValidateStatus CheckLuminance(std::string &sReport, const icFloatXYZNumber &XYZ, std::string sDesc="")
const icChar * GetStandardObserverName(icStandardObserver val)
std::string GetSigPathName(std::string sigPath)
icValidateStatus CheckData(std::string &sReport, const icDateTimeNumber &dateTime, std::string sDesc="")
Data Class: CIccLocalizedUnicode.
CIccLocalizedUnicode & operator=(const CIccLocalizedUnicode &UnicodeText)
Name: CIccLocalizedUnicode::operator=.
icLanguageCode m_nLanguageCode
icUInt16Number * GetBuf() const
bool SetText(const icChar *szText, icLanguageCode nLanguageCode=icLanguageCodeEnglish, icCountryCode nRegionCode=icCountryCodeUSA)
Name: CIccLocalizedUnicode::SetText.
virtual ~CIccLocalizedUnicode()
Name: CIccLocalizedUnicode::~CIccLocalizedUnicode.
icUInt32Number GetLength() const
icUInt32Number GetUtf8Size()
Name: CIccLocalizedUnicode::GetUtf8Size.
const icChar * GetUtf8(icChar *szBuf, icUInt32Number nBufSize)
Name: CIccLocalizedUnicode::GetUtf8.
bool SetSize(icUInt32Number)
Name: CIccLocalizedUnicode::SetSize.
icCountryCode m_nCountryCode
bool GetText(std::string &text)
Name: CIccLocalizedUnicode::GetText.
CIccLocalizedUnicode()
Name: CIccLocalizedUnicode::CIccLocalizedUnicode.
icFloatNumber * entry(icUInt16Number nRow, icUInt16Number nCol=0)
static CIccMatrixMath * rangeMap(const icSpectralRange &from, const icSpectralRange &to)
Name: CIccMatrixMath::rangeMap.
virtual void VectorMult(icFloatNumber *pDst, const icFloatNumber *pSrc) const
Name: CIccMatrixMath::VectorMult.
Data Class: CIccProfileDescStruct.
CIccProfileDescText m_deviceMfgDesc
CIccProfileDescStruct()
Name: CIccProfileDescStruct::CIccProfileDescStruct.
icSignature m_deviceModel
icTechnologySignature m_technology
CIccProfileDescText m_deviceModelDesc
CIccProfileDescStruct & operator=(const CIccProfileDescStruct &ProfDescStruct)
Name: CIccProfileDescStruct::operator=.
icUInt64Number m_attributes
Data Class: CIccProfileDescText.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccProfileDescText::Describe.
CIccProfileDescText()
Name: CIccProfileDescText::CIccProfileDescText.
virtual icTagTypeSignature GetType() const
Name: CIccProfileDescText::SetType.
CIccProfileDescText & operator=(const CIccProfileDescText &ProfDescText)
Name: CIccProfileDescText::operator=.
bool SetType(icTagTypeSignature nType)
Name: CIccProfileDescText::SetType.
virtual bool Write(CIccIO *pIO)
Name: CIccProfileDescText::Write.
virtual ~CIccProfileDescText()
Name: CIccProfileDescText::~CIccProfileDescText.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccProfileDescText::Read.
Data Class: CIccResponseCurveStruct.
CIccResponseCurveStruct(icMeasurementUnitSig sig, icUInt16Number nChannels=0)
Name: CIccResponseCurveStruct::CIccResponseCurveStruct.
bool Write(CIccIO *pIO)
Name: CIccResponseCurveStruct::Write.
void Describe(std::string &sDescription, int nVerboseness)
Name: CIccResponseCurveStruct::Describe.
icUInt16Number m_nChannels
icXYZNumber * m_maxColorantXYZ
virtual ~CIccResponseCurveStruct()
Name: CIccResponseCurveStruct::~CIccResponseCurveStruct.
bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccResponseCurveStruct::Read.
CIccResponseCurveStruct & operator=(const CIccResponseCurveStruct &RespCurveStruct)
Name: CIccResponseCurveStruct::operator=.
CIccResponse16List * m_Response16ListArray
icValidateStatus Validate(std::string &sReport)
Name: CIccResponseCurveStruct::Validate.
icMeasurementUnitSig m_measurementUnitSig
CIccResponseCurveStruct * GetThis()
bool Union(const CIccSparseMatrix &mtx1, const CIccSparseMatrix &mtx2)
icUInt16Number * GetColumnsForRow(icUInt16Number nRow=0) const
static icUInt32Number MaxEntries(icUInt32Number nMemSize, icUInt16Number nRows, icUInt8Number nTypeSize)
bool Interp(icFloatNumber d1, const CIccSparseMatrix &mtx1, icFloatNumber d2, const CIccSparseMatrix &mtx2)
IIccSparseMatrixEntry * GetData() const
icUInt16Number Cols() const
icUInt16Number Rows() const
void Reset(void *pMatrix, icUInt32Number nSize, icSparseMatrixType nType, bool bInitFromData=true)
icUInt16Number * GetRowStart() const
icUInt16Number GetNumEntries() const
bool Init(icUInt16Number nRows, icUInt16Number nCols, bool bSetData=false)
Class: CIccTagChromaticity.
icUInt16Number m_nChannels
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagChromaticity::Validate.
virtual ~CIccTagChromaticity()
Name: CIccTagChromaticity::~CIccTagChromaticity.
virtual bool Write(CIccIO *pIO)
Name: CIccTagChromaticity::Write.
bool SetSize(icUInt16Number nSize, bool bZeroNew=true)
Name: CIccTagChromaticity::SetSize.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagChromaticity::Read.
CIccTagChromaticity(int nSize=3)
Name: CIccTagChromaticity::CIccTagChromaticity.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagChromaticity::Describe.
CIccTagChromaticity & operator=(const CIccTagChromaticity &ChromTag)
Name: CIccTagChromaticity::operator=.
icChromaticityNumber * m_xy
CIccTagCicp()
Name: CIccTagCicp::CIccTagCicp.
icUInt8Number m_nVideoFullRangeFlag
virtual bool Write(CIccIO *pIO)
Name: CIccTagCicp::Write.
void GetFields(icUInt8Number &colorPrimaries, icUInt8Number &transferCharacteristics, icUInt8Number &matrixCoefficients, icUInt8Number &videoFullRangeFlag)
Name: CIccTagCicp::GetFields.
virtual ~CIccTagCicp()
Name: CIccTagCicp::~CIccTagCicp.
icUInt8Number m_nMatrixCoefficients
CIccTagCicp & operator=(const CIccTagCicp &XYZTag)
Name: CIccTagCicp::operator=.
icUInt8Number m_nColorPrimaries
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagCicp::Read.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagCicp::Validate.
icUInt8Number m_nTransferCharacteristics
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagCicp::Describe.
void SetFields(icUInt8Number colorPrimaries, icUInt8Number transferCharacteristics, icUInt8Number matrixCoefficients, icUInt8Number videoFullRangeFlag)
Name: CIccTagCicp::SetFields.
Class: CIccTagColorantOrder.
CIccTagColorantOrder(int nsize=1)
Name: CIccTagColorantOrder::CIccTagColorantOrder.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagColorantOrder::Validate.
CIccTagColorantOrder & operator=(const CIccTagColorantOrder &ColorantOrderTag)
Name: CIccTagColorantOrder::operator=.
virtual bool Write(CIccIO *pIO)
Name: CIccTagColorantOrder::Write.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagColorantOrder::Read.
virtual ~CIccTagColorantOrder()
Name: CIccTagColorantOrder::~CIccTagColorantOrder.
bool SetSize(icUInt16Number nsize, bool bZeronew=true)
Name: CIccTagColorantOrder::SetSize.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagColorantOrder::Describe.
Class: CIccTagColorantTable.
virtual ~CIccTagColorantTable()
Name: CIccTagColorantTable::~CIccTagColorantTable.
virtual bool Write(CIccIO *pIO)
Name: CIccTagColorantTable::Write.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagColorantTable::Describe.
bool SetSize(icUInt16Number nSize, bool bZeroNew=true)
Name: CIccTagColorantTable::SetSize.
icColorantTableEntry * m_pData
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagColorantTable::Validate.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagColorantTable::Read.
CIccTagColorantTable & operator=(const CIccTagColorantTable &ColorantTableTag)
Name: CIccTagColorantTable::operator=.
CIccTagColorantTable(int nsize=1)
Name: CIccTagColorantTable::CIccTagColorantTable.
icColorSpaceSignature m_PCS
static CIccTag * CreateTag(icTagTypeSignature tagTypeSig)
Function: CreateTag(tagTypeSig) Create a tag of type tagTypeSig.
static const icChar * GetTagTypeSigName(icTagTypeSignature tagTypeSig)
Function: GetTagTypeSigName(tagTypeSig) Get display name of tagTypeSig.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagData::Validate.
virtual ~CIccTagData()
Name: CIccTagData::~CIccTagData.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagData::SetSize.
CIccTagData(int nSize=1)
Name: CIccTagData::CIccTagData.
virtual bool Write(CIccIO *pIO)
Name: CIccTagData::Write.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagData::Describe.
icDataBlockType m_nDataFlag
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagData::Read.
CIccTagData & operator=(const CIccTagData &DataTag)
Name: CIccTagData::operator=.
CIccTagDateTime()
Name: CIccTagDateTime::CIccTagDateTime.
virtual bool Write(CIccIO *pIO)
Name: CIccTagDateTime::Write.
virtual ~CIccTagDateTime()
Name: CIccTagDateTime::~CIccTagDateTime.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagDateTime::Validate.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagDateTime::Read.
CIccTagDateTime & operator=(const CIccTagDateTime &DateTimeTag)
Name: CIccTagDateTime::operator=.
icDateTimeNumber m_DateTime
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagDateTime::Describe.
Class: CIccTagEmbeddedHeightImage.
icUInt32Number m_nSeamlesIndicator
virtual bool Write(CIccIO *pIO)
Name: CIccTagEmbeddedHeightImage::Write.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagEmbeddedHeightImage::Describe.
icFloatNumber m_fMetersMaxPixelValue
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagEmbeddedHeightImage::Read.
icImageEncodingType m_nEncodingFormat
virtual ~CIccTagEmbeddedHeightImage()
Name: CIccTagEmbeddedHeightImage::~CIccTagEmbeddedHeightImage.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagEmbeddedHeightImage::Validate.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagEmbeddedHeightImage::SetSize.
CIccTagEmbeddedHeightImage(int nSize=1)
Name: CIccEmbeddedHeightImage::CIccEmbeddedHeightImage.
CIccTagEmbeddedHeightImage & operator=(const CIccTagEmbeddedHeightImage &HeightTag)
Name: CIccTagEmbeddedHeightImage::operator=.
icFloatNumber m_fMetersMinPixelValue
Class: CIccTagEmbeddedNormalImage.
icImageEncodingType m_nEncodingFormat
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagEmbeddedNormalImage::Read.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagEmbeddedNormalImage::Describe.
CIccTagEmbeddedNormalImage & operator=(const CIccTagEmbeddedNormalImage &NormalTag)
Name: CIccTagEmbeddedNormalImage::operator=.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagEmbeddedNormalImage::Validate.
CIccTagEmbeddedNormalImage(int nSize=1)
Name: CIccTagEmbeddedNormalImage::CIccTagEmbeddedNormalImage.
icUInt32Number m_nSeamlesIndicator
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagEmbeddedNormalImage::SetSize.
virtual ~CIccTagEmbeddedNormalImage()
Name: CIccTagEmbeddedNormalImage::~CIccTagEmbeddedNormalImage.
virtual bool Write(CIccIO *pIO)
Name: CIccTagEmbeddedNormalImage::Write.
virtual bool Interpolate(icFloatNumber *DstVector, icFloatNumber val, icUInt32Number nVectorSize=1, icFloatNumber *zeroVals=NULL) const
Name: CIccTagFixedNum::Interpolate.
CIccTagFixedNum & operator=(const CIccTagFixedNum< T, Tsig > &FixedNumTag)
Name: CIccTagFixedNum::operator=.
virtual bool Write(CIccIO *pIO)
Name: CIccTagFixedNum::Write.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagFixedNum::SetSize.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagFixedNum::Describe.
virtual const icChar * GetClassName() const
Name: CIccTagFixedNum::GetClassName.
virtual bool ValuePos(icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
Name: CIccTagFixedNum::ValuePos.
virtual ~CIccTagFixedNum()
Name: CIccTagFixedNum::~CIccTagFixedNum.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagFixedNum::Read.
virtual bool GetValues(icFloatNumber *DstVector, icUInt32Number nStart=0, icUInt32Number nVectorSize=1) const
Name: CIccTagFixedNum::GetValues.
CIccTagFixedNum(int nSize=1)
Name: CIccTagFixedNum::CIccTagFixedNum.
virtual bool GetValues(icFloatNumber *DstVector, icUInt32Number nStart=0, icUInt32Number nVectorSize=1) const
Name: CIccTagFloatNum::GetValues.
virtual bool ValuePos(icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
Name: CIccTagFloatNum::ValuePos.
virtual bool Write(CIccIO *pIO)
Name: CIccTagFloatNum::Write.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagFloatNum::Interpolate.
virtual bool Interpolate(icFloatNumber *DstVector, icFloatNumber val, icUInt32Number nVectorSize=1, icFloatNumber *zeroVals=NULL) const
Name: CIccTagFloatNum::Interpolate.
virtual const icChar * GetClassName() const
Name: CIccTagFloatNum::GetClassName.
CIccTagFloatNum(int nSize=1)
Name: CIccTagFloatNum::CIccTagFloatNum.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagFloatNum::Describe.
virtual ~CIccTagFloatNum()
Name: CIccTagFloatNum::~CIccTagFloatNum.
CIccTagFloatNum & operator=(const CIccTagFloatNum< T, Tsig > &NumTag)
Name: CIccTagFloatNum::operator=.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagFloatNum::Read.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagFloatNum::SetSize.
virtual icTagTypeSignature GetType() const
Function: GetType()
static CIccTag * Create(icTagTypeSignature sig)
Name: CIccTag::Create.
virtual ~CIccTag()
Name: CIccTag::CIccTag.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Function: Validate Each derived tag will implement it's own IsValid() function.
CIccTag()
Name: CIccTag::CIccTag.
virtual CIccTag * NewCopy() const
Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
Class: CIccTagMeasurement.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagMeasurement::Validate.
CIccTagMeasurement()
Name: CIccTagMeasurement::CIccTagMeasurement.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagMeasurement::Describe.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagMeasurement::Read.
virtual bool Write(CIccIO *pIO)
Name: CIccTagMeasurement::Write.
CIccTagMeasurement & operator=(const CIccTagMeasurement &MeasTag)
Name: CIccTagMeasurement::operator=.
virtual ~CIccTagMeasurement()
Name: CIccTagMeasurement::~CIccTagMeasurement.
Class: CIccTagMultiLocalizedUnicode.
void SetText(const icChar *szText, icLanguageCode nLanguageCode=icLanguageCodeEnglish, icCountryCode nRegionCode=icCountryCodeUSA)
Name: refIccMAX::CIccTagMultiLocalizedUnicode::SetText.
CIccTagMultiLocalizedUnicode()
Name: CIccTagMultiLocalizedUnicode::CIccTagMultiLocalizedUnicode.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagMultiLocalizedUnicode::Validate.
CIccTagMultiLocalizedUnicode & operator=(const CIccTagMultiLocalizedUnicode &MultiLocalizedTag)
Name: CIccTagMultiLocalizedUnicode::operator=.
virtual ~CIccTagMultiLocalizedUnicode()
Name: CIccTagMultiLocalizedUnicode::~CIccTagMultiLocalizedUnicode.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagMultiLocalizedUnicode::Describe.
CIccLocalizedUnicode * Find(icLanguageCode nLanguageCode=icLanguageCodeEnglish, icCountryCode nRegionCode=icCountryCodeUSA)
Name: refIccMAX::CIccTagMultiLocalizedUnicode::Find.
CIccMultiLocalizedUnicode * m_Strings
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagMultiLocalizedUnicode::Read.
virtual bool Write(CIccIO *pIO)
Name: CIccTagMultiLocalizedUnicode::Write.
Class: CIccTagNamedColor2.
bool InitFindCachedPCSColor()
Name: CIccTagNamedColor2::InitFindPCSColor.
icInt32Number FindDeviceColor(icFloatNumber *pDevColor) const
Name: CIccTagNamedColor2::FindDeviceColor.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagNamedColor2::Describe.
SIccNamedColorEntry * m_NamedColor
virtual ~CIccTagNamedColor2()
Name: CIccTagNamedColor2::~CIccTagNamedColor2.
bool GetColorName(std::string &sColorName, icInt32Number index) const
Name: CIccTagNamedColor2::GetColorName.
icInt32Number FindColor(const icChar *szColor) const
Name: CIccTagNamedColor2::FindColor.
icColorSpaceSignature m_csPCS
icFloatNumber NegClip(icFloatNumber v) const
Name: CIccTagNamedColor2::NegClip.
virtual void SetColorSpaces(icColorSpaceSignature csPCS, icColorSpaceSignature csDevice)
Name: CIccTagNamedColor2::SetColorSpaces.
icUInt32Number m_nVendorFlags
void Lab4ToLab2(icFloatNumber *Dst, const icFloatNumber *Src) const
Name: CIccTagNamedColor2::Lab4ToLab2.
CIccTagNamedColor2 & operator=(const CIccTagNamedColor2 &NamedColor2Tag)
Name: CIccTagNamedColor2::operator=.
virtual bool Write(CIccIO *pIO)
Name: CIccTagNamedColor2::Write.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagNamedColor2::Read.
void Lab2ToLab4(icFloatNumber *Dst, const icFloatNumber *Src) const
Name: CIccTagNamedColor2::Lab2ToLab4.
icInt32Number FindPCSColor(icFloatNumber *pPCS, icFloatNumber dMinDE=1000.0)
Name: CIccTagNamedColor2::FindPCSColor.
CIccTagNamedColor2(int nSize=1, int nDeviceCoords=0)
Name: CIccTagNamedColor2::CIccTagNamedColor2.
icUInt32Number m_nColorEntrySize
For quick response of repeated FindPCSColor.
bool SetSize(icUInt32Number nSize, icInt32Number nDeviceCoords=-1)
Name: CIccTagNamedColor2::SetSize.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagNamedColor2::Validate.
void SetPrefix(const icChar *szPrefix)
Name: CIccTagNamedColor2::SetPrefix.
icInt32Number FindCachedPCSColor(icFloatNumber *pPCS, icFloatNumber dMinDE=1000.0) const
Name: CIccTagNamedColor2::FindPCSColor.
icUInt32Number m_nDeviceCoords
icInt32Number FindRootColor(const icChar *szRootColor) const
Name: CIccTagNamedColor2::FindRootColor.
void ResetPCSCache()
Call ResetPCSCache() if entry values change between calls to FindPCSColor()
void SetSufix(const icChar *szSufix)
Name: CIccTagNamedColor2::SetSufix.
icFloatNumber UnitClip(icFloatNumber v) const
Name: CIccTagNamedColor2::UnitClip.
icColorSpaceSignature m_csDevice
CIccTagNum & operator=(const CIccTagNum< T, Tsig > &NumTag)
Name: CIccTagNum::operator=.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagNum::Read.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagNum::Describe.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Function: Validate Each derived tag will implement it's own IsValid() function.
virtual bool GetValues(icFloatNumber *DstVector, icUInt32Number nStart=0, icUInt32Number nVectorSize=1) const
Name: CIccTagNum::GetValues.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagNum::SetSize.
virtual bool Write(CIccIO *pIO)
Name: CIccTagNum::Write.
virtual ~CIccTagNum()
Name: CIccTagNum::~CIccTagNum.
virtual bool Interpolate(icFloatNumber *DstVector, icFloatNumber val, icUInt32Number nVectorSize=1, icFloatNumber *zeroVals=NULL) const
Name: CIccTagNum::Interpolate.
CIccTagNum(int nSize=1)
Name: CIccTagNum::CIccTagNum.
virtual bool ValuePos(icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
Name: CIccTagNum::ValuePos.
virtual const icChar * GetClassName() const
Name: CIccTagNum::GetClassName.
Class: CIccTagProfileSeqDesc.
CIccTagProfileSeqDesc & operator=(const CIccTagProfileSeqDesc &ProfSeqDescTag)
Name: CIccTagProfileSeqDesc::operator=.
virtual ~CIccTagProfileSeqDesc()
Name: CIccTagProfileSeqDesc::~CIccTagProfileSeqDesc.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagProfileSeqDesc::Validate.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagProfileSeqDesc::Describe.
virtual bool Write(CIccIO *pIO)
Name: CIccTagProfileSeqDesc::Write.
CIccTagProfileSeqDesc()
Name: CIccTagProfileSeqDesc::CIccTagProfileSeqDesc.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagProfileSeqDesc::Read.
CIccProfileSeqDesc * m_Descriptions
Class: CIccTagResponseCurveSet16.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagResponseCurveSet16::Validate.
void SetNumChannels(icUInt16Number nChannels)
Name: CIccTagResponseCurveSet16::SetNumChannels.
CIccTagResponseCurveSet16 & operator=(const CIccTagResponseCurveSet16 &RespCurveSet16Tag)
Name: CIccTagResponseCurveSet16::operator=.
virtual ~CIccTagResponseCurveSet16()
Name: CIccTagResponseCurveSet16::~CIccTagResponseCurveSet16.
CIccResponseCurveSet * m_ResponseCurves
CIccResponseCurveSetIter * m_Curve
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagResponseCurveSet16::Read.
CIccResponseCurveStruct * GetFirstCurves()
Name: CIccTagResponseCurveSet16::GetFirstCurves.
CIccResponseCurveStruct * GetNextCurves()
Name: CIccTagResponseCurveSet16::GetNextCurves.
CIccTagResponseCurveSet16()
Name: CIccTagResponseCurveSet16::CIccTagResponseCurveSet16.
icUInt16Number GetNumResponseCurveTypes() const
Name: CIccTagResponseCurveSet16::GetNumResponseCurveTypes.
icUInt16Number m_nChannels
CIccResponseCurveStruct * GetResponseCurves(icMeasurementUnitSig sig)
Name: CIccTagResponseCurveSet16::GetResponseCurves.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagResponseCurveSet16::Describe.
virtual bool Write(CIccIO *pIO)
Name: CIccTagResponseCurveSet16::Write.
CIccResponseCurveStruct * NewResponseCurves(icMeasurementUnitSig sig)
Name: CIccTagResponseCurveSet16::NewResponseCurves.
CIccTagSignature()
Name: CIccTagSignature::CIccTagSignature.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagSignature::Describe.
virtual bool Write(CIccIO *pIO)
Name: CIccTagSignature::Write.
virtual ~CIccTagSignature()
Name: CIccTagSignature::~CIccTagSignature.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagSignature::Validate.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagSignature::Read.
CIccTagSignature & operator=(const CIccTagSignature &SignatureTag)
Name: CIccTagSignature::operator=.
Class: CIccTagSparseMatrixArray.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagSparseMatrixArray::Validate.
bool GetSparseMatrix(CIccSparseMatrix &mtx, int nIndex, bool bInitFromData=true)
Name: CIccTagSparseMatrixArray::GetValues.
virtual ~CIccTagSparseMatrixArray()
Name: CIccTagSparseMatrixArray::~CIccTagSparseMatrixArray.
icUInt8Number * m_RawData
bool Reset(icUInt32Number nNumMatrices, icUInt16Number nChannelsPerMatrix)
Name: CIccTagSparseMatrixArray::Reset.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagSparseMatrixArray::Read.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagSparseMatrixArray::Describe.
CIccTagSparseMatrixArray & operator=(const CIccTagSparseMatrixArray &ITSMA)
Name: CIccTagSparseMatrixArray::operator=.
virtual bool ValuePos(icFloatNumber &DstPos, icFloatNumber val, bool &bNoZero) const
Name: CIccTagSparseMatrixArray::ValuePos.
virtual bool GetValues(icFloatNumber *DstVector, icUInt32Number nStart=0, icUInt32Number nVectorSize=1) const
CIccTagSparseMatrixArray(int nNumMatrices=1, int nChannelsPerMatrix=4)
Name: CIccTagSparseMatrixArray::CIccTagSparseMatrixArray.
icUInt16Number m_nChannelsPerMatrix
virtual bool Write(CIccIO *pIO)
Name: CIccTagSparseMatrixArray::Write.
icSparseMatrixType m_nMatrixType
virtual bool Interpolate(icFloatNumber *DstVector, icFloatNumber val, icUInt32Number nVectorSize=1, icFloatNumber *zeroVals=NULL) const
Name: CIccTagSparseMatrixArray::Interpolate.
Class: CIccTagSpectralDataInfo.
CIccTagSpectralDataInfo()
Name: CIccTagSpectralDataInfo::CIccTagSpectralDataInfo.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagSpectralDataInfo::Validate.
virtual ~CIccTagSpectralDataInfo()
Name: CIccTagSpectralDataInfo::~CIccTagSpectralDataInfo.
icSpectralRange m_biSpectralRange
icSpectralRange m_spectralRange
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagSpectralDataInfo::Describe.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagSpectralDataInfo::Read.
virtual bool Write(CIccIO *pIO)
Name: CIccTagSpectralDataInfo::Write.
CIccTagSpectralDataInfo & operator=(const CIccTagSpectralDataInfo &RespCurveSet16Tag)
Name: CIccTagSpectralDataInfo::operator=.
Class: CIccTagSpectralViewingConditions.
CIccMatrixMath * getObserverMatrix(const icSpectralRange &newRange) const
virtual ~CIccTagSpectralViewingConditions()
Name: CIccTagSpectralViewingConditions::~CIccTagResponseCurveSet16.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagSpectralViewingConditions::Validate.
icStandardObserver m_stdObserver
const icFloatNumber * getObserver(icSpectralRange &observerRange) const
icSpectralRange m_observerRange
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagSpectralViewingConditions::Read.
icFloatNumber * m_illuminant
CIccTagSpectralViewingConditions & operator=(const CIccTagSpectralViewingConditions &RespCurveSet16Tag)
Name: CIccTagSpectralViewingConditions::operator=.
icSpectralRange m_illuminantRange
icFloatNumber m_colorTemperature
CIccTagSpectralViewingConditions()
Name: CIccTagSpectralViewingConditions::CIccTagSpectralViewingConditions.
bool setObserver(icStandardObserver observerId, const icSpectralRange &observerRange, const icFloatNumber *observer)
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagSpectralViewingConditions::Describe.
const icFloatNumber * getIlluminant(icSpectralRange &illumRange) const
icFloatNumber * applyRangeToObserver(const icSpectralRange &newRange) const
icFloatNumber * m_observer
virtual bool Write(CIccIO *pIO)
Name: CIccTagSpectralViewingConditions::Write.
bool setIlluminant(icIlluminant illumId, const icSpectralRange &illumRange, const icFloatNumber *illum, icFloatNumber illumCCT=0.0f)
icIlluminant m_stdIlluminant
Class: CIccTagTextDescription()
icUInt32Number m_nUnicodeLanguageCode
icUInt16Number m_nScriptCode
icUInt16Number * m_uzUnicodeText
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagTextDescription::Read.
const icChar * GetText() const
void ReleaseUnicode()
Name: CIccTagTextDescription::ReleaseUnicode.
CIccTagTextDescription()
Name: CIccTagTextDescription::CIccTagTextDescription.
void SetText(const icChar *szText)
Name: CIccTagTextDescription::SetText.
icChar * GetBuffer(icUInt32Number nSize)
Name: CIccTagTextDescription::GetBuffer.
icUInt8Number m_szScriptText[67]
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagTextDescription::Describe.
icUInt32Number m_nUnicodeSize
virtual bool Write(CIccIO *pIO)
Name: CIccTagTextDescription::Write.
virtual ~CIccTagTextDescription()
Name: CIccTagTextDescription::~CIccTagTextDescription.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagTextDescription::Validate.
icUInt16Number * GetUnicodeBuffer(icUInt32Number nSize)
Name: CIccTagTextDescription::GetUnicodeBuffer.
void Release()
Name: CIccTagTextDescription::Release.
icUInt32Number m_nASCIISize
CIccTagTextDescription & operator=(const CIccTagTextDescription &TextDescTag)
Name: CIccTagTextDescription::operator=.
icUInt8Number m_nScriptSize
const icChar * GetText() const
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagText::Validate.
virtual bool Write(CIccIO *pIO)
Name: CIccTagText::Write.
void SetText(const icChar *szText)
Name: CIccTagText::SetText.
virtual ~CIccTagText()
Name: CIccTagText::~CIccTagText.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagText::Describe.
CIccTagText()
Name: CIccTagText::CIccTagText.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagText::Read.
CIccTagText & operator=(const CIccTagText &TextTag)
Name: CIccTagText::operator=.
icChar * GetBuffer(icUInt32Number nSize)
Name: CIccTagText::GetBuffer.
void Release()
Name: CIccTagText::Release.
virtual bool Write(CIccIO *pIO)
Name: CIccTagUnknown::Write.
CIccTagUnknown()
Name: CIccTagUnknown::CIccTagUnknown.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagUnknown::Read.
CIccTagUnknown & operator=(const CIccTagUnknown &UnknownTag)
Name: CIccTagUnknown::operator=.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagUnknown::Describe.
icTagTypeSignature m_nType
virtual ~CIccTagUnknown()
Name: CIccTagUnknown::~CIccTagUnknown.
Class: CIccTagUtf16Text()
CIccTagUtf16Text()
Name: CIccTagUtf16Text::CIccTagUtf16Text.
virtual ~CIccTagUtf16Text()
Name: CIccTagUtf16Text::~CIccTagUtf16Text.
icUChar16 * GetBuffer(icUInt32Number nSize)
Name: CIccTagUtf16Text::GetBuffer.
const icUChar16 * GetText() const
virtual bool Write(CIccIO *pIO)
Name: CIccTagUtf16Text::Write.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagUtf16Text::Read.
void Release()
Name: CIccTagUtf16Text::Release.
icUInt32Number GetLength() const
Name: CIccTagUtf16Text::GetLength.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagUtf16Text::Validate.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagUtf16Text::Describe.
void SetText(const icUChar16 *szText)
Name: CIccTagUtf16Text::SetText.
CIccTagUtf16Text & operator=(const CIccTagUtf16Text &TextTag)
Name: CIccTagUtf16Text::operator=.
const icChar * GetText(std::string &bufStr) const
Name: CIccTagUtf16Text::GetText.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagUtf8Text::Describe.
virtual ~CIccTagUtf8Text()
Name: CIccTagUtf8Text::~CIccTagUtf8Text.
virtual bool Write(CIccIO *pIO)
Name: CIccTagUtf8Text::Write.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagUtf8Text::Read.
CIccTagUtf8Text & operator=(const CIccTagUtf8Text &TextTag)
Name: CIccTagUtf8Text::operator=.
CIccTagUtf8Text()
Name: CIccTagUtf8Text::CIccTagUtf8Text.
const icUChar * GetText() const
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagUtf8Text::Validate.
void Release()
Name: CIccTagUtf8Text::Release.
icUChar * GetBuffer(icUInt32Number nSize)
Name: CIccTagUtf8Text::GetBuffer.
void SetText(const icUChar16 *szText)
Name: CIccTagUtf8Text::SetText.
Class: CIccTagViewingConditions.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagViewingConditions::Describe.
virtual bool Write(CIccIO *pIO)
Name: CIccTagViewingConditions::Write.
virtual ~CIccTagViewingConditions()
Name: CIccTagViewingConditions::~CIccTagViewingConditions.
icXYZNumber m_XYZSurround
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagViewingConditions::Read.
CIccTagViewingConditions()
Name: CIccTagViewingConditions::CIccTagViewingConditions.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagViewingConditions::Validate.
CIccTagViewingConditions & operator=(const CIccTagViewingConditions &ViewCondTag)
Name: CIccTagViewingConditions::operator=.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagXYZ::Validate.
virtual ~CIccTagXYZ()
Name: CIccTagXYZ::~CIccTagXYZ.
bool SetSize(icUInt32Number nSize, bool bZeroNew=true)
Name: CIccTagXYZ::SetSize.
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagXYZ::Describe.
CIccTagXYZ(int nSize=1)
Name: CIccTagXYZ::CIccTagXYZ.
virtual bool Write(CIccIO *pIO)
Name: CIccTagXYZ::Write.
CIccTagXYZ & operator=(const CIccTagXYZ &XYZTag)
Name: CIccTagXYZ::operator=.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagXYZ::Read.
Class: CIccTagZipUtf8Text()
virtual bool Write(CIccIO *pIO)
Name: CIccTagZipUtf8Text::Write.
virtual bool GetText(std::string &str) const
Name: CIccTagZipUtf8Text::GetText.
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Name: CIccTagZipUtf8Text::Read.
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccTagZipUtf8Text::Validate.
icUInt32Number BufferSize() const
CIccTagZipUtf8Text & operator=(const CIccTagZipUtf8Text &TextTag)
Name: CIccTagZipUtf8Text::operator=.
bool SetText(const icUChar16 *szText)
Name: CIccTagZipUtf8Text::SetText.
icUChar * GetBuffer() const
virtual void Describe(std::string &sDescription, int nVerboseness)
Name: CIccTagZipUtf8Text::Describe.
virtual ~CIccTagZipUtf8Text()
Name: CIccTagZipUtf8Text::~CIccTagZipUtf8Text.
icUChar * AllocBuffer(icUInt32Number nSize)
Name: CIccTagZipUtf8Text::AllocBuffer.
CIccTagZipUtf8Text()
Name: CIccTagZipUtf8Text::CIccTagZipUtf8Text.
virtual icFloatNumber get(int index) const =0
virtual icUInt8Number * getPtr(int index=0) const =0
static icFloatNumber UnitClip(icFloatNumber v)
icFloatNumber deviceCoords[1]
icFloatNumber pcsCoords[3]
The base date time number.
icUInt16Number deviceCode
icS15Fixed16Number measurementValue