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

Class: CIccMpeSpectralObserver. More...

#include <IccMpeSpectral.h>

+ Inheritance diagram for CIccMpeSpectralObserver:
+ Collaboration diagram for CIccMpeSpectralObserver:

Public Member Functions

virtual void Apply (CIccApplyMpe *pApply, icFloatNumber *dstPixel, const icFloatNumber *srcPixel) const
 
virtual bool Begin (icElemInterp nInterp, CIccTagMultiProcessElement *pMPE)=0
 
 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 const icCharGetClassName () const =0
 
virtual icAcsSignature GetEAcsSig ()
 
virtual IIccExtensionMpeGetExtension ()
 
virtual CIccApplyMpeGetNewApply (CIccApplyTagMpe *pApplyTag)
 Name: CIccMultiProcessElement::GetNewApply()
 
virtual icElemTypeSignature GetType () const =0
 
virtual bool IsAcs ()
 
virtual bool IsLateBindingReflectance () const
 
virtual bool IsSupported ()
 
virtual CIccMultiProcessElementNewCopy () const =0
 
virtual icUInt16Number NumInputChannels () const
 
virtual icUInt16Number NumOutputChannels () const
 
virtual ~CIccMultiProcessElement ()
 

Protected Member Functions

void copyData (const CIccMpeSpectralObserver &ITPC)
 Name: &CIccMpeSpectralObserver::operator=.
 
virtual const char * GetDescribeName () const =0
 

Protected Attributes

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
 

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
 

Detailed Description

Class: CIccMpeSpectralObserver.

Purpose: The Spectral Observer Element

Definition at line 331 of file IccMpeSpectral.h.

Constructor & Destructor Documentation

◆ CIccMpeSpectralObserver() [1/2]

CIccMpeSpectralObserver::CIccMpeSpectralObserver ( )

◆ CIccMpeSpectralObserver() [2/2]

CIccMpeSpectralObserver::CIccMpeSpectralObserver ( const CIccMpeSpectralObserver & matrix)

Name: CIccMpeSpectralObserver::CIccMpeSpectralObserver.

Purpose:

Args:

Return:

Definition at line 1682 of file IccMpeSpectral.cpp.

1683{
1684 m_nReserved = matrix.m_nReserved;
1685
1688
1689 m_Range = matrix.m_Range;
1690
1691 if (matrix.m_pWhite) {
1692 int num = m_Range.steps*sizeof(icFloatNumber);
1693 m_pWhite = (icFloatNumber*)malloc(num);
1694 memcpy(m_pWhite, matrix.m_pWhite, num);
1695 }
1696 else
1697 m_pWhite = NULL;
1698
1699 m_pApplyMtx = NULL;
1700}
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100

References CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, CIccMultiProcessElement::m_nReserved, m_pApplyMtx, m_pWhite, m_Range, and icSpectralRange::steps.

◆ ~CIccMpeSpectralObserver()

CIccMpeSpectralObserver::~CIccMpeSpectralObserver ( )
virtual

Name: CIccMpeSpectralObserver::~CIccMpeSpectralObserver.

Purpose:

Args:

Return:

Definition at line 1745 of file IccMpeSpectral.cpp.

1746{
1747 if (m_pWhite)
1748 free(m_pWhite);
1749
1750 if (m_pApplyMtx)
1751 delete m_pApplyMtx;
1752}

References m_pApplyMtx, and m_pWhite.

Member Function Documentation

◆ Apply()

void CIccMpeSpectralObserver::Apply ( CIccApplyMpe * pApply,
icFloatNumber * dstPixel,
const icFloatNumber * srcPixel ) const
virtual

Implements CIccMultiProcessElement.

Definition at line 1948 of file IccMpeSpectral.cpp.

1949{
1950 if (m_pApplyMtx) {
1951 icFloatNumber xyz[3];
1952 m_pApplyMtx->VectorMult(xyz, srcPixel);
1953
1954 bool bUseAbsolute = (m_flags & icRelativeSpectralData)!=0;
1955 bool bLab = (m_flags & icLabSpectralData) != 0;
1956
1957 if (!bUseAbsolute) {
1958 xyz[0] *= m_xyzscale[0];
1959 xyz[1] *= m_xyzscale[1];
1960 xyz[2] *= m_xyzscale[2];
1961 }
1962
1963 if (bLab) {
1964 icXYZtoLab(dstPixel, xyz, m_xyzw);
1965 // icLabToPcs(dstPixel);
1966 }
1967 else {
1968 memcpy(dstPixel, xyz, 3*sizeof(icFloatNumber));
1969 // icXyzToPcs(dstPixel);
1970 }
1971 }
1972}
void icXYZtoLab(icFloatNumber *Lab, const icFloatNumber *XYZ, const icFloatNumber *WhiteXYZ)
Definition IccUtil.cpp:846
virtual void VectorMult(icFloatNumber *pDst, const icFloatNumber *pSrc) const
Name: CIccMatrixMath::VectorMult.
icFloatNumber m_xyzw[3]
icFloatNumber m_xyzscale[3]
#define icRelativeSpectralData
MPE Spectral Data Conversion flags.
#define icLabSpectralData

References icLabSpectralData, icRelativeSpectralData, icXYZtoLab(), m_flags, m_pApplyMtx, m_xyzscale, m_xyzw, and CIccMatrixMath::VectorMult().

+ Here is the call graph for this function:

◆ Begin()

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

◆ copyData()

void CIccMpeSpectralObserver::copyData ( const CIccMpeSpectralObserver & matrix)
protected

Name: &CIccMpeSpectralObserver::operator=.

Purpose:

Args:

Return:

Definition at line 1712 of file IccMpeSpectral.cpp.

1713{
1714 m_nReserved = matrix.m_nReserved;
1715
1718
1719 m_Range = m_Range;
1720
1721 if (m_pWhite)
1722 free(m_pWhite);
1723
1724 if (matrix.m_pWhite) {
1725 int num = m_Range.steps*sizeof(icFloatNumber);
1726 m_pWhite = (icFloatNumber*)malloc(num);
1727 memcpy(m_pWhite, matrix.m_pWhite, num);
1728 }
1729 else
1730 m_pWhite = NULL;
1731
1732 m_pApplyMtx = NULL;
1733}

References CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, CIccMultiProcessElement::m_nReserved, m_pApplyMtx, m_pWhite, m_Range, and icSpectralRange::steps.

◆ Describe()

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

Name: CIccMpeSpectralObserver::Describe.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 1799 of file IccMpeSpectral.cpp.

1800{
1801 icChar buf[81];
1802 int j;
1803
1804 sprintf(buf, "BEGIN_%s %d %d \n", GetDescribeName(), m_nInputChannels, m_nOutputChannels);
1805 sDescription += buf;
1806
1807 sprintf(buf, "RANGE %f %f %d\n", icF16toF(m_Range.start), icF16toF(m_Range.end), m_Range.steps);
1808 sDescription += buf;
1809
1810 sDescription += "White\n";
1811 for (j=0; j<(int)m_Range.steps; j++) {
1812 if (j)
1813 sDescription += " ";
1814 sprintf(buf, "%12.8lf", m_pWhite[j]);
1815 sDescription += buf;
1816 }
1817 sDescription += "\n";
1818
1819 sprintf(buf, "END_%s\n", GetDescribeName());
1820 sDescription += buf;
1821}
char icChar
Definition IccDefs.h:109
icFloatNumber icF16toF(icFloat16Number num)
Definition IccUtil.cpp:629
virtual const char * GetDescribeName() const =0

References icSpectralRange::end, GetDescribeName(), icF16toF(), CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, m_pWhite, m_Range, icSpectralRange::start, and icSpectralRange::steps.

+ Here is the call graph for this function:

◆ GetDescribeName()

virtual const char * CIccMpeSpectralObserver::GetDescribeName ( ) const
protectedpure virtual

Implemented in CIccMpeEmissionObserver, and CIccMpeReflectanceObserver.

Referenced by Describe().

+ Here is the caller graph for this function:

◆ GetRange()

const icSpectralRange & CIccMpeSpectralObserver::GetRange ( )
inline

Definition at line 343 of file IccMpeSpectral.h.

343{ return m_Range;}

◆ GetWhite()

icFloatNumber * CIccMpeSpectralObserver::GetWhite ( )
inline

Definition at line 347 of file IccMpeSpectral.h.

347{ return m_pWhite;}

◆ IsLateBinding()

virtual bool CIccMpeSpectralObserver::IsLateBinding ( ) const
inlinevirtual

Reimplemented from CIccMultiProcessElement.

Definition at line 354 of file IccMpeSpectral.h.

354{ return true; }

◆ Read()

bool CIccMpeSpectralObserver::Read ( icUInt32Number size,
CIccIO * pIO )
virtual

Name: CIccMpeSpectralObserver::Read.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 1833 of file IccMpeSpectral.cpp.

1834{
1836
1837 icUInt32Number headerSize = sizeof(icElemTypeSignature) +
1838 sizeof(icUInt32Number) +
1839 sizeof(icUInt16Number) +
1840 sizeof(icUInt16Number) +
1841 sizeof(icUInt16Number) +
1842 sizeof(icUInt16Number) +
1843 sizeof(icUInt16Number) +
1844 sizeof(icUInt16Number);
1845
1846 if (headerSize > size)
1847 return false;
1848
1849 if (!pIO) {
1850 return false;
1851 }
1852
1853 icUInt16Number nInputChannels, nOutputChannels;
1854 icSpectralRange range;
1855
1856 if (!pIO->Read32(&sig))
1857 return false;
1858
1859 if (!pIO->Read32(&m_nReserved))
1860 return false;
1861
1862 if (!pIO->Read16(&nInputChannels))
1863 return false;
1864
1865 if (!pIO->Read16(&nOutputChannels))
1866 return false;
1867
1868 if (!pIO->Read16(&range.start))
1869 return false;
1870
1871 if (!pIO->Read16(&range.end))
1872 return false;
1873
1874 if (!pIO->Read16(&range.steps))
1875 return false;
1876
1877 if (!pIO->Read16(&m_flags))
1878 return false;
1879
1880 if (!SetSize(nInputChannels, nOutputChannels, range))
1881 return false;
1882
1883 if (!m_pWhite )
1884 return false;
1885
1886 if (size<headerSize + (int)range.steps*sizeof(icFloatNumber))
1887 return false;
1888
1889 //Read White data
1890 if (pIO->ReadFloat32Float(m_pWhite, range.steps)!=range.steps)
1891 return false;
1892
1893 return true;
1894}
icArraySignature sig
unsigned int icUInt32Number
icInt32Number ReadFloat32Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:302
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
bool SetSize(icUInt16Number nInputChannels, icUInt16Number nOutputChannels, const icSpectralRange &range)
Name: CIccMpeSpectralObserver::SetSize.
unsigned short icUInt16Number
icElemTypeSignature
Multi-Processing Element type signatures.
spectral range

References icSpectralRange::end, m_flags, CIccMultiProcessElement::m_nReserved, m_pWhite, CIccIO::Read16(), CIccIO::Read32(), CIccIO::ReadFloat32Float(), SetSize(), sig, icSpectralRange::start, and icSpectralRange::steps.

+ Here is the call graph for this function:

◆ SetSize()

bool CIccMpeSpectralObserver::SetSize ( icUInt16Number nInputChannels,
icUInt16Number nOutputChannels,
const icSpectralRange & range )

Name: CIccMpeSpectralObserver::SetSize.

Purpose:

Args:

Return:

Definition at line 1765 of file IccMpeSpectral.cpp.

1766{
1767 if (m_pWhite) {
1768 free(m_pWhite);
1769 m_pWhite = NULL;
1770 }
1771
1772 if (m_pApplyMtx) {
1773 delete m_pApplyMtx;
1774 m_pApplyMtx = NULL;
1775 }
1776
1777 m_nInputChannels = nInputChannels;
1778 m_nOutputChannels = nOutputChannels;
1779 m_Range = range;
1780
1781 m_pWhite = (icFloatNumber*)calloc(range.steps, sizeof(icFloatNumber));
1782
1783 if (!m_pWhite)
1784 return false;
1785
1786 return true;
1787}

References CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, m_pApplyMtx, m_pWhite, m_Range, and icSpectralRange::steps.

Referenced by Read().

+ Here is the caller graph for this function:

◆ Validate()

icValidateStatus CIccMpeSpectralObserver::Validate ( std::string sigPath,
std::string & sReport,
const CIccTagMultiProcessElement * pMPE = NULL,
const CIccProfile * pProfile = NULL ) const
virtual

Name: CIccMpeSpectralObserver::Validate.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 1984 of file IccMpeSpectral.cpp.

1985{
1986 std::string mpeSigPath = sigPath + icGetSigPath(GetType());
1987 icValidateStatus rv = CIccMultiProcessElement::Validate(sigPath, sReport, pMPE, pProfile);
1988
1989 if (!m_Range.steps) {
1990 CIccInfo Info;
1991 std::string sSigPathName = Info.GetSigPathName(mpeSigPath);
1992
1993 sReport += icMsgValidateCriticalError;
1994 sReport += sSigPathName;
1995 sReport += " - Cannot have zero spectral range steps!\n";
1997 }
1998
1999 if (m_nOutputChannels != 3) {
2000 CIccInfo Info;
2001 std::string sSigPathName = Info.GetSigPathName(mpeSigPath);
2002
2003 sReport += icMsgValidateCriticalError;
2004 sReport += sSigPathName;
2005 sReport += " - Output Channels must be 3!\n";
2007 }
2008
2009 if (!m_pWhite) {
2010 CIccInfo Info;
2011 std::string sSigPathName = Info.GetSigPathName(mpeSigPath);
2012
2013 sReport += icMsgValidateCriticalError;
2014 sReport += sSigPathName;
2015 sReport += " - Has Empty White data!\n";
2017 }
2018
2019
2020 if (m_Range.start>= m_Range.end || !m_Range.steps) {
2021 CIccInfo Info;
2022 std::string sSigPathName = Info.GetSigPathName(mpeSigPath);
2023
2024 sReport += icMsgValidateCriticalError;
2025 sReport += sSigPathName;
2026 sReport += " - Has an invalid spectral range!\n";
2028 }
2029
2030 return rv;
2031}
icValidateStatus
Definition IccDefs.h:118
@ icValidateCriticalError
Definition IccDefs.h:122
icValidateStatus icMaxStatus(icValidateStatus s1, icValidateStatus s2)
Name: icMaxStatus.
Definition IccUtil.cpp:244
std::string icGetSigPath(icUInt32Number nSig)
Definition IccUtil.cpp:1191
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
Type: Class.
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614
virtual icElemTypeSignature GetType() const =0
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const =0
Name: CIccProcessElement::Validate.

References icSpectralRange::end, CIccInfo::GetSigPathName(), CIccMultiProcessElement::GetType(), icGetSigPath(), icMaxStatus(), icMsgValidateCriticalError, icValidateCriticalError, CIccMultiProcessElement::m_nOutputChannels, m_pWhite, m_Range, icSpectralRange::start, icSpectralRange::steps, and CIccMultiProcessElement::Validate().

+ Here is the call graph for this function:

◆ Write()

bool CIccMpeSpectralObserver::Write ( CIccIO * pIO)
virtual

Name: CIccMpeSpectralObserver::Write.

Purpose:

Args:

Return:

Implements CIccMultiProcessElement.

Definition at line 1906 of file IccMpeSpectral.cpp.

1907{
1909
1910 if (!pIO)
1911 return false;
1912
1913 if (!pIO->Write32(&sig))
1914 return false;
1915
1916 if (!pIO->Write32(&m_nReserved))
1917 return false;
1918
1919 if (!pIO->Write16(&m_nInputChannels))
1920 return false;
1921
1922 if (!pIO->Write16(&m_nOutputChannels))
1923 return false;
1924
1925 if (!pIO->Write16(&m_Range.start))
1926 return false;
1927
1928 if (!pIO->Write16(&m_Range.end))
1929 return false;
1930
1931 if (!pIO->Write16(&m_Range.steps))
1932 return false;
1933
1934 if (!pIO->Write16(&m_flags))
1935 return false;
1936
1937 if (m_pWhite) {
1939 return false;
1940 }
1941 else if (m_Range.steps) {
1942 return false;
1943 }
1944
1945 return true;
1946}
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152
icInt32Number WriteFloat32Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:321

References icSpectralRange::end, CIccMultiProcessElement::GetType(), m_flags, CIccMultiProcessElement::m_nInputChannels, CIccMultiProcessElement::m_nOutputChannels, CIccMultiProcessElement::m_nReserved, m_pWhite, m_Range, sig, icSpectralRange::start, icSpectralRange::steps, CIccIO::Write16(), CIccIO::Write32(), and CIccIO::WriteFloat32Float().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_flags

icUInt16Number CIccMpeSpectralObserver::m_flags
protected

Definition at line 361 of file IccMpeSpectral.h.

Referenced by Apply(), CIccMpeReflectanceObserver::Begin(), Read(), and Write().

◆ m_pApplyMtx

◆ m_pWhite

◆ m_Range

◆ m_xyzscale

icFloatNumber CIccMpeSpectralObserver::m_xyzscale[3]
protected

◆ m_xyzw

icFloatNumber CIccMpeSpectralObserver::m_xyzw[3]
protected

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