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

Class: CIccMpeReflectanceObserver. More...

#include <IccMpeSpectral.h>

+ Inheritance diagram for CIccMpeReflectanceObserver:
+ Collaboration diagram for CIccMpeReflectanceObserver:

Public Member Functions

virtual bool Begin (icElemInterp nInterp, CIccTagMultiProcessElement *pMPE)
 Name: CIccMpeReflectanceObserver::Begin.
 
 CIccMpeReflectanceObserver ()
 
 CIccMpeReflectanceObserver (const CIccMpeReflectanceObserver &ITPC)
 
virtual const icCharGetClassName () const
 
virtual icElemTypeSignature GetType () const
 
virtual bool IsLateBindingReflectance () const
 
virtual CIccMpeReflectanceObserverNewCopy () const
 
CIccMpeReflectanceObserveroperator= (const CIccMpeReflectanceObserver &ITPC)
 
virtual ~CIccMpeReflectanceObserver ()
 
- Public Member Functions inherited from CIccMpeSpectralObserver
virtual void Apply (CIccApplyMpe *pApply, icFloatNumber *dstPixel, const icFloatNumber *srcPixel) const
 
 CIccMpeSpectralObserver ()
 Name: CIccMpeSpectralObserver::CIccMpeSpectralObserver.
 
 CIccMpeSpectralObserver (const CIccMpeSpectralObserver &ITPC)
 Name: CIccMpeSpectralObserver::CIccMpeSpectralObserver.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccMpeSpectralObserver::Describe.
 
const icSpectralRangeGetRange ()
 
icFloatNumberGetWhite ()
 
virtual bool IsLateBinding () const
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccMpeSpectralObserver::Read.
 
bool SetSize (icUInt16Number nInputChannels, icUInt16Number nOutputChannels, const icSpectralRange &range)
 Name: CIccMpeSpectralObserver::SetSize.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const
 Name: CIccMpeSpectralObserver::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccMpeSpectralObserver::Write.
 
virtual ~CIccMpeSpectralObserver ()
 Name: CIccMpeSpectralObserver::~CIccMpeSpectralObserver.
 
- Public Member Functions inherited from CIccMultiProcessElement
 CIccMultiProcessElement ()
 
virtual icAcsSignature GetBAcsSig ()
 
virtual icAcsSignature GetEAcsSig ()
 
virtual IIccExtensionMpeGetExtension ()
 
virtual CIccApplyMpeGetNewApply (CIccApplyTagMpe *pApplyTag)
 Name: CIccMultiProcessElement::GetNewApply()
 
virtual bool IsAcs ()
 
virtual bool IsSupported ()
 
virtual icUInt16Number NumInputChannels () const
 
virtual icUInt16Number NumOutputChannels () const
 
virtual ~CIccMultiProcessElement ()
 

Protected Member Functions

virtual const char * GetDescribeName () const
 
- Protected Member Functions inherited from CIccMpeSpectralObserver
void copyData (const CIccMpeSpectralObserver &ITPC)
 Name: &CIccMpeSpectralObserver::operator=.
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccMultiProcessElement
static CIccMultiProcessElementCreate (icElemTypeSignature sig)
 Name: CIccMultiProcessElement::Create.
 
- Public Attributes inherited from CIccMultiProcessElement
icUInt32Number m_nReserved
 
- Protected Attributes inherited from CIccMpeSpectralObserver
icUInt16Number m_flags
 
CIccMatrixMathm_pApplyMtx
 
icFloatNumberm_pWhite
 
icSpectralRange m_Range
 
icFloatNumber m_xyzscale [3]
 
icFloatNumber m_xyzw [3]
 
- Protected Attributes inherited from CIccMultiProcessElement
icUInt16Number m_nInputChannels
 
icUInt16Number m_nOutputChannels
 

Detailed Description

Class: CIccMpeReflectanceObserver.

Purpose: The Reflectance Observer Element

Definition at line 404 of file IccMpeSpectral.h.

Constructor & Destructor Documentation

◆ CIccMpeReflectanceObserver() [1/2]

CIccMpeReflectanceObserver::CIccMpeReflectanceObserver ( )
inline

Definition at line 407 of file IccMpeSpectral.h.

CIccMpeSpectralObserver()
Name: CIccMpeSpectralObserver::CIccMpeSpectralObserver.

◆ CIccMpeReflectanceObserver() [2/2]

CIccMpeReflectanceObserver::CIccMpeReflectanceObserver ( const CIccMpeReflectanceObserver & ITPC)
inline

Definition at line 408 of file IccMpeSpectral.h.

◆ ~CIccMpeReflectanceObserver()

virtual CIccMpeReflectanceObserver::~CIccMpeReflectanceObserver ( )
inlinevirtual

Definition at line 411 of file IccMpeSpectral.h.

411{}

Member Function Documentation

◆ Begin()

bool CIccMpeReflectanceObserver::Begin ( icElemInterp nInterp,
CIccTagMultiProcessElement * pMPE )
virtual

Name: CIccMpeReflectanceObserver::Begin.

Purpose:

Args:

Return:

Implements CIccMpeSpectralObserver.

Definition at line 2085 of file IccMpeSpectral.cpp.

2086{
2088 return false;
2089
2090 IIccProfileConnectionConditions *pAppliedPCC = pMPE->GetAppliedPCC();
2091 if (!pAppliedPCC)
2092 return false;
2093
2094 const CIccTagSpectralViewingConditions *pSVC = pAppliedPCC->getPccViewingConditions();
2095 if (!pSVC)
2096 return false;
2097
2098 CIccMatrixMath observer(3, m_Range.steps);
2099 icSpectralRange illumRange;
2100 const icFloatNumber *illum = pSVC->getIlluminant(illumRange);
2101
2102 if (!pAppliedPCC->getEmissiveObserver(illumRange, illum, observer.entry(0)))
2103 return false;
2104
2105 //
2106 //apply illuminant to observer and calculate XYZ of illuminant
2107 icFloatNumber *pObs = observer.entry(0);
2108 int i, j;
2109 for (i=0; i<3; i++) {
2110 m_xyzw[i] = 0.0;
2111 for (j=0; j<illumRange.steps; j++) {
2112 *pObs *= illum[j];
2113 m_xyzw[i] += *pObs;
2114 pObs++;
2115 }
2116 }
2117
2118 //concatenate reflectance range mapping to observer+illuminant
2119 CIccMatrixMath *rangeRef = CIccMatrixMath::rangeMap(m_Range, illumRange);
2120 if (!rangeRef)
2121 m_pApplyMtx = new CIccMatrixMath(observer);
2122 else
2123 m_pApplyMtx = rangeRef->Mult(&observer);
2124
2125 icFloatNumber xyzm[3];
2126
2128
2129 bool bUseAbsolute = (m_flags & icRelativeSpectralData)!=0;
2130 bool bLab = (m_flags & icLabSpectralData) != 0;
2131
2132 if (!bUseAbsolute) {
2133 m_xyzscale[0] = m_xyzw[0] / xyzm[0];
2134 m_xyzscale[1] = m_xyzw[1] / xyzm[1];
2135 m_xyzscale[2] = m_xyzw[2] / xyzm[2];
2136 }
2137
2138 return true;
2139}
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100
Type: Class.
CIccMatrixMath * Mult(const CIccMatrixMath *matrix) const
Name: CIccMatrixMath::Mult.
static CIccMatrixMath * rangeMap(const icSpectralRange &from, const icSpectralRange &to)
Name: CIccMatrixMath::rangeMap.
virtual void VectorMult(icFloatNumber *pDst, const icFloatNumber *pSrc) const
Name: CIccMatrixMath::VectorMult.
icFloatNumber m_xyzw[3]
CIccMatrixMath * m_pApplyMtx
icFloatNumber m_xyzscale[3]
icUInt16Number m_nOutputChannels
Definition IccTagMPE.h:192
icUInt16Number m_nInputChannels
Definition IccTagMPE.h:191
IIccProfileConnectionConditions * GetAppliedPCC()
Definition IccTagMPE.h:403
Class: CIccTagSpectralViewingConditions.
const icFloatNumber * getIlluminant(icSpectralRange &illumRange) const
icFloatNumber * getEmissiveObserver(const icSpectralRange &range, const icFloatNumber *pWhite, icFloatNumber *obsMatrix=NULL)
Definition IccPcc.cpp:231
virtual const CIccTagSpectralViewingConditions * getPccViewingConditions()=0
#define icRelativeSpectralData
MPE Spectral Data Conversion flags.
#define icLabSpectralData
spectral range
icUInt16Number steps

References CIccMatrixMath::entry(), CIccTagMultiProcessElement::GetAppliedPCC(), IIccProfileConnectionConditions::getEmissiveObserver(), CIccTagSpectralViewingConditions::getIlluminant(), IIccProfileConnectionConditions::getPccViewingConditions(), icLabSpectralData, icRelativeSpectralData, CIccMpeSpectralObserver::m_flags, CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, CIccMpeSpectralObserver::m_pApplyMtx, CIccMpeSpectralObserver::m_pWhite, CIccMpeSpectralObserver::m_Range, CIccMpeSpectralObserver::m_xyzscale, CIccMpeSpectralObserver::m_xyzw, CIccMatrixMath::Mult(), CIccMatrixMath::rangeMap(), icSpectralRange::steps, and CIccMatrixMath::VectorMult().

+ Here is the call graph for this function:

◆ GetClassName()

virtual const icChar * CIccMpeReflectanceObserver::GetClassName ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Reimplemented in CIccMpeXmlReflectanceObserver.

Definition at line 414 of file IccMpeSpectral.h.

414{ return "CIccMpeReflectanceObserver"; }

◆ GetDescribeName()

virtual const char * CIccMpeReflectanceObserver::GetDescribeName ( ) const
inlineprotectedvirtual

Implements CIccMpeSpectralObserver.

Definition at line 421 of file IccMpeSpectral.h.

421{ return "ELEM_REFLECTANCE_OBSERVER"; }

◆ GetType()

virtual icElemTypeSignature CIccMpeReflectanceObserver::GetType ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Definition at line 413 of file IccMpeSpectral.h.

@ icSigReflectanceObserverElemType

References icSigReflectanceObserverElemType.

◆ IsLateBindingReflectance()

virtual bool CIccMpeReflectanceObserver::IsLateBindingReflectance ( ) const
inlinevirtual

Reimplemented from CIccMultiProcessElement.

Definition at line 418 of file IccMpeSpectral.h.

418{ return true; }

◆ NewCopy()

virtual CIccMpeReflectanceObserver * CIccMpeReflectanceObserver::NewCopy ( ) const
inlinevirtual

Implements CIccMultiProcessElement.

Definition at line 410 of file IccMpeSpectral.h.

410{ return new CIccMpeReflectanceObserver(*this);}

◆ operator=()

CIccMpeReflectanceObserver & CIccMpeReflectanceObserver::operator= ( const CIccMpeReflectanceObserver & ITPC)
inline

Definition at line 409 of file IccMpeSpectral.h.

409{ copyData(ITPC); return *this; }
void copyData(const CIccMpeSpectralObserver &ITPC)
Name: &CIccMpeSpectralObserver::operator=.

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