IccMAX 2.1.27
Color Profile Tools
Loading...
Searching...
No Matches
CIccTagXmlCurve Class Reference

#include <IccTagXml.h>

+ Inheritance diagram for CIccTagXmlCurve:
+ Collaboration diagram for CIccTagXmlCurve:

Public Member Functions

virtual ~CIccTagXmlCurve ()
 
virtual icFloatNumber Apply (icFloatNumber v) const
 
virtual void Begin ()
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 
virtual void DetachIO ()
 
virtual void DumpLut (std::string &sDescription, const icChar *szName, icColorSpaceSignature csSig, int nIndex, int nVerboseness)
 
icFloatNumber Find (icFloatNumber v)
 
virtual const char * GetClassName () const
 
icFloatNumberGetData (icUInt32Number index)
 
virtual const char * GetExtClassName () const
 
virtual const char * GetExtDerivedClassName () const
 
virtual IIccExtensionTagGetExtension ()
 
icUInt32Number GetSize () const
 
virtual icArraySignature GetTagArrayType () const
 
virtual icStructSignature GetTagStructType () const
 
virtual icTagTypeSignature GetType () const
 
virtual bool IsArrayType ()
 
virtual bool IsIdentity ()
 
virtual bool IsMBBType ()
 
virtual bool IsNumArrayType () const
 
virtual bool IsSupported ()
 
virtual CIccTagNewCopy () const
 
icFloatNumberoperator[] (icUInt32Number index)
 
virtual bool ParseXml (xmlNode *pNode, icConvertType nType, std::string &parseStr)
 
virtual bool ParseXml (xmlNode *pNode, std::string &parseStr)
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 
virtual bool Read (icUInt32Number size, CIccIO *pIO, CIccProfile *pProfile)
 
virtual bool ReadAll ()
 
bool SetGamma (icFloatNumber gamma)
 
bool SetSize (icUInt32Number nSize, icTagCurveSizeInit nSizeOpt=icInitZero)
 
virtual bool ToXml (std::string &xml, icConvertType nType, std::string blanks="")
 
virtual bool ToXml (std::string &xml, std::string blanks="")
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 
virtual bool Write (CIccIO *pIO)
 

Static Public Member Functions

static CIccTagCreate (icTagTypeSignature sig)
 

Data Fields

icUInt32Number m_nReserved
 

Protected Member Functions

icFloatNumber Find (icFloatNumber v, icFloatNumber p0, icFloatNumber v0, icFloatNumber p1, icFloatNumber v1)
 

Protected Attributes

icFloatNumberm_Curve
 
icUInt16Number m_nMaxIndex
 
icUInt32Number m_nSize
 

Detailed Description

Constructor & Destructor Documentation

◆ ~CIccTagXmlCurve()

virtual CIccTagXmlCurve::~CIccTagXmlCurve ( )
inlinevirtual
501{}

Member Function Documentation

◆ Apply()

icFloatNumber CIccTagCurve::Apply ( icFloatNumber  v) const
virtualinherited

Name: CIccTagCurve::Apply

Purpose: Applies the curve to the value passed.

Args: v = value to be passed through the curve.

Return: The value modified by the curve.

Reimplemented from CIccCurve.

569{
570 if(v<0.0) v = 0.0;
571 else if(v>1.0) v = 1.0;
572
574
575 if (!m_nSize) {
576 return v;
577 }
578 if (m_nSize==1) {
579 //Convert 0.0 to 1.0 float to 16bit and then convert from u8Fixed8Number
580 icFloatNumber dGamma = (icFloatNumber)(m_Curve[0] * 65535.0 / 256.0);
581 return (icFloatNumber)pow(v, dGamma);
582 }
583 if (nIndex == m_nMaxIndex) {
584 return m_Curve[nIndex];
585 }
586 else {
587 icFloatNumber nDif = v*m_nMaxIndex - nIndex;
588 icFloatNumber p0 = m_Curve[nIndex];
589
590 icFloatNumber rv = p0 + (m_Curve[nIndex+1]-p0)*nDif;
591 if (rv>1.0)
592 rv=1.0;
593
594 return rv;
595 }
596}
unsigned long icUInt32Number
Definition icProfileHeader.h:262
float icFloatNumber
Definition IccDefs.h:101
icUInt32Number m_nSize
Definition IccTagLut.h:159
icUInt16Number m_nMaxIndex
Definition IccTagLut.h:160
icFloatNumber * m_Curve
Definition IccTagLut.h:158

References CIccTagCurve::m_Curve, CIccTagCurve::m_nMaxIndex, and CIccTagCurve::m_nSize.

Referenced by CIccTagLut8::Write().

+ Here is the caller graph for this function:

◆ Begin()

virtual void CIccTagCurve::Begin ( )
inlinevirtualinherited

Reimplemented from CIccCurve.

unsigned short icUInt16Number
Definition icProfileHeader.h:256

References CIccTagCurve::m_nMaxIndex, and CIccTagCurve::m_nSize.

◆ Create()

CIccTag * CIccTag::Create ( icTagTypeSignature  sig)
staticinherited

Name: CIccTag::Create

Purpose: This is a static tag creator based upon tag signature type

Args: sig = tag type signature

Return: Pointer to Allocated tag

144{
145 return CIccTagCreator::CreateTag(sig);
146}
static CIccTag * CreateTag(icTagTypeSignature tagTypeSig)
Definition IccTagFactory.h:279

References CIccTagCreator::CreateTag().

Referenced by CIccDefaultEncProfileConverter::ConvertFromParams(), CIccTagStruct::LoadElem(), CIccProfileXml::ParseTag(), CIccTagXmlStruct::ParseTag(), CIccMpeXmlTintArray::ParseXml(), CIccTagXmlArray::ParseXml(), CIccMpeTintArray::Read(), CIccTagLutAtoB::Read(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagLut8::SetColorSpaces(), CIccTagLut16::SetColorSpaces(), and CIccProfileDescText::SetType().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Describe()

void CIccTagCurve::Describe ( std::string &  sDescription,
int  nVerboseness 
)
virtualinherited

Name: CIccTagCurve::Describe

Purpose: Dump data associated with the tag to a string

Args: sDescription - string to concatenate tag dump to

Reimplemented from CIccTag.

319{
320 icChar buf[128], *ptr;
321
322 if (!m_nSize) {
323 sprintf(buf, "BEGIN_CURVE In_Out\n");
324 sDescription += buf;
325 sDescription += "Y = X\n";
326 }
327 else if (m_nSize==1) {
328 icFloatNumber dGamma = (icFloatNumber)(m_Curve[0] * 256.0);
329 sprintf(buf, "BEGIN_CURVE In_Out\n");
330 sDescription += buf;
331 sprintf(buf, "Y = X ^ %.4lf\n", dGamma);
332 sDescription += buf;
333 }
334 else {
335 int i;
336
337 sprintf(buf, "BEGIN_LUT In_Out 1 1\n");
338 sDescription += buf;
339
340 if (nVerboseness > 75) {
341 sDescription += "IN OUT\n";
342
343 for (i=0; i<(int)m_nSize; i++) {
344 ptr = buf;
345
347 ptr += strlen(buf);
348
349 strcpy(ptr, " ");
350 ptr ++;
351
353
354 ptr += strlen(ptr);
355
356 strcpy(ptr, "\n");
357 sDescription += buf;
358 }
359 }
360 }
361}
@ icSigMCH1Data
Definition icProfileHeader.h:875
char icChar
Definition IccDefs.h:110
ICCPROFLIB_API void icColorValue(icChar *szValue, icFloatNumber nValue, icColorSpaceSignature csSig, int nIndex, bool bUseLegacy=false)
Definition IccUtil.cpp:330

References icColorValue(), icSigMCH1Data, CIccTagCurve::m_Curve, and CIccTagCurve::m_nSize.

+ Here is the call graph for this function:

◆ DetachIO()

virtual void CIccTag::DetachIO ( )
inlinevirtualinherited

Function: ReadAll() - Read All sub data for tag from file. Called by CIccProfile::ReadAll() to read all sub data for tag

Returns true if ReadAll is successful.

183{}

◆ DumpLut()

void CIccTagCurve::DumpLut ( std::string &  sDescription,
const icChar szName,
icColorSpaceSignature  csSig,
int  nIndex,
int  nVerboseness 
)
virtualinherited

Name: CIccTagCurve::DumpLut

Purpose: Dump data associated with the tag to a string. Basically has the same function as Describe()

Args: sDescription = string to concatenate tag dump to, szName = name of the curve to be printed, csSig = color space signature of the LUT data, nIndex = the channel number of color space

Reimplemented from CIccCurve.

380{
381 icChar buf[128], *ptr;
382
383 if (!m_nSize) {
384 sprintf(buf, "BEGIN_CURVE %s\n", szName);
385 sDescription += buf;
386 sDescription += "Y = X\n";
387 }
388 else if (m_nSize==1) {
389 icFloatNumber dGamma = (icFloatNumber)(m_Curve[0] * 256.0);
390 sprintf(buf, "BEGIN_CURVE %s\n", szName);
391 sDescription += buf;
392 sprintf(buf, "Y = X ^ %.4lf\n", dGamma);
393 sDescription += buf;
394 }
395 else {
396 int i;
397
398 sprintf(buf, "BEGIN_LUT %s 1 1\n", szName);
399
400 if (nVerboseness > 75) {
401 sDescription += buf;
402 sDescription += "IN OUT\n";
403
404 sDescription.reserve(sDescription.size() + m_nSize * 20);
405
406 for (i=0; i<(int)m_nSize; i++) {
407 ptr = buf;
408
409 icColorValue(buf, (icFloatNumber)i/(m_nSize-1), csSig, nIndex);
410 ptr += strlen(buf);
411
412 strcpy(ptr, " ");
413 ptr ++;
414
415 icColorValue(ptr, m_Curve[i], csSig, nIndex);
416
417 ptr += strlen(ptr);
418
419 strcpy(ptr, "\n");
420
421 sDescription += buf;
422 }
423 }
424 }
425}

References icColorValue(), CIccTagCurve::m_Curve, and CIccTagCurve::m_nSize.

+ Here is the call graph for this function:

◆ Find() [1/2]

icFloatNumber CIccCurve::Find ( icFloatNumber  v)
inlineinherited
103{ return Find(v, 0, Apply(0), 1.0, Apply(1.0)); }
virtual icFloatNumber Apply(icFloatNumber v) const
Definition IccTagLut.h:101
icFloatNumber Find(icFloatNumber v)
Definition IccTagLut.h:103

References CIccCurve::Apply(), and CIccCurve::Find().

+ Here is the call graph for this function:

◆ Find() [2/2]

icFloatNumber CIccCurve::Find ( icFloatNumber  v,
icFloatNumber  p0,
icFloatNumber  v0,
icFloatNumber  p1,
icFloatNumber  v1 
)
protectedinherited

Name: CIccCurve::Find

Purpose: Read in the tag contents into a data block

Args: v = index to be searched, v0 = index less than/equal to v, p0 = the value at index v0, v1 = index greater than/equal to v, p1 = value at index v1

Return: The value at the requested index

110{
111 if (v<=v0)
112 return p0;
113 if (v>=v1)
114 return p1;
115
116 if (p1-p0 <= 0.00001) {
117 icFloatNumber d0 = (icFloatNumber)fabs(v-v0);
118 icFloatNumber d1 = (icFloatNumber)fabs(v1-v);
119
120 if (d0<d1)
121 return p0;
122 return p1;
123 }
124
125 icFloatNumber np = (icFloatNumber)((p0 + p1)/2.0);
126 icFloatNumber nv = Apply(np);
127
128 if (v<=nv) {
129 return Find(v, p0, v0, np, nv);
130 }
131 return Find(v, np, nv, p1, v1);
132}

References CIccCurve::Apply(), and CIccCurve::Find().

Referenced by CIccCurve::Find(), and CIccCurve::Find().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ GetClassName()

virtual const char * CIccTagXmlCurve::GetClassName ( ) const
inlinevirtual

Reimplemented from CIccTagCurve.

503{return "CIccTagXmlCurve"; }

◆ GetData()

icFloatNumber * CIccTagCurve::GetData ( icUInt32Number  index)
inlineinherited
147{return &m_Curve[index];}

References CIccTagCurve::m_Curve.

Referenced by ParseXml().

+ Here is the caller graph for this function:

◆ GetExtClassName()

virtual const char * CIccTagXml::GetExtClassName ( ) const
inlinevirtualinherited

Implements IIccExtensionTag.

79{ return "CIccTagXml"; }

Referenced by icProfDescToXml(), and icXmlParseProfDesc().

+ Here is the caller graph for this function:

◆ GetExtDerivedClassName()

virtual const char * CIccCurveXml::GetExtDerivedClassName ( ) const
inlinevirtualinherited

Reimplemented from CIccTagXml.

492{return "CIccCurveXml"; }

◆ GetExtension()

virtual IIccExtensionTag * CIccTagXmlCurve::GetExtension ( )
inlinevirtual

Reimplemented from CIccTag.

505{return this; }

◆ GetSize()

icUInt32Number CIccTagCurve::GetSize ( ) const
inlineinherited
148{ return m_nSize; }

References CIccTagCurve::m_nSize.

Referenced by CIccTagLut8::Validate(), CIccTagLut16::Validate(), CIccTagLut8::Write(), and CIccTagLut16::Write().

+ Here is the caller graph for this function:

◆ GetTagArrayType()

virtual icArraySignature CIccTag::GetTagArrayType ( ) const
inlinevirtualinherited

Reimplemented in CIccTagArray.

133{ return icSigUndefinedArray; }
@ icSigUndefinedArray
Definition icProfileHeader.h:617

References icSigUndefinedArray.

Referenced by icGetTagArrayHandlerOfType(), and CIccProfileXml::ParseTag().

+ Here is the caller graph for this function:

◆ GetTagStructType()

virtual icStructSignature CIccTag::GetTagStructType ( ) const
inlinevirtualinherited

Reimplemented in CIccTagStruct.

132{ return icSigUndefinedStruct; }
@ icSigUndefinedStruct
Definition icProfileHeader.h:606

References icSigUndefinedStruct.

Referenced by icGetTagStructHandlerOfType(), CIccArrayColorantInfo::Validate(), and CIccArrayNamedColor::Validate().

+ Here is the caller graph for this function:

◆ GetType()

virtual icTagTypeSignature CIccTagCurve::GetType ( ) const
inlinevirtualinherited

Function: GetType()

Purpose: Get Tag Type. Each derived tag will implement it's own GetType() function.

Reimplemented from CIccTag.

136{ return icSigCurveType; }
@ icSigCurveType
Definition icProfileHeader.h:533

References icSigCurveType.

Referenced by CIccTagCurve::Write().

+ Here is the caller graph for this function:

◆ IsArrayType()

virtual bool CIccTag::IsArrayType ( )
inlinevirtualinherited

Reimplemented in CIccTagXYZ, CIccTagChromaticity, CIccTagSparseMatrixArray, CIccTagFixedNum< T, Tsig >, CIccTagNum< T, Tsig >, CIccTagFloatNum< T, Tsig >, and CIccTagData.

135{ return false; }

Referenced by MyTagDialog::MyTagDialog(), and DumpTag().

+ Here is the caller graph for this function:

◆ IsIdentity()

bool CIccTagCurve::IsIdentity ( )
virtualinherited

Name: CIccTagCurve::IsIdentity

Purpose: Checks if this is an identity curve.

Return: true if the curve is an identity

Reimplemented from CIccCurve.

536{
537 if (!m_nSize) {
538 return true;
539 }
540
541 if (m_nSize==1) {
542 return IsUnity(icFloatNumber(m_Curve[0]*65535.0/256.0));
543 }
544
546 for (i=0; i<m_nSize; i++) {
548 return false;
549 }
550 }
551
552 return true;
553}
static bool IsUnity(const icFloatNumber &num)
Definition IccTagLut.cpp:520
const icFloatNumber VERYSMALLNUM
Definition IccTagLut.cpp:519

References IsUnity(), CIccTagCurve::m_Curve, CIccTagCurve::m_nMaxIndex, CIccTagCurve::m_nSize, and VERYSMALLNUM.

Referenced by ToXml().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ IsMBBType()

virtual bool CIccTag::IsMBBType ( )
inlinevirtualinherited

Reimplemented in CIccMBB.

136{ return false; } //If true then CIccTag can be cast as an CIccMBB

Referenced by CIccProfileXml::ParseTag().

+ Here is the caller graph for this function:

◆ IsNumArrayType()

virtual bool CIccTag::IsNumArrayType ( ) const
inlinevirtualinherited

Reimplemented in CIccTagSparseMatrixArray, CIccTagFixedNum< T, Tsig >, CIccTagNum< T, Tsig >, and CIccTagFloatNum< T, Tsig >.

137{ return false;} //If true then CIccTag can be cast as a CIccTagNumArray

Referenced by CIccArrayNamedColor::FindDeviceColor(), CIccArrayNamedColor::FindPcsColor(), CIccArrayNamedColor::FindSpectralColor(), CIccTagStruct::GetElemNumberValue(), CIccStructNamedColor::GetNumArray(), CIccMpeXmlTintArray::ParseXml(), and CIccMpeTintArray::Read().

+ Here is the caller graph for this function:

◆ IsSupported()

virtual bool CIccTag::IsSupported ( )
inlinevirtualinherited

Function: IsSupported(size, pIO) - Check if tag fully supported for apply purposes. By Default inherited classes are supported. Unknown tag types are not supported.

Returns true if tag type is supported.

Reimplemented in CIccTagUnknown, CIccTagEmbeddedProfile, and CIccTagMultiProcessElement.

153{ return true; }

◆ NewCopy()

virtual CIccTag * CIccTagCurve::NewCopy ( ) const
inlinevirtualinherited

Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.

Parameter(s): none

Returns a new CIccTag object that is a copy of this object.

Reimplemented from CIccCurve.

133{ return new CIccTagCurve(*this);}
Definition IccTagLut.h:128

References CIccTagCurve::CIccTagCurve().

+ Here is the call graph for this function:

◆ operator[]()

icFloatNumber & CIccTagCurve::operator[] ( icUInt32Number  index)
inlineinherited
146{return m_Curve[index];}

References CIccTagCurve::m_Curve.

Referenced by main(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagLut8::Write(), and CIccTagLut16::Write().

+ Here is the caller graph for this function:

◆ ParseXml() [1/2]

bool CIccTagXmlCurve::ParseXml ( xmlNode *  pNode,
icConvertType  nType,
std::string &  parseStr 
)
virtual

Implements CIccCurveXml.

2571{
2572 xmlNode *pCurveNode;
2573 pCurveNode = icXmlFindNode(pNode, "Curve");
2574
2575 if(pCurveNode){
2576 const char *filename = icXmlAttrValue(pCurveNode, "File");
2577
2578 // file exists
2579 if (filename[0]) {
2580 CIccIO *file = IccOpenFileIO(filename, "rb");
2581 if (!file){
2582 parseStr += "Error! - File '";
2583 parseStr += filename;
2584 parseStr +="' not found.\n";
2585 delete file;
2586 return false;
2587 }
2588
2589 const char *format = icXmlAttrValue(pCurveNode, "Format");
2590
2591 // format is text
2592 if (!strcmp(format, "text")) {
2593 icUInt32Number num = file->GetLength();
2594 char *buf = (char *) new char[num];
2595
2596 if (!buf) {
2597 perror("Memory Error");
2598 parseStr += "'";
2599 parseStr += filename;
2600 parseStr += "' may not be a valid text file.\n";
2601 delete [] buf;
2602 delete file;
2603 return false;
2604 }
2605
2606 if (file->Read8(buf, num) !=num) {
2607 perror("Read-File Error");
2608 parseStr += "'";
2609 parseStr += filename;
2610 parseStr += "' may not be a valid text file.\n";
2611 delete [] buf;
2612 delete file;
2613 return false;
2614 }
2615
2616 // lut8type
2617 if (nType == icConvert8Bit) {
2618 CIccUInt8Array data;
2619
2620 //if (!data.ParseTextArray(buf)) {
2621 if (!data.ParseTextArrayNum(buf, num, parseStr)){
2622 parseStr += "File '";
2623 parseStr += filename;
2624 parseStr += "' is not a valid text file.\n";
2625 SetSize(0);
2626 delete [] buf;
2627 delete file;
2628 return false;
2629 }
2630
2631 else {
2632 SetSize(data.GetSize());
2633 icUInt8Number *src = data.GetBuf();
2634 icFloatNumber *dst = GetData(0);
2635
2637 for (i=0; i<data.GetSize(); i++) {
2638 *dst = (icFloatNumber)(*src) / 255.0f;
2639 dst++;
2640 src++;
2641 }
2642
2643 //if (i!=256) {
2644 //printf("Error! - Input/Output table does not have 256 entries.\n");
2645 //SetSize(0);
2646 //return false;
2647 //}
2648 delete[] buf;
2649 delete file;
2650 return true;
2651 }
2652 }
2653
2654 //lut16type
2655 else if (nType == icConvert16Bit || nType == icConvertVariable) {
2656 CIccUInt16Array data;
2657
2658 //if (!data.ParseTextArray(buf)) {
2659 if (!data.ParseTextArrayNum(buf, num, parseStr)){
2660 parseStr += "File '";
2661 parseStr += filename;
2662 parseStr += "' is not a valid text file.\n";
2663 SetSize(0);
2664 delete[] buf;
2665 delete file;
2666 return false;
2667 }
2668
2669 else {
2670 SetSize(data.GetSize());
2671
2672 icUInt16Number *src = data.GetBuf();
2673 icFloatNumber *dst = GetData(0);
2674
2676 for (i=0; i<data.GetSize(); i++) {
2677 *dst = (icFloatNumber)(*src) / 65535.0f;
2678 dst++;
2679 src++;
2680 }
2681 }
2682 delete[] buf;
2683 delete file;
2684 return true;
2685 }
2686
2687 //float type
2688 else if (nType == icConvertFloat){
2689 CIccFloatArray data;
2690
2691 //if (!data.ParseTextArray(buf)) {
2692 if (!data.ParseTextArrayNum(buf, num, parseStr)){
2693 parseStr += "File '";
2694 parseStr += filename;
2695 parseStr += "' is not a valid text file.\n";
2696 SetSize(0);
2697 delete[] buf;
2698 delete file;
2699 return false;
2700 }
2701
2702 else {
2703 SetSize(data.GetSize());
2704 icFloatNumber *src = data.GetBuf();
2705 icFloatNumber *dst = GetData(0);
2706
2708 for (i=0; i<data.GetSize(); i++) {
2709 *dst = *src;
2710 dst++;
2711 src++;
2712 }
2713 }
2714 delete[] buf;
2715 delete file;
2716 return true;
2717 }
2718 else {
2719 delete[] buf;
2720 delete file;
2721 return false;
2722 }
2723 }
2724 // format is binary
2725 else if (!strcmp(format, "binary")) {
2726 const char *order = icXmlAttrValue(pCurveNode, "Endian");
2727 bool little_endian = !strcmp(order, "little");
2728
2729 if (nType == icConvert8Bit){
2730 icUInt32Number num = file->GetLength();
2731 icUInt8Number value;
2732
2733 SetSize(num);
2734 icFloatNumber *dst = GetData(0);
2736 for (i=0; i<num; i++) {
2737 if (!file->Read8(&value)) {
2738 perror("Read-File Error");
2739 parseStr += "'";
2740 parseStr += filename;
2741 parseStr += "' may not be a valid binary file.\n";
2742 delete file;
2743 return false;
2744 }
2745 *dst++ = (icFloatNumber)value / 255.0f;
2746 }
2747 delete file;
2748 return true;
2749 }
2750 else if (nType == icConvert16Bit || nType == icConvertVariable){
2751 icUInt32Number num = file->GetLength() / sizeof(icUInt16Number);
2752 icUInt16Number value;
2753 icUInt8Number *ptr = (icUInt8Number*)&value;
2754
2755 SetSize(num);
2756 icFloatNumber *dst = GetData(0);
2758 for (i=0; i<num; i++) {
2759 if (!file->Read16(&value)) { //this assumes data is big endian
2760 perror("Read-File Error");
2761 parseStr += "'";
2762 parseStr += filename;
2763 parseStr += "' may not be a valid binary file.\n";
2764 delete file;
2765 return false;
2766 }
2767#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
2768 if (little_endian) {
2769#else
2770 if (!little_endian) {
2771#endif
2772 icUInt8Number t = ptr[0];
2773 ptr[0] = ptr[1];
2774 ptr[1] = t;
2775 }
2776 *dst++ = (icFloatNumber)value / 65535.0f;
2777 }
2778 delete file;
2779 return true;
2780 }
2781 else if (nType == icConvertFloat) {
2782 icUInt32Number num = file->GetLength()/sizeof(icFloat32Number);
2783 icFloat32Number value;
2784 icUInt8Number *ptr = (icUInt8Number*)&value;
2785
2786 SetSize(num);
2787 icFloatNumber *dst = GetData(0);
2788
2790 for (i=0; i<num; i++) {
2791 if (!file->ReadFloat32Float(&value)) { //assumes data is big endian
2792 perror("Read-File Error");
2793 parseStr += "'";
2794 parseStr += filename;
2795 parseStr += "' may not be a valid binary file.\n";
2796 delete file;
2797 return false;
2798 }
2799#ifdef ICC_BYTE_ORDER_LITTLE_ENDIAN
2800 if (little_endian) {
2801#else
2802 if (!little_endian) {
2803#endif
2804 icUInt8Number tmp;
2805 tmp = ptr[0]; ptr[0] = ptr[3]; ptr[3] = tmp;
2806 tmp = ptr[1]; ptr[1] = ptr[2]; ptr[2] = tmp;
2807 }
2808 *dst++ = value;
2809 }
2810 delete file;
2811 return true;
2812 }
2813 else { //not 8bit/16bit/float
2814 delete file;
2815 return false;
2816 }
2817 }
2818 else {//not text/binary
2819 delete file;
2820 return false;
2821 }
2822 }
2823 // no file
2824 else{
2825 if (nType == icConvert8Bit){
2826 CIccUInt8Array data;
2827
2828 if (!data.ParseArray(pCurveNode->children)) {
2829 const char *szSize = icXmlAttrValue(pCurveNode, "IdentitySize");
2830
2831 if (szSize && *szSize) {
2832 icUInt32Number nSize = (icUInt32Number)atol(szSize);
2833 SetSize(nSize);
2834
2835 if (m_nSize == nSize) {
2837 icFloatNumber *dst = GetData(0);
2838 for (j=0; j<nSize; j++) {
2839 *dst = (icFloatNumber)(j) / (icFloatNumber)(nSize-1);
2840 dst++;
2841 }
2842 }
2843 else
2844 return false;
2845 }
2846 else { //Identity curve with size=0
2847 SetSize(0);
2848 }
2849 }
2850 else {
2851 SetSize(data.GetSize());
2852
2854 icUInt8Number *src = data.GetBuf();
2855 icFloatNumber *dst = GetData(0);
2856 for (j=0; j<data.GetSize(); j++) {
2857 *dst = (icFloatNumber)(*src) / 255.0f;
2858 dst++;
2859 src++;
2860 }
2861
2862 //if (j!=256) {
2863 //printf("Error! - Input/Output table does not have 256 entries.\n");
2864 //SetSize(0);
2865 //return false;
2866 //}
2867 }
2868 return true;
2869 }
2870
2871 else if (nType == icConvert16Bit || nType == icConvertVariable){
2872 CIccUInt16Array data;
2873
2874 if (!data.ParseArray(pCurveNode->children)) {
2875 const char *szSize = icXmlAttrValue(pCurveNode, "IdentitySize");
2876
2877 if (szSize && *szSize) {
2878 icUInt32Number nSize = (icUInt32Number)atol(szSize);
2879 SetSize(nSize);
2880
2881 if (m_nSize == nSize) {
2883 icFloatNumber *dst = GetData(0);
2884 for (j=0; j<nSize; j++) {
2885 *dst = (icFloatNumber)(j) / (icFloatNumber)(nSize-1);
2886 dst++;
2887 }
2888 }
2889 else
2890 return false;
2891 }
2892 else { //Identity curve with size=0
2893 SetSize(0);
2894 }
2895 }
2896 else {
2897 SetSize(data.GetSize());
2898
2900 icUInt16Number *src = data.GetBuf();
2901 icFloatNumber *dst = GetData(0);
2902 for (j=0; j<data.GetSize(); j++) {
2903 *dst = (icFloatNumber)(*src) / 65535.0f;
2904 dst++;
2905 src++;
2906 }
2907 }
2908 return true;
2909 }
2910 else if (nType == icConvertFloat){
2911 CIccFloatArray data;
2912
2913 if (!data.ParseArray(pCurveNode->children)) {
2914 const char *szSize = icXmlAttrValue(pCurveNode, "IdentitySize");
2915
2916 if (szSize && *szSize) {
2917 icUInt32Number nSize = (icUInt32Number)atol(szSize);
2918
2919 SetSize(nSize);
2920
2921 if (m_nSize == nSize) {
2923 icFloatNumber *dst = GetData(0);
2924 for (j=0; j<nSize; j++) {
2925 *dst = (icFloatNumber)(j) / (icFloatNumber)(nSize-1);
2926 dst++;
2927 }
2928 }
2929 else
2930 return false;
2931 }
2932 else { //Identity curve with size=0
2933 SetSize(0);
2934 }
2935 }
2936 else {
2937 SetSize(data.GetSize());
2938
2940 icFloatNumber *src = data.GetBuf();
2941 icFloatNumber *dst = GetData(0);
2942 for (j=0; j<data.GetSize(); j++) {
2943 *dst = *src;
2944 dst++;
2945 src++;
2946 }
2947 }
2948 return true;
2949 }
2950 // unsupported encoding
2951 else
2952 return false;
2953 }
2954 }
2955 return false;
2956}
unsigned char icUInt8Number
Definition icProfileHeader.h:250
float icFloat32Number
Definition icProfileHeader.h:313
@ icConvert8Bit
Definition IccXmlConfig.h:68
@ icConvertFloat
Definition IccXmlConfig.h:70
@ icConvert16Bit
Definition IccXmlConfig.h:69
@ icConvertVariable
Definition IccXmlConfig.h:71
xmlNode * icXmlFindNode(xmlNode *pNode, const char *szNodeName)
Definition IccUtilXml.cpp:687
const char * icXmlAttrValue(xmlAttr *attr, const char *szDefault="")
Definition IccUtilXml.cpp:572
CIccIO * IccOpenFileIO(const icChar *szFilename, const char *szAttr)
Definition IccIoXml.cpp:100
Definition IccIO.h:97
icInt32Number ReadFloat32Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:302
virtual icInt32Number GetLength()
Definition IccIO.h:130
virtual icInt32Number Read8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:104
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
bool SetSize(icUInt32Number nSize, icTagCurveSizeInit nSizeOpt=icInitZero)
Definition IccTagLut.cpp:439
icFloatNumber * GetData(icUInt32Number index)
Definition IccTagLut.h:147
Definition IccUtilXml.h:145
static bool ParseArray(T *buf, icUInt32Number nBufSize, xmlNode *pNode)
Definition IccUtilXml.cpp:1034
bool ParseTextArrayNum(const char *szText, icUInt32Number num, std::string &parseStr)
Definition IccUtilXml.cpp:807
T * GetBuf()
Definition IccUtilXml.h:165
icUInt32Number GetSize()
Definition IccUtilXml.h:166

References CIccXmlArrayType< T, Tsig >::GetBuf(), CIccTagCurve::GetData(), CIccIO::GetLength(), CIccXmlArrayType< T, Tsig >::GetSize(), icConvert16Bit, icConvert8Bit, icConvertFloat, icConvertVariable, IccOpenFileIO(), icXmlAttrValue(), icXmlFindNode(), CIccTagCurve::m_nSize, CIccXmlArrayType< T, Tsig >::ParseArray(), CIccXmlArrayType< T, Tsig >::ParseTextArrayNum(), CIccIO::Read16(), CIccIO::Read8(), CIccIO::ReadFloat32Float(), and CIccTagCurve::SetSize().

Referenced by ParseXml().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ParseXml() [2/2]

bool CIccTagXmlCurve::ParseXml ( xmlNode *  pNode,
std::string &  parseStr 
)
virtual

Implements CIccTagXml.

2564{
2565 return ParseXml(pNode, icConvert16Bit, parseStr);
2566}
virtual bool ParseXml(xmlNode *pNode, std::string &parseStr)
Definition IccTagXml.cpp:2563

References icConvert16Bit, and ParseXml().

+ Here is the call graph for this function:

◆ Read() [1/2]

bool CIccTagCurve::Read ( icUInt32Number  size,
CIccIO pIO 
)
virtualinherited

Name: CIccTagCurve::Read

Purpose: Read in the tag contents into a data block

Args: size - # of bytes in tag, pIO - IO object to read tag from

Return: true = successful, false = failure

Reimplemented from CIccTag.

230{
232
233 icUInt32Number headerSize = sizeof(icTagTypeSignature) +
234 sizeof(icUInt32Number) +
235 sizeof(icUInt32Number);
236 if (headerSize > size)
237 return false;
238
239 if (!pIO) {
240 return false;
241 }
242
243 if (!pIO->Read32(&sig))
244 return false;
245
246 if (!pIO->Read32(&m_nReserved))
247 return false;
248
249 icUInt32Number nSize;
250
251 if (!pIO->Read32(&nSize))
252 return false;
253
254 if (headerSize + (icUInt64Number)nSize * sizeof(icUInt16Number) > size)
255 return false;
256
257 if (!SetSize(nSize, icInitNone))
258 return false;
259
260 if (m_nSize) {
262 return false;
263 }
264
265 return true;
266}
long icInt32Number
Definition icProfileHeader.h:291
icTagTypeSignature
Definition icProfileHeader.h:526
icUInt32Number icUInt64Number[2]
Definition icProfileHeader.h:268
@ icInitNone
Definition IccTagLut.h:115
icInt32Number ReadUInt16Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:236
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
icUInt32Number m_nReserved
Definition IccTagBasic.h:235

References icInitNone, CIccTagCurve::m_Curve, CIccTag::m_nReserved, CIccTagCurve::m_nSize, CIccIO::Read32(), CIccIO::ReadUInt16Float(), and CIccTagCurve::SetSize().

+ Here is the call graph for this function:

◆ Read() [2/2]

virtual bool CIccTag::Read ( icUInt32Number  size,
CIccIO pIO,
CIccProfile pProfile 
)
inlinevirtualinherited

Function: Read(size, pIO) - Read tag from file. Each derived tag will implement it's own Read() function.

Parameter(s): size - number of bytes in tag including the type signature. pIO - IO object used to read in tag. The IO object should already be initialized to point to the begining of the tag.

Returns true if Read is successful.

Reimplemented in CIccTagEmbeddedProfile.

197{ return Read(size, pIO); }
virtual bool Read(icUInt32Number size, CIccIO *pIO)
Definition IccTagBasic.h:167

References CIccTag::Read().

+ Here is the call graph for this function:

◆ ReadAll()

virtual bool CIccTag::ReadAll ( )
inlinevirtualinherited

Function: ReadAll() - Read All sub data for tag from file. Called by CIccProfile::ReadAll() to read all sub data for tag

Returns true if ReadAll is successful.

Reimplemented in CIccTagEmbeddedProfile.

175{ return true; }

◆ SetGamma()

bool CIccTagCurve::SetGamma ( icFloatNumber  gamma)
inherited

Name: refIccMAX::CIccTagCurve::SetGamma

Purpose: Set the curve with a single gamma value.

Args: gamma - gamma value to use

503{
504 if (!SetSize(1, icInitNone))
505 return false;
506
507 icInt16Number whole = (icInt16Number)gamma;
508 icFloatNumber frac = gamma - (icFloatNumber)whole;
509
510 m_Curve[0] = (icFloatNumber)((whole * 256) + (frac*256.0)) / (icFloatNumber)65535.0;
511 return true;
512}
short icInt16Number
Definition icProfileHeader.h:285

References icInitNone, CIccTagCurve::m_Curve, and CIccTagCurve::SetSize().

+ Here is the call graph for this function:

◆ SetSize()

bool CIccTagCurve::SetSize ( icUInt32Number  nSize,
icTagCurveSizeInit  nSizeOpt = icInitZero 
)
inherited

Name: CIccTagCurve::SetSize

Purpose: Sets the size of the curve array.

Args: nSize - number of entries in the curve, nSizeOpt - flag to zero newly formed values

440{
441 if (nSize==m_nSize)
442 return true;
443
444 if (!nSize && m_Curve) {
445 free(m_Curve);
446 m_Curve = NULL;
447 }
448 else {
449 if (!m_Curve)
450 m_Curve = (icFloatNumber*)malloc(nSize*sizeof(icFloatNumber));
451 else
453
454 if (!m_Curve) {
455 m_nSize = 0;
456 return false;
457 }
458
459 switch (nSizeOpt) {
460 case icInitNone:
461 default:
462 break;
463
464 case icInitZero:
465 if (m_nSize < nSize) {
466 memset(&m_Curve[m_nSize], 0, (nSize-m_nSize)*sizeof(icFloatNumber));
467 }
468 break;
469
470 case icInitIdentity:
471 if (nSize>1) {
473 icFloatNumber last = (icFloatNumber)(nSize-1);
474
475 for (i=0; i<nSize; i++) {
476 m_Curve[i] = (icFloatNumber)i/last;
477 }
478 }
479 else if (nSize==1) {
480 //Encode a gamma 1.0 u8Fixed8Number converted to 16 bit as a 0.0 to 1.0 float
481 m_Curve[0] = (icFloatNumber)(0x0100) / (icFloatNumber)65535.0;
482 }
483 break;
484 }
485 }
486 m_nSize = nSize;
487 m_nMaxIndex = (icUInt16Number)(nSize - 1);
488
489 return true;
490}
@ icInitZero
Definition IccTagLut.h:116
@ icInitIdentity
Definition IccTagLut.h:117
ICCPROFLIB_API void * icRealloc(void *ptr, size_t size)
Definition IccUtil.cpp:111

References icInitIdentity, icInitNone, icInitZero, icRealloc(), CIccTagCurve::m_Curve, CIccTagCurve::m_nMaxIndex, and CIccTagCurve::m_nSize.

Referenced by ParseXml(), CIccTagCurve::Read(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagLut8::SetColorSpaces(), CIccTagLut16::SetColorSpaces(), and CIccTagCurve::SetGamma().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ToXml() [1/2]

bool CIccTagXmlCurve::ToXml ( std::string &  xml,
icConvertType  nType,
std::string  blanks = "" 
)
virtual

Implements CIccCurveXml.

2504{
2505 char buf[40];
2506 int i;
2507
2508 if (!m_nSize) {
2509 xml += blanks + "<Curve/>\n";
2510 }
2511 else if (IsIdentity()) {
2512 xml += blanks + "<Curve IdentitySize=\"";
2513 sprintf(buf, "%d", m_nSize);
2514 xml += buf;
2515 xml += "\"/>\n";
2516 }
2517 else if (nType==icConvert8Bit) {
2518 xml += blanks + "<Curve>\n" + blanks;
2519 for (i=0; i<(int)m_nSize; i++) {
2520 if ( i && !(i%16)) {
2521 xml += "\n";
2522 xml += blanks;
2523 }
2524 sprintf(buf, " %3u", (int)(m_Curve[i] * 255.0 + 0.5));
2525 xml += buf;
2526 }
2527 xml += "\n";
2528 xml += blanks + "</Curve>\n";
2529 }
2530 else if (nType==icConvert16Bit || nType==icConvertVariable) {
2531 xml += blanks + "<Curve>\n" + blanks;
2532 for (i=0; i<(int)m_nSize; i++) {
2533 if (i && !(i%16)) {
2534 xml += "\n";
2535 xml += blanks + " ";
2536 }
2537 sprintf(buf, " %5u", (int)(m_Curve[i] * 65535.0 + 0.5));
2538 xml += buf;
2539 }
2540 xml += "\n";
2541 xml += blanks + "</Curve>\n";
2542 }
2543 else if (nType==icConvertFloat) {
2544 xml += blanks + "<Curve>\n" + blanks + " ";
2545 for (i=0; i<(int)m_nSize; i++) {
2546 if (i && !(i%16)) {
2547 xml += "\n";
2548 xml += blanks + " ";
2549 }
2550 sprintf(buf, " %13.8f", m_Curve[i]);
2551 xml += buf;
2552 }
2553 xml += "\n";
2554 xml += blanks + "</Curve>\n";
2555 }
2556 else
2557 return false;
2558
2559 return true;
2560}
virtual bool IsIdentity()
Definition IccTagLut.cpp:535

References icConvert16Bit, icConvert8Bit, icConvertFloat, icConvertVariable, CIccTagCurve::IsIdentity(), CIccTagCurve::m_Curve, and CIccTagCurve::m_nSize.

Referenced by ToXml().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ ToXml() [2/2]

bool CIccTagXmlCurve::ToXml ( std::string &  xml,
std::string  blanks = "" 
)
virtual

Implements CIccTagXml.

2498{
2499 return ToXml(xml, icConvert16Bit, blanks);
2500}
virtual bool ToXml(std::string &xml, std::string blanks="")
Definition IccTagXml.cpp:2497

References icConvert16Bit, and ToXml().

+ Here is the call graph for this function:

◆ Validate()

icValidateStatus CIccTagCurve::Validate ( std::string  sigPath,
std::string &  sReport,
const CIccProfile pProfile = NULL 
) const
virtualinherited

Name: CIccTagCurve::Validate

Purpose: Check tag data validity.

Args: sig = signature of tag being validated, sReport = String to add report information to

Return: icValidateStatusOK if valid, or other error status.

Reimplemented from CIccTag.

614{
615 icValidateStatus rv = CIccTag::Validate(sigPath, sReport, pProfile);
616
617 CIccInfo Info;
618 std::string sSigPathName = Info.GetSigPathName(sigPath);
619 icSignature sig = icGetFirstSigPathSig(sigPath);
620
621 if (sig==icSigBlueTRCTag || sig==icSigRedTRCTag || sig==icSigGreenTRCTag || sig==icSigGrayTRCTag) {
622 if (m_nSize>1) {
623 if (m_Curve) {
624 if (m_Curve[0]>0.0 || m_Curve[m_nSize-1]<1.0) {
625 sReport += icMsgValidateWarning;
626 sReport += sSigPathName;
627 sReport += " - Curve cannot be accurately inverted.\n";
629 }
630 }
631 }
632 }
633
634 return rv;
635}
icUInt32Number icSignature
Definition icProfileHeader.h:271
@ icSigGrayTRCTag
Definition icProfileHeader.h:421
@ icSigGreenTRCTag
Definition icProfileHeader.h:424
@ icSigRedTRCTag
Definition icProfileHeader.h:463
@ icSigBlueTRCTag
Definition icProfileHeader.h:349
icValidateStatus
Definition IccDefs.h:119
@ icValidateWarning
Definition IccDefs.h:121
ICCPROFLIB_API icSignature icGetFirstSigPathSig(std::string sigPath)
Definition IccUtil.cpp:1201
ICCPROFLIB_API const char * icMsgValidateWarning
Definition IccUtil.cpp:90
ICCPROFLIB_API icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Definition IccUtil.cpp:244
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Definition IccTagBasic.cpp:164

References CIccInfo::GetSigPathName(), icGetFirstSigPathSig(), icMaxStatus(), icMsgValidateWarning, icSigBlueTRCTag, icSigGrayTRCTag, icSigGreenTRCTag, icSigRedTRCTag, icValidateWarning, CIccTagCurve::m_Curve, CIccTagCurve::m_nSize, and CIccTag::Validate().

+ Here is the call graph for this function:

◆ Write()

bool CIccTagCurve::Write ( CIccIO pIO)
virtualinherited

Name: CIccTagCurve::Write

Purpose: Write the tag to a file

Args: pIO - The IO object to write tag to.

Return: true = succesful, false = failure

Reimplemented from CIccTag.

283{
285
286 if (!pIO)
287 return false;
288
289 if (!pIO->Write32(&sig))
290 return false;
291
292 if (!pIO->Write32(&m_nReserved))
293 return false;
294
295 if (!pIO->Write32(&m_nSize))
296 return false;
297
298 if (m_nSize)
300 return false;
301
302 pIO->Align32();
303
304 return true;
305}
bool Align32()
Write operation to make sure that filelength is evenly divisible by 4.
Definition IccIO.cpp:341
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152
icInt32Number WriteUInt16Float(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:252
virtual icTagTypeSignature GetType() const
Definition IccTagLut.h:136

References CIccIO::Align32(), CIccTagCurve::GetType(), CIccTagCurve::m_Curve, CIccTag::m_nReserved, CIccTagCurve::m_nSize, CIccIO::Write32(), and CIccIO::WriteUInt16Float().

+ Here is the call graph for this function:

Field Documentation

◆ m_Curve

◆ m_nMaxIndex

◆ m_nReserved

icUInt32Number CIccTag::m_nReserved
inherited

Referenced by CIccTag::CIccTag(), CIccTagMultiProcessElement::CIccTagMultiProcessElement(), CIccTagMultiProcessElement::CIccTagMultiProcessElement(), CIccTagMultiProcessElement::operator=(), CIccProfileXml::ParseTag(), CIccTagXmlStruct::ParseTag(), CIccMpeXmlTintArray::ParseXml(), CIccTagXmlArray::ParseXml(), CIccTagText::Read(), CIccTagUtf8Text::Read(), CIccTagZipUtf8Text::Read(), CIccTagUtf16Text::Read(), CIccTagTextDescription::Read(), CIccTagSignature::Read(), CIccTagNamedColor2::Read(), CIccTagXYZ::Read(), CIccTagChromaticity::Read(), CIccTagCicp::Read(), CIccTagSparseMatrixArray::Read(), CIccTagFixedNum< T, Tsig >::Read(), CIccTagNum< T, Tsig >::Read(), CIccTagFloatNum< T, Tsig >::Read(), CIccTagMeasurement::Read(), CIccTagMultiLocalizedUnicode::Read(), CIccTagData::Read(), CIccTagDateTime::Read(), CIccTagColorantOrder::Read(), CIccTagColorantTable::Read(), CIccTagViewingConditions::Read(), CIccTagProfileSeqDesc::Read(), CIccTagResponseCurveSet16::Read(), CIccTagSpectralDataInfo::Read(), CIccTagSpectralViewingConditions::Read(), CIccTagEmbeddedHeightImage::Read(), CIccTagEmbeddedNormalImage::Read(), CIccTagStruct::Read(), CIccTagArray::Read(), CIccTagDict::Read(), CIccTagCurve::Read(), CIccTagParametricCurve::Read(), CIccTagLutAtoB::Read(), CIccTagLut8::Read(), CIccTagLut16::Read(), CIccTagGamutBoundaryDesc::Read(), CIccTagMultiProcessElement::Read(), CIccTagProfileSequenceId::Read(), CIccTagEmbeddedProfile::Read(), CIccTag::Validate(), CIccTagText::Write(), CIccTagUtf8Text::Write(), CIccTagZipUtf8Text::Write(), CIccTagUtf16Text::Write(), CIccTagTextDescription::Write(), CIccTagSignature::Write(), CIccTagNamedColor2::Write(), CIccTagXYZ::Write(), CIccTagChromaticity::Write(), CIccTagCicp::Write(), CIccTagSparseMatrixArray::Write(), CIccTagFixedNum< T, Tsig >::Write(), CIccTagNum< T, Tsig >::Write(), CIccTagFloatNum< T, Tsig >::Write(), CIccTagMeasurement::Write(), CIccTagMultiLocalizedUnicode::Write(), CIccTagData::Write(), CIccTagDateTime::Write(), CIccTagColorantOrder::Write(), CIccTagColorantTable::Write(), CIccTagViewingConditions::Write(), CIccTagProfileSeqDesc::Write(), CIccTagResponseCurveSet16::Write(), CIccTagSpectralDataInfo::Write(), CIccTagSpectralViewingConditions::Write(), CIccTagEmbeddedHeightImage::Write(), CIccTagEmbeddedNormalImage::Write(), CIccTagStruct::Write(), CIccTagArray::Write(), CIccTagDict::Write(), CIccTagEmbeddedProfile::Write(), CIccTagCurve::Write(), CIccTagParametricCurve::Write(), CIccTagLutAtoB::Write(), CIccTagLut8::Write(), CIccTagLut16::Write(), CIccTagGamutBoundaryDesc::Write(), CIccTagMultiProcessElement::Write(), and CIccTagProfileSequenceId::Write().

◆ m_nSize


The documentation for this class was generated from the following files: