Hoyt's FORK of DemoIccMAX 2.1.17.hoyt
Documentation for Hoyt's FORK of DemoIccMAX
Loading...
Searching...
No Matches
CIccTagXmlResponseCurveSet16 Class Reference

#include <IccTagXml.h>

+ Inheritance diagram for CIccTagXmlResponseCurveSet16:
+ Collaboration diagram for CIccTagXmlResponseCurveSet16:

Public Member Functions

virtual const char * GetClassName () const
 
virtual IIccExtensionTagGetExtension ()
 
virtual bool ParseXml (xmlNode *pNode, std::string &parseStr)
 
virtual bool ToXml (std::string &xml, std::string blanks="")
 
virtual ~CIccTagXmlResponseCurveSet16 ()
 
- Public Member Functions inherited from CIccTagResponseCurveSet16
 CIccTagResponseCurveSet16 ()
 Name: CIccTagResponseCurveSet16::CIccTagResponseCurveSet16.
 
 CIccTagResponseCurveSet16 (const CIccTagResponseCurveSet16 &ITRCS)
 Name: CIccTagResponseCurveSet16::CIccTagResponseCurveSet16.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccTagResponseCurveSet16::Describe.
 
CIccResponseCurveStructGetFirstCurves ()
 Name: CIccTagResponseCurveSet16::GetFirstCurves.
 
CIccResponseCurveStructGetNextCurves ()
 Name: CIccTagResponseCurveSet16::GetNextCurves.
 
icUInt16Number GetNumChannels () const
 
icUInt16Number GetNumResponseCurveTypes () const
 Name: CIccTagResponseCurveSet16::GetNumResponseCurveTypes.
 
CIccResponseCurveStructGetResponseCurves (icMeasurementUnitSig sig)
 Name: CIccTagResponseCurveSet16::GetResponseCurves.
 
virtual icTagTypeSignature GetType () const
 Function: GetType()
 
virtual CIccTagNewCopy () const
 Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
 
CIccResponseCurveStructNewResponseCurves (icMeasurementUnitSig sig)
 Name: CIccTagResponseCurveSet16::NewResponseCurves.
 
CIccTagResponseCurveSet16operator= (const CIccTagResponseCurveSet16 &RespCurveSet16Tag)
 Name: CIccTagResponseCurveSet16::operator=.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccTagResponseCurveSet16::Read.
 
void SetNumChannels (icUInt16Number nChannels)
 Name: CIccTagResponseCurveSet16::SetNumChannels.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 Name: CIccTagResponseCurveSet16::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccTagResponseCurveSet16::Write.
 
virtual ~CIccTagResponseCurveSet16 ()
 Name: CIccTagResponseCurveSet16::~CIccTagResponseCurveSet16.
 
- Public Member Functions inherited from CIccTag
 CIccTag ()
 Name: CIccTag::CIccTag.
 
virtual void DetachIO ()
 Function: ReadAll() - Read All sub data for tag from file.
 
virtual icArraySignature GetTagArrayType () const
 
virtual icStructSignature GetTagStructType () const
 
virtual bool IsArrayType ()
 
virtual bool IsMBBType ()
 
virtual bool IsNumArrayType () const
 
virtual bool IsSupported ()
 Function: IsSupported(size, pIO) - Check if tag fully supported for apply purposes.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO, CIccProfile *pProfile)
 Function: Read(size, pIO) - Read tag from file.
 
virtual bool ReadAll ()
 Function: ReadAll() - Read All sub data for tag from file.
 
virtual ~CIccTag ()
 Name: CIccTag::CIccTag.
 
- Public Member Functions inherited from CIccTagXml
virtual const char * GetExtClassName () const
 
virtual const char * GetExtDerivedClassName () const
 
virtual ~CIccTagXml (void)
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccTag
static CIccTagCreate (icTagTypeSignature sig)
 Name: CIccTag::Create.
 
- Public Attributes inherited from CIccTag
icUInt32Number m_nReserved
 
- Protected Attributes inherited from CIccTagResponseCurveSet16
CIccResponseCurveSetIterm_Curve
 
icUInt16Number m_nChannels
 
CIccResponseCurveSetm_ResponseCurves
 

Detailed Description

Definition at line 474 of file IccTagXml.h.

Constructor & Destructor Documentation

◆ ~CIccTagXmlResponseCurveSet16()

virtual CIccTagXmlResponseCurveSet16::~CIccTagXmlResponseCurveSet16 ( )
inlinevirtual

Definition at line 477 of file IccTagXml.h.

477{}

Member Function Documentation

◆ GetClassName()

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

Reimplemented from CIccTagResponseCurveSet16.

Definition at line 479 of file IccTagXml.h.

479{return "CIccTagXmlResponseCurveSet16"; }

◆ GetExtension()

virtual IIccExtensionTag * CIccTagXmlResponseCurveSet16::GetExtension ( )
inlinevirtual

Reimplemented from CIccTag.

Definition at line 481 of file IccTagXml.h.

481{return this; }

◆ ParseXml()

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

Implements CIccTagXml.

Definition at line 2424 of file IccTagXml.cpp.

2425{
2426 pNode = icXmlFindNode(pNode, "CountOfChannels");
2427
2428 if(!pNode)
2429 return false;
2430
2431 int nChannels = atoi((const char*)pNode->children->content);
2432 SetNumChannels(nChannels);
2433
2434 if (!m_ResponseCurves)
2435 return false;
2436
2437 if (!m_ResponseCurves->empty())
2438 m_ResponseCurves->clear();
2439
2440 for (pNode = pNode->next; pNode; pNode = pNode->next) {
2441 if (pNode->type==XML_ELEMENT_NODE && !icXmlStrCmp(pNode->name, "ResponseCurve")) {
2442 const icChar *szMeasurmentType = icXmlAttrValue(pNode, "MeasUnitSignature");
2443
2444 if (nChannels != icXmlNodeCount(pNode->children, "ChannelResponses"))
2445 return false;
2446
2447 CIccResponseCurveStruct curves(icGetMeasurementValue(szMeasurmentType), nChannels);
2448 xmlNode *pChild, *pMeasurement;
2449 int i;
2450
2451 for (i=0, pChild = pNode->children; pChild; pChild = pChild->next) {
2452 if (pChild->type == XML_ELEMENT_NODE && !icXmlStrCmp(pChild->name, "ChannelResponses")) {
2453 CIccResponse16List *pResponseList = curves.GetResponseList(i);
2454 icXYZNumber *pXYZ = curves.GetXYZ(i);
2455 icResponse16Number response;
2456
2457 const icChar *szX = icXmlAttrValue(pChild, "X");
2458 const icChar *szY = icXmlAttrValue(pChild, "Y");
2459 const icChar *szZ = icXmlAttrValue(pChild, "Z");
2460
2461 if (!szX || !szY || !szZ || !*szX || !*szY || !*szZ)
2462 return false;
2463
2464 pXYZ->X = icDtoF((icFloatNumber)atof(szX));
2465 pXYZ->Y = icDtoF((icFloatNumber)atof(szY));
2466 pXYZ->Z = icDtoF((icFloatNumber)atof(szZ));
2467
2468 for (pMeasurement = pChild->children; pMeasurement; pMeasurement = pMeasurement->next) {
2469 if (pMeasurement->type == XML_ELEMENT_NODE && !icXmlStrCmp(pMeasurement->name, "Measurement")) {
2470 const icChar *szDeviceCode = icXmlAttrValue(pMeasurement, "DeviceCode");
2471 const icChar *szValue = icXmlAttrValue(pMeasurement, "MeasValue");
2472 const icChar *szReserved = icXmlAttrValue(pMeasurement, "Reserved");
2473
2474 if (!szDeviceCode || !szValue || !*szDeviceCode || !*szValue)
2475 return false;
2476
2477 response.deviceCode = (icUInt16Number)atoi(szDeviceCode);
2478 response.measurementValue = icDtoF((icFloatNumber)atof(szValue));
2479
2480 if (szReserved && *szReserved)
2481 response.reserved = atoi(szReserved);
2482
2483 pResponseList->push_back(response);
2484 }
2485 }
2486 i++;
2487 }
2488 }
2489 m_ResponseCurves->push_back(curves);
2490 }
2491 }
2492
2493 return true;
2494}
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100
char icChar
Definition IccDefs.h:109
std::list< icResponse16Number > CIccResponse16List
List Class: CIccResponse16List.
icS15Fixed16Number icDtoF(icFloatNumber num)
Definition IccUtil.cpp:545
icUInt32Number icXmlNodeCount(xmlNode *pNode, const char *szNodeName)
xmlNode * icXmlFindNode(xmlNode *pNode, const char *szNodeName)
icMeasurementUnitSig icGetMeasurementValue(const icChar *str)
const char * icXmlAttrValue(xmlAttr *attr, const char *szDefault)
#define icXmlStrCmp(x, y)
Definition IccUtilXml.h:134
Data Class: CIccResponseCurveStruct.
void SetNumChannels(icUInt16Number nChannels)
Name: CIccTagResponseCurveSet16::SetNumChannels.
CIccResponseCurveSet * m_ResponseCurves
unsigned short icUInt16Number
response16Number
icUInt16Number deviceCode
icS15Fixed16Number measurementValue
icUInt16Number reserved
icS15Fixed16Number Y
icS15Fixed16Number Z
icS15Fixed16Number X

References icResponse16Number::deviceCode, CIccResponseCurveStruct::GetResponseList(), CIccResponseCurveStruct::GetXYZ(), icDtoF(), icGetMeasurementValue(), icXmlAttrValue(), icXmlFindNode(), icXmlNodeCount(), icXmlStrCmp, icResponse16Number::measurementValue, icResponse16Number::reserved, icXYZNumber::X, icXYZNumber::Y, and icXYZNumber::Z.

+ Here is the call graph for this function:

◆ ToXml()

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

Implements CIccTagXml.

Definition at line 2382 of file IccTagXml.cpp.

2383{
2384 char line[80];
2385 int i;
2386
2387 CIccInfo info;
2388
2389 sprintf(line, "<CountOfChannels>%d</CountOfChannels>\n", m_nChannels);
2390 xml += blanks + line;
2391
2393 while (pCurves) {
2394 sprintf(line, "<ResponseCurve MeasUnitSignature=\"%s\">\n", info.GetMeasurementUnit(pCurves->GetMeasurementType()));
2395 xml += blanks + line;
2396 for (i=0; i<pCurves->GetNumChannels(); i++) {
2397 CIccResponse16List *pResponseList = pCurves->GetResponseList(i);
2398 icXYZNumber *pXYZ = pCurves->GetXYZ(i);
2399 sprintf(line, " <ChannelResponses X=\"" icXmlFloatFmt "\" Y=\"" icXmlFloatFmt "\" Z=\"" icXmlFloatFmt "\" >\n", icFtoD(pXYZ->X), icFtoD(pXYZ->Y), icFtoD(pXYZ->Z));
2400 xml += blanks + line;
2401
2402 CIccResponse16List::iterator j;
2403 for (j=pResponseList->begin(); j!=pResponseList->end(); j++) {
2404 sprintf(line, " <Measurement DeviceCode=\"%d\" MeasValue=\"" icXmlFloatFmt "\"", j->deviceCode, icFtoD(j->measurementValue));
2405 xml += blanks + line;
2406
2407 if (j->reserved) {
2408 sprintf(line, " Reserved=\"%d\"", j->reserved);
2409 xml += line;
2410 }
2411 xml += "/>\n";
2412 }
2413
2414 xml += blanks + " </ChannelResponses>\n";
2415 }
2416 xml += blanks + " </ResponseCurve>\n";
2417 pCurves = GetNextCurves();
2418 }
2419
2420 return true;
2421}
icFloatNumber icFtoD(icS15Fixed16Number num)
Definition IccUtil.cpp:559
#define icXmlFloatFmt
Type: Class.
Definition IccUtil.h:303
const icChar * GetMeasurementUnit(icSignature sig)
Definition IccUtil.cpp:2247
icMeasurementUnitSig GetMeasurementType() const
CIccResponse16List * GetResponseList(icUInt16Number nChannel)
icUInt16Number GetNumChannels() const
icXYZNumber * GetXYZ(icUInt32Number index)
CIccResponseCurveStruct * GetFirstCurves()
Name: CIccTagResponseCurveSet16::GetFirstCurves.
CIccResponseCurveStruct * GetNextCurves()
Name: CIccTagResponseCurveSet16::GetNextCurves.

References CIccResponseCurveStruct::GetMeasurementType(), CIccInfo::GetMeasurementUnit(), CIccResponseCurveStruct::GetNumChannels(), CIccResponseCurveStruct::GetResponseList(), CIccResponseCurveStruct::GetXYZ(), icFtoD(), icXmlFloatFmt, icXYZNumber::X, icXYZNumber::Y, and icXYZNumber::Z.

+ Here is the call graph for this function:

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