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

#include <IccTagBasic.h>

+ Collaboration diagram for CIccResponseCurveStruct:

Public Member Functions

 CIccResponseCurveStruct (const CIccResponseCurveStruct &IRCS)
 
 CIccResponseCurveStruct (icMeasurementUnitSig sig, icUInt16Number nChannels=0)
 
 CIccResponseCurveStruct (icUInt16Number nChannels=0)
 
virtual ~CIccResponseCurveStruct ()
 
void Describe (std::string &sDescription, int nVerboseness)
 
icMeasurementUnitSig GetMeasurementType () const
 
icUInt16Number GetNumChannels () const
 
CIccResponse16ListGetResponseList (icUInt16Number nChannel)
 
CIccResponseCurveStructGetThis ()
 
icXYZNumberGetXYZ (icUInt32Number index)
 
CIccResponseCurveStructoperator= (const CIccResponseCurveStruct &RespCurveStruct)
 
bool Read (icUInt32Number size, CIccIO *pIO)
 
icValidateStatus Validate (std::string &sReport)
 
bool Write (CIccIO *pIO)
 

Protected Attributes

icXYZNumberm_maxColorantXYZ
 
icMeasurementUnitSig m_measurementUnitSig
 
icUInt16Number m_nChannels
 
CIccResponse16Listm_Response16ListArray
 

Detailed Description

Data Class: CIccResponseCurveStruct

Purpose: The base class for response curve structure

Constructor & Destructor Documentation

◆ CIccResponseCurveStruct() [1/3]

CIccResponseCurveStruct::CIccResponseCurveStruct ( icMeasurementUnitSig  sig,
icUInt16Number  nChannels = 0 
)

Name: CIccResponseCurveStruct::CIccResponseCurveStruct

Purpose: Constructor

Args: sig = measurement unit signature indicating the type of measurement data, nChannels = number of channels

9810{
9811 m_nChannels = nChannels;
9813 m_maxColorantXYZ = (icXYZNumber*)calloc(nChannels, sizeof(icXYZNumber));
9815}
Definition icProfileHeader.h:1428
std::list< icResponse16Number > CIccResponse16List
Definition IccTagBasic.h:1552
icUInt16Number m_nChannels
Definition IccTagBasic.h:1585
icXYZNumber * m_maxColorantXYZ
Definition IccTagBasic.h:1587
CIccResponse16List * m_Response16ListArray
Definition IccTagBasic.h:1588
icMeasurementUnitSig m_measurementUnitSig
Definition IccTagBasic.h:1586

References m_maxColorantXYZ, m_measurementUnitSig, m_nChannels, and m_Response16ListArray.

Referenced by CIccTagResponseCurveSet16::NewResponseCurves(), and CIccTagXmlResponseCurveSet16::ParseXml().

+ Here is the caller graph for this function:

◆ CIccResponseCurveStruct() [2/3]

CIccResponseCurveStruct::CIccResponseCurveStruct ( icUInt16Number  nChannels = 0)

Name: CIccResponseCurveStruct::CIccResponseCurveStruct

Purpose: Constructor

Args: nChannels = number of channels

9791{
9792 m_nChannels = nChannels;
9793 m_maxColorantXYZ = (icXYZNumber*)calloc(nChannels, sizeof(icXYZNumber));
9795}

References m_maxColorantXYZ, m_nChannels, and m_Response16ListArray.

Referenced by CIccTagResponseCurveSet16::Read().

+ Here is the caller graph for this function:

◆ CIccResponseCurveStruct() [3/3]

CIccResponseCurveStruct::CIccResponseCurveStruct ( const CIccResponseCurveStruct IRCS)

Name: CIccResponseCurveStruct::CIccResponseCurveStruct

Purpose: Copy Constructor

Args: IRCS = The CIccTagUnknown object to be copied

9828{
9829 m_nChannels = IRCS.m_nChannels;
9831
9834
9836 for (icUInt32Number i=0; i<m_nChannels; i++)
9838}
unsigned long icUInt32Number
Definition icProfileHeader.h:262

References m_maxColorantXYZ, m_measurementUnitSig, m_nChannels, and m_Response16ListArray.

◆ ~CIccResponseCurveStruct()

CIccResponseCurveStruct::~CIccResponseCurveStruct ( )
virtual

Name: CIccResponseCurveStruct::~CIccResponseCurveStruct

Purpose: Destructor

9884{
9885 if (m_maxColorantXYZ)
9886 free(m_maxColorantXYZ);
9887
9889 delete [] m_Response16ListArray;
9890}

References m_maxColorantXYZ, and m_Response16ListArray.

Member Function Documentation

◆ Describe()

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

Name: CIccResponseCurveStruct::Describe

Purpose: Dump data associated with the tag to a string

Args: sDescription - string to concatenate tag dump to

10034{
10035 icChar buf[128];
10036 CIccInfo Fmt;
10037 CIccResponse16List nResponseList;
10038 CIccResponse16List::iterator j;
10039
10040 sDescription += "Measurement Unit: ";
10041 sDescription += Fmt.GetMeasurementUnit((icSignature)GetMeasurementType()); sDescription += "\n";
10042
10043
10044 for (int i=0; i<m_nChannels; i++) {
10045 nResponseList = m_Response16ListArray[i];
10046
10047 sDescription += "\n";
10048 sprintf(buf, "Maximum Colorant XYZ Measurement for Channel-%u : X=%.4lf, Y=%.4lf, Z=%.4lf\n", i+1,
10050 sDescription += buf;
10051
10052 sprintf(buf, "Number of Measurements for Channel-%u : %u\n", i+1, (icUInt32Number)nResponseList.size());
10053 sDescription += buf;
10054
10055 sprintf(buf, "Measurement Data for Channel-%u follows:\n", i+1);
10056 sDescription += buf;
10057
10058 for (j=nResponseList.begin(); j!=nResponseList.end(); j++) {
10059 sprintf(buf, "Device Value= %u : Measurement Value= %.4lf\n", j->deviceCode, icFtoD(j->measurementValue));
10060 sDescription += buf;
10061 }
10062 }
10063}
icUInt32Number icSignature
Definition icProfileHeader.h:271
char icChar
Definition IccDefs.h:110
ICCPROFLIB_API icFloatNumber icFtoD(icS15Fixed16Number num)
Definition IccUtil.cpp:559
Definition IccUtil.h:303
const icChar * GetMeasurementUnit(icSignature sig)
Definition IccUtil.cpp:2247
icMeasurementUnitSig GetMeasurementType() const
Definition IccTagBasic.h:1576

References icResponse16Number::deviceCode, GetMeasurementType(), CIccInfo::GetMeasurementUnit(), icFtoD(), m_maxColorantXYZ, m_nChannels, m_Response16ListArray, icResponse16Number::measurementValue, icXYZNumber::X, icXYZNumber::Y, and icXYZNumber::Z.

Referenced by CIccTagResponseCurveSet16::Describe().

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

◆ GetMeasurementType()

icMeasurementUnitSig CIccResponseCurveStruct::GetMeasurementType ( ) const
inline
1576{return m_measurementUnitSig;}

References m_measurementUnitSig.

Referenced by Describe(), CIccTagResponseCurveSet16::GetResponseCurves(), CIccTagXmlResponseCurveSet16::ToXml(), and Write().

+ Here is the caller graph for this function:

◆ GetNumChannels()

icUInt16Number CIccResponseCurveStruct::GetNumChannels ( ) const
inline
1577{return m_nChannels;}

References m_nChannels.

Referenced by CIccTagXmlResponseCurveSet16::ToXml().

+ Here is the caller graph for this function:

◆ GetResponseList()

CIccResponse16List * CIccResponseCurveStruct::GetResponseList ( icUInt16Number  nChannel)
inline
1580{return &m_Response16ListArray[nChannel];}

References m_Response16ListArray.

Referenced by CIccTagXmlResponseCurveSet16::ParseXml(), and CIccTagXmlResponseCurveSet16::ToXml().

+ Here is the caller graph for this function:

◆ GetThis()

CIccResponseCurveStruct * CIccResponseCurveStruct::GetThis ( )
inline
1581{return this;}

Referenced by CIccTagResponseCurveSet16::GetFirstCurves(), CIccTagResponseCurveSet16::GetNextCurves(), and CIccTagResponseCurveSet16::GetResponseCurves().

+ Here is the caller graph for this function:

◆ GetXYZ()

icXYZNumber * CIccResponseCurveStruct::GetXYZ ( icUInt32Number  index)
inline
1579{return &m_maxColorantXYZ[index];}

References m_maxColorantXYZ.

Referenced by CIccTagXmlResponseCurveSet16::ParseXml(), and CIccTagXmlResponseCurveSet16::ToXml().

+ Here is the caller graph for this function:

◆ operator=()

CIccResponseCurveStruct & CIccResponseCurveStruct::operator= ( const CIccResponseCurveStruct RespCurveStruct)

Name: CIccResponseCurveStruct::operator=

Purpose: Copy Operator

Args: RespCurveStruct = The CIccResponseCurveStruct object to be copied

9852{
9853 if (&RespCurveStruct == this)
9854 return *this;
9855
9856 m_nChannels = RespCurveStruct.m_nChannels;
9858
9859 if (m_maxColorantXYZ)
9860 free(m_maxColorantXYZ);
9861
9863 memcpy(m_maxColorantXYZ, RespCurveStruct.m_maxColorantXYZ, m_nChannels*sizeof(icXYZNumber));
9864
9866 delete [] m_Response16ListArray;
9868 for (icUInt32Number i=0; i<m_nChannels; i++)
9869 m_Response16ListArray[i] = RespCurveStruct.m_Response16ListArray[i];
9870
9871 return *this;
9872}

References m_maxColorantXYZ, m_measurementUnitSig, m_nChannels, and m_Response16ListArray.

Referenced by CIccTagResponseCurveSet16::NewResponseCurves(), and CIccTagResponseCurveSet16::Read().

+ Here is the caller graph for this function:

◆ Read()

bool CIccResponseCurveStruct::Read ( icUInt32Number  size,
CIccIO pIO 
)

Name: CIccResponseCurveStruct::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

9908{
9909 if (!m_nChannels)
9910 return false;
9911
9912 if (sizeof(icTagTypeSignature) +
9913 m_nChannels * (sizeof(icUInt32Number) +
9914 sizeof(icXYZNumber) +
9915 sizeof(icResponse16Number)) > size)
9916 return false;
9917
9918 if (!pIO) {
9919 return false;
9920 }
9921
9922 if (!pIO->Read32(&m_measurementUnitSig))
9923 return false;
9924
9925 icUInt32Number* nMeasurements = new icUInt32Number[m_nChannels];
9926
9927 if (pIO->Read32(&nMeasurements[0],m_nChannels) != m_nChannels) {
9928 delete[] nMeasurements;
9929 return false;
9930 }
9931
9933 if (pIO->Read32(&m_maxColorantXYZ[0], nNum32) != (icInt32Number)nNum32) {
9934 delete[] nMeasurements;
9935 return false;
9936 }
9937
9938 icResponse16Number nResponse16 = {};
9939 CIccResponse16List nResponseList;
9940
9941 for (int i = 0; i<m_nChannels; i++) {
9942 if (!nResponseList.empty())
9943 nResponseList.clear();
9944 for (int j=0; j<(int)nMeasurements[i]; j++) {
9945 if (!pIO->Read16(&nResponse16.deviceCode) ||
9946 !pIO->Read16(&nResponse16.reserved) ||
9947 !pIO->Read32(&nResponse16.measurementValue)) {
9948 delete[] nMeasurements;
9949 return false;
9950 }
9951 nResponseList.push_back(nResponse16);
9952 }
9953 m_Response16ListArray[i] = nResponseList;
9954 }
9955
9956 delete [] nMeasurements;
9957 return true;
9958}
long icInt32Number
Definition icProfileHeader.h:291
icTagTypeSignature
Definition icProfileHeader.h:526
icUInt16Number deviceCode
Definition icProfileHeader.h:1454
icS15Fixed16Number measurementValue
Definition icProfileHeader.h:1456
icInt32Number icS15Fixed16Number
Definition icProfileHeader.h:302
icUInt16Number reserved
Definition icProfileHeader.h:1455
Definition icProfileHeader.h:1453
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143

References icResponse16Number::deviceCode, m_maxColorantXYZ, m_measurementUnitSig, m_nChannels, m_Response16ListArray, icResponse16Number::measurementValue, CIccIO::Read16(), CIccIO::Read32(), and icResponse16Number::reserved.

Referenced by CIccTagResponseCurveSet16::Read().

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

◆ Validate()

icValidateStatus CIccResponseCurveStruct::Validate ( std::string &  sReport)

Name: CIccResponseCurveStruct::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.

10081{
10083
10084 CIccInfo Info;
10085 std::string sSigName = Info.GetSigName(m_measurementUnitSig);
10086 switch(m_measurementUnitSig) {
10087 case icSigStatusA:
10088 case icSigStatusE:
10089 case icSigStatusI:
10090 case icSigStatusT:
10091 case icSigStatusM:
10092 case icSigDN:
10093 case icSigDNP:
10094 case icSigDNN:
10095 case icSigDNNP:
10096 break;
10097
10098 default:
10099 sReport += icMsgValidateNonCompliant;
10100 sReport += sSigName;
10101 sReport += " - Unknown measurement unit signature.\n";
10103 }
10104
10105 if (!m_nChannels) {
10106 sReport += icMsgValidateNonCompliant;
10107 sReport += sSigName;
10108 sReport += " - Incorrect number of channels.\n";
10110 return rv;
10111 }
10112 for (int i=0; i<m_nChannels; i++) {
10113 rv = icMaxStatus(rv, Info.CheckData(sReport, m_maxColorantXYZ[i], "Max Colorant XYZ"));
10114 }
10115
10116 return rv;
10117}
@ icSigStatusI
Definition icProfileHeader.h:1280
@ icSigStatusE
Definition icProfileHeader.h:1279
@ icSigDNNP
Definition icProfileHeader.h:1286
@ icSigStatusA
Definition icProfileHeader.h:1278
@ icSigDN
Definition icProfileHeader.h:1283
@ icSigStatusT
Definition icProfileHeader.h:1281
@ icSigDNP
Definition icProfileHeader.h:1284
@ icSigDNN
Definition icProfileHeader.h:1285
@ icSigStatusM
Definition icProfileHeader.h:1282
icValidateStatus
Definition IccDefs.h:119
@ icValidateOK
Definition IccDefs.h:120
@ icValidateNonCompliant
Definition IccDefs.h:122
ICCPROFLIB_API icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Definition IccUtil.cpp:244
ICCPROFLIB_API const char * icMsgValidateNonCompliant
Definition IccUtil.cpp:91
const icChar * GetSigName(icUInt32Number val)
Definition IccUtil.cpp:2000
icValidateStatus CheckData(std::string &sReport, const icDateTimeNumber &dateTime, std::string sDesc="")
Definition IccUtil.cpp:2414

References CIccInfo::CheckData(), CIccInfo::GetSigName(), icMaxStatus(), icMsgValidateNonCompliant, icSigDN, icSigDNN, icSigDNNP, icSigDNP, icSigStatusA, icSigStatusE, icSigStatusI, icSigStatusM, icSigStatusT, icValidateNonCompliant, icValidateOK, m_maxColorantXYZ, m_measurementUnitSig, and m_nChannels.

Referenced by CIccTagResponseCurveSet16::Validate().

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

◆ Write()

bool CIccResponseCurveStruct::Write ( CIccIO pIO)

Name: CIccResponseCurveStruct::Write

Purpose: Write the tag to a file

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

Return: true = succesful, false = failure

9975{
9976 if (!m_nChannels)
9977 return false;
9978
9980
9981 if (!pIO) {
9982 return false;
9983 }
9984
9985 if (!pIO->Write32(&sig))
9986 return false;
9987
9988 if (m_nChannels) {
9989
9990 icUInt32Number* nMeasurements = new icUInt32Number[m_nChannels];
9991 for (int i=0; i<m_nChannels; i++)
9992 nMeasurements[i] = (icUInt32Number)m_Response16ListArray[i].size();
9993
9994 if (pIO->Write32(&nMeasurements[0],m_nChannels) != m_nChannels)
9995 return false;
9996 delete [] nMeasurements;
9997
9999 if (pIO->Write32(&m_maxColorantXYZ[0], nNum32) != (icInt32Number)nNum32)
10000 return false;
10001 }
10002 else
10003 return false;
10004
10005 CIccResponse16List nResponseList;
10006 CIccResponse16List::iterator j;
10007
10008 for (int i = 0; i<m_nChannels; i++) {
10009 nResponseList = m_Response16ListArray[i];
10010 for (j=nResponseList.begin(); j!=nResponseList.end(); j++) {
10011 if (!pIO->Write16(&j->deviceCode) ||
10012 !pIO->Write16(&j->reserved) ||
10013 !pIO->Write32(&j->measurementValue))
10014 return false;
10015 }
10016 nResponseList.clear();
10017 }
10018
10019 return true;
10020}
icMeasurementUnitSig
Definition icProfileHeader.h:1277
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152

References icResponse16Number::deviceCode, GetMeasurementType(), m_maxColorantXYZ, m_nChannels, m_Response16ListArray, icResponse16Number::measurementValue, icResponse16Number::reserved, CIccIO::Write16(), and CIccIO::Write32().

Referenced by CIccTagResponseCurveSet16::Write().

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

Field Documentation

◆ m_maxColorantXYZ

◆ m_measurementUnitSig

icMeasurementUnitSig CIccResponseCurveStruct::m_measurementUnitSig
protected

◆ m_nChannels

◆ m_Response16ListArray


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