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

Class: CIccTagLut16. More...

#include <IccTagLut.h>

+ Inheritance diagram for CIccTagLut16:
+ Collaboration diagram for CIccTagLut16:

Public Member Functions

 CIccTagLut16 ()
 Name: CIccTagLut16::CIccTagLut16.
 
 CIccTagLut16 (const CIccTagLut16 &ITL)
 Name: CIccTagLut16::CIccTagLut16.
 
virtual icTagTypeSignature GetType () const
 Function: GetType()
 
virtual CIccTagNewCopy () const
 Function: NewCopy(sDescription) Each derived tag will implement it's own NewCopy() function.
 
CIccTagLut16operator= (const CIccTagLut16 &ITL)
 Name: CIccTagLut16::operator=.
 
bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccTagLut16::Read.
 
virtual void SetColorSpaces (icColorSpaceSignature csInput, icColorSpaceSignature csOutput)
 Name: CIccTagLut16::SetColorSpaces.
 
virtual bool UseLegacyPCS () const
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL)
 Name: CIccTagLut16::Validate.
 
bool Write (CIccIO *pIO)
 Name: CIccTagLut16::Write.
 
virtual ~CIccTagLut16 ()
 Name: CIccTagLut16::~CIccTagLut16.
 
- Public Member Functions inherited from CIccMBB
 CIccMBB ()
 Name: CIccMBB::CIccMBB.
 
 CIccMBB (const CIccMBB &IMBB)
 Name: CIccMBB::CIccMBB.
 
void Cleanup ()
 Name: CIccMBB::Cleanup.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccMBB::Describe.
 
CIccCLUTGetCLUT () const
 
icColorSpaceSignature GetCsInput ()
 
icColorSpaceSignature GetCsOutput ()
 
LPIccCurveGetCurvesA () const
 
LPIccCurveGetCurvesB () const
 
LPIccCurveGetCurvesM () const
 
CIccMatrixGetMatrix () const
 
virtual icUInt8Number GetPrecision ()
 
void Init (icUInt8Number nInputChannels, icUInt8Number nOutputChannels)
 Name: CIccMBB::Init.
 
icUInt8Number InputChannels () const
 
bool IsInputB ()
 
virtual bool IsInputMatrix ()
 
virtual bool IsMBBType ()
 
CIccCLUTNewCLUT (icUInt8Number *pGridPoints, icUInt8Number nPrecision=2)
 Name: CIccMBB::NewCLUT.
 
CIccCLUTNewCLUT (icUInt8Number nGridPoints, icUInt8Number nPrecision=2)
 Name: CIccMBB::NewCLUT.
 
LPIccCurveNewCurvesA ()
 Name: CIccMBB::NewCurvesA.
 
LPIccCurveNewCurvesB ()
 Name: CIccMBB::NewCurvesB.
 
LPIccCurveNewCurvesM ()
 Name: CIccMBB::NewCurvesM.
 
CIccMatrixNewMatrix ()
 Name: CIccMBB::NewMatrix.
 
CIccMBBoperator= (const CIccMBB &IMBB)
 Name: CIccMBB::operator=.
 
icUInt8Number OutputChannels () const
 
CIccCLUTSetCLUT (CIccCLUT *clut)
 Name: CIccMBB::SetCLUT.
 
bool SwapMBCurves ()
 
virtual ~CIccMBB ()
 Name: CIccMBB::~CIccMBB.
 
- Public Member Functions inherited from CIccTag
 CIccTag ()
 Name: CIccTag::CIccTag.
 
virtual void DetachIO ()
 Function: ReadAll() - Read All sub data for tag from file.
 
virtual const icCharGetClassName () const
 
virtual IIccExtensionTagGetExtension ()
 
virtual icArraySignature GetTagArrayType () const
 
virtual icStructSignature GetTagStructType () const
 
virtual bool IsArrayType ()
 
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 icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
 Function: Validate Each derived tag will implement it's own IsValid() function.
 
virtual ~CIccTag ()
 Name: CIccTag::CIccTag.
 

Protected Attributes

icUInt8Number m_nReservedByte
 
icS15Fixed16Number m_XYZMatrix [9]
 
- Protected Attributes inherited from CIccMBB
bool m_bInputMatrix
 
bool m_bUseMCurvesAsBCurves
 
CIccCLUTm_CLUT
 
icColorSpaceSignature m_csInput
 
icColorSpaceSignature m_csOutput
 
LPIccCurvem_CurvesA
 
LPIccCurvem_CurvesB
 
LPIccCurvem_CurvesM
 
CIccMatrixm_Matrix
 
icUInt8Number m_nInput
 
icUInt8Number m_nOutput
 

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
 

Detailed Description

Class: CIccTagLut16.

Purpose: The Lut16 tag type

Definition at line 577 of file IccTagLut.h.

Constructor & Destructor Documentation

◆ CIccTagLut16() [1/2]

CIccTagLut16::CIccTagLut16 ( )

Name: CIccTagLut16::CIccTagLut16.

Purpose: Constructor

Definition at line 4897 of file IccTagLut.cpp.

4898{
4899 memset(m_XYZMatrix, 0, sizeof(m_XYZMatrix));
4900 m_XYZMatrix[0] = m_XYZMatrix[4] = m_XYZMatrix[8] = icDtoF(1.0);
4901 m_nReservedByte = 0;
4902}
icS15Fixed16Number icDtoF(icFloatNumber num)
Definition IccUtil.cpp:545
icUInt8Number m_nReservedByte
Definition IccTagLut.h:596
icS15Fixed16Number m_XYZMatrix[9]
Definition IccTagLut.h:597

References icDtoF(), m_nReservedByte, and m_XYZMatrix.

+ Here is the call graph for this function:

◆ CIccTagLut16() [2/2]

CIccTagLut16::CIccTagLut16 ( const CIccTagLut16 & ITL)

Name: CIccTagLut16::CIccTagLut16.

Purpose: Copy Constructor

Args: ITL = The CIccTagUnknown object to be copied

Definition at line 4915 of file IccTagLut.cpp.

4915 : CIccMBB(ITL)
4916{
4917 memcpy(&m_XYZMatrix, &ITL.m_XYZMatrix, sizeof(m_XYZMatrix));
4918 m_nReservedByte = 0;
4919}
CIccMBB()
Name: CIccMBB::CIccMBB.

References m_nReservedByte, and m_XYZMatrix.

◆ ~CIccTagLut16()

CIccTagLut16::~CIccTagLut16 ( )
virtual

Name: CIccTagLut16::~CIccTagLut16.

Purpose: Destructor

Definition at line 4952 of file IccTagLut.cpp.

4953{
4954}

Member Function Documentation

◆ GetType()

virtual icTagTypeSignature CIccTagLut16::GetType ( ) const
inlinevirtual

Function: GetType()

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

Reimplemented from CIccTag.

Definition at line 586 of file IccTagLut.h.

586{ return icSigLut16Type; }
@ icSigLut16Type

References icSigLut16Type.

Referenced by Read(), Validate(), and Write().

+ Here is the caller graph for this function:

◆ NewCopy()

virtual CIccTag * CIccTagLut16::NewCopy ( ) const
inlinevirtual

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 CIccMBB.

Definition at line 583 of file IccTagLut.h.

583{return new CIccTagLut16(*this);}
CIccTagLut16()
Name: CIccTagLut16::CIccTagLut16.

◆ operator=()

CIccTagLut16 & CIccTagLut16::operator= ( const CIccTagLut16 & ITL)

Name: CIccTagLut16::operator=.

Purpose: Copy Operator

Args: ITL = The CIccTagLut16 object to be copied

Definition at line 4932 of file IccTagLut.cpp.

4933{
4934 if (&ITL==this)
4935 return *this;
4936
4937 CIccMBB::operator=(ITL);
4938 memcpy(&m_XYZMatrix, &ITL.m_XYZMatrix, sizeof(m_XYZMatrix));
4939
4940 return *this;
4941}
CIccMBB & operator=(const CIccMBB &IMBB)
Name: CIccMBB::operator=.

References m_XYZMatrix, and CIccMBB::operator=().

+ Here is the call graph for this function:

◆ Read()

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

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

Definition at line 4971 of file IccTagLut.cpp.

4972{
4974 icUInt32Number nStart, nEnd;
4975 icUInt8Number i, nGrid;
4976 icUInt16Number nInputEntries, nOutputEntries;
4977 LPIccCurve *pCurves;
4978 CIccTagCurve *pCurve;
4979
4980 if (size<13*sizeof(icUInt32Number) || !pIO) {
4981 return false;
4982 }
4983
4984 nStart = pIO->Tell();
4985 nEnd = nStart + size;
4986
4987 if (!pIO->Read32(&sig) ||
4988 !pIO->Read32(&m_nReserved) ||
4989 !pIO->Read8(&m_nInput) ||
4990 !pIO->Read8(&m_nOutput) ||
4991 !pIO->Read8(&nGrid) ||
4992 !pIO->Read8(&m_nReservedByte) ||
4993 pIO->Read32(m_XYZMatrix, 9) != 9 ||
4994 !pIO->Read16(&nInputEntries) ||
4995 !pIO->Read16(&nOutputEntries))
4996 return false;
4997
4998 if (sig!=GetType())
4999 return false;
5000
5001
5002 //B Curves
5003 pCurves = NewCurvesB();
5004
5005 for (i=0; i<m_nInput; i++) {
5006 if (nInputEntries*sizeof(icUInt16Number) > nEnd - pIO->Tell())
5007 return false;
5008
5009 pCurves[i] = pCurve = (CIccTagCurve*)CIccTag::Create(icSigCurveType);
5010
5011 if (!pCurve->SetSize(nInputEntries))
5012 return false;
5013
5014 if (pIO->ReadUInt16Float(&(*pCurve)[0], nInputEntries) != nInputEntries)
5015 return false;
5016 }
5017
5018 //CLUT
5020
5021 if (!m_CLUT->Init(nGrid, nEnd - pIO->Tell(), 2))
5022 return false;
5023
5024 if (!m_CLUT->ReadData(nEnd - pIO->Tell(), pIO, 2))
5025 return false;
5026
5027 //A Curves
5028 pCurves = NewCurvesA();
5029
5030 for (i=0; i<m_nOutput; i++) {
5031 if (nOutputEntries*sizeof(icUInt16Number) > nEnd - pIO->Tell())
5032 return false;
5033
5034 pCurves[i] = pCurve = (CIccTagCurve*)CIccTag::Create(icSigCurveType);
5035
5036 if (!pCurve->SetSize(nOutputEntries))
5037 return false;
5038
5039 if (pIO->ReadUInt16Float(&(*pCurve)[0], nOutputEntries) != nOutputEntries)
5040 return false;
5041 }
5042 return true;
5043}
icArraySignature sig
icTagTypeSignature
unsigned int icUInt32Number
Class: CIccCLUT.
Definition IccTagLut.h:326
bool ReadData(icUInt32Number size, CIccIO *pIO, icUInt8Number nPrecision)
Name: CIccCLUT::ReadData.
bool Init(icUInt8Number nGridPoints, icUInt32Number nMaxSize=0, icUInt8Number nBytesPerPoint=4)
Name: CIccCLUT::Init.
Class: CIccCurve.
Definition IccTagLut.h:91
virtual icInt32Number Read8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:104
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
virtual icInt32Number Tell()
Definition IccIO.h:133
icInt32Number ReadUInt16Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:236
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
LPIccCurve * NewCurvesB()
Name: CIccMBB::NewCurvesB.
CIccCLUT * m_CLUT
Definition IccTagLut.h:487
icUInt8Number m_nOutput
Definition IccTagLut.h:481
LPIccCurve * NewCurvesA()
Name: CIccMBB::NewCurvesA.
icUInt8Number m_nInput
Definition IccTagLut.h:480
Class: CIccTagCurve.
Definition IccTagLut.h:128
bool SetSize(icUInt32Number nSize, icTagCurveSizeInit nSizeOpt=icInitZero)
Name: CIccTagCurve::SetSize.
icUInt32Number m_nReserved
static CIccTag * Create(icTagTypeSignature sig)
Name: CIccTag::Create.
virtual icTagTypeSignature GetType() const
Function: GetType()
Definition IccTagLut.h:586
unsigned char icUInt8Number
Number definitions.
unsigned short icUInt16Number
@ icSigCurveType

References CIccTag::Create(), GetType(), icSigCurveType, CIccCLUT::Init(), CIccMBB::m_CLUT, CIccMBB::m_nInput, CIccMBB::m_nOutput, CIccTag::m_nReserved, m_nReservedByte, m_XYZMatrix, CIccMBB::NewCurvesA(), CIccMBB::NewCurvesB(), CIccIO::Read16(), CIccIO::Read32(), CIccIO::Read8(), CIccCLUT::ReadData(), CIccIO::ReadUInt16Float(), CIccTagCurve::SetSize(), sig, and CIccIO::Tell().

+ Here is the call graph for this function:

◆ SetColorSpaces()

void CIccTagLut16::SetColorSpaces ( icColorSpaceSignature csInput,
icColorSpaceSignature csOutput )
virtual

Name: CIccTagLut16::SetColorSpaces.

Purpose: Sets the input and output color spaces

Args: csInput = input color space signature, csOutput = output color space signature

Reimplemented from CIccMBB.

Definition at line 5058 of file IccTagLut.cpp.

5059{
5060 if (csInput==icSigXYZData) {
5061 int i;
5062
5063 if (!m_CurvesM && IsInputMatrix()) { //Transfer ownership of curves
5065 m_CurvesB = NULL;
5066
5067 LPIccCurve *pCurves = NewCurvesB();
5068 CIccTagCurve *pCurve;
5069 for (i=0; i<m_nInput; i++) {
5070 pCurves[i] = pCurve = (CIccTagCurve*)CIccTag::Create(icSigCurveType);
5071 pCurve->SetSize(0);
5072 }
5073
5075 }
5076
5077 if (!m_Matrix) {
5078 CIccMatrix *pMatrix = NewMatrix();
5079 for (i=0; i<9; i++) {
5080 pMatrix->m_e[i] = icFtoD(m_XYZMatrix[i]);
5081 }
5082
5083 pMatrix->m_bUseConstants=false;
5084 }
5085 }
5086 else {
5087 m_XYZMatrix[0] = m_XYZMatrix[4] = m_XYZMatrix[8] = icDtoF(1.0);
5088 m_XYZMatrix[1] = m_XYZMatrix[2] = m_XYZMatrix[3] =
5089 m_XYZMatrix[5] = m_XYZMatrix[6] = m_XYZMatrix[7] = 0;
5090 }
5091
5092 CIccMBB::SetColorSpaces(csInput, csOutput);
5093}
icFloatNumber icFtoD(icS15Fixed16Number num)
Definition IccUtil.cpp:559
LPIccCurve * m_CurvesB
Definition IccTagLut.h:490
CIccMatrix * NewMatrix()
Name: CIccMBB::NewMatrix.
virtual bool IsInputMatrix()
Definition IccTagLut.h:442
LPIccCurve * m_CurvesM
Definition IccTagLut.h:489
virtual void SetColorSpaces(icColorSpaceSignature csInput, icColorSpaceSignature csOutput)
Name: CIccMBB::SetColorSpaces.
bool m_bUseMCurvesAsBCurves
Definition IccTagLut.h:478
CIccMatrix * m_Matrix
Definition IccTagLut.h:488
Class: CIccMatrix.
Definition IccTagLut.h:260
icFloatNumber m_e[12]
Definition IccTagLut.h:269
bool m_bUseConstants
Definition IccTagLut.h:270
@ icSigXYZData

References CIccTag::Create(), icDtoF(), icFtoD(), icSigCurveType, icSigXYZData, CIccMBB::IsInputMatrix(), CIccMatrix::m_bUseConstants, CIccMBB::m_bUseMCurvesAsBCurves, CIccMBB::m_CurvesB, CIccMBB::m_CurvesM, CIccMatrix::m_e, CIccMBB::m_Matrix, CIccMBB::m_nInput, m_XYZMatrix, CIccMBB::NewCurvesB(), CIccMBB::NewMatrix(), CIccMBB::SetColorSpaces(), and CIccTagCurve::SetSize().

+ Here is the call graph for this function:

◆ UseLegacyPCS()

virtual bool CIccTagLut16::UseLegacyPCS ( ) const
inlinevirtual

Reimplemented from CIccMBB.

Definition at line 587 of file IccTagLut.h.

587{ return true; } //Treat Lab Encoding differently?

◆ Validate()

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

Name: CIccTagLut16::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 CIccMBB.

Definition at line 5201 of file IccTagLut.cpp.

5202{
5203 icValidateStatus rv = CIccMBB::Validate(sigPath, sReport, pProfile);
5204
5205 CIccInfo Info;
5206 std::string sSigPathName = Info.GetSigPathName(sigPath);
5208
5209 if (!pProfile) {
5211 return rv;
5212 }
5213
5214 switch(sig) {
5215 case icSigAToB0Tag:
5216 case icSigAToB1Tag:
5217 case icSigAToB2Tag:
5218 case icSigBToA0Tag:
5219 case icSigBToA1Tag:
5220 case icSigBToA2Tag:
5221 case icSigGamutTag:
5222 {
5223 icUInt32Number nInput, nOutput;
5225 nInput = icGetSpaceSamples(pProfile->m_Header.pcs);
5226 nOutput = icGetSpaceSamples(pProfile->m_Header.colorSpace);
5227 }
5228 else {
5229 nInput = icGetSpaceSamples(pProfile->m_Header.colorSpace);
5230 nOutput = icGetSpaceSamples(pProfile->m_Header.pcs);
5231 }
5232
5233 if (sig==icSigGamutTag) {
5234 nOutput = 1;
5235 }
5236
5237 icUInt8Number i;
5238 if (m_CurvesB) {
5239 for (i=0; i<nInput; i++) {
5240 if (m_CurvesB[i]) {
5241 rv = icMaxStatus(rv, m_CurvesB[i]->Validate(sigPath+icGetSigPath(GetType()), sReport, pProfile));
5242 if (m_CurvesB[i]->GetType()==icSigCurveType) {
5243 CIccTagCurve *pTagCurve = (CIccTagCurve*)m_CurvesB[i];
5244 if (pTagCurve->GetSize()==1) {
5245 sReport += icMsgValidateCriticalError;
5246 sReport += sSigPathName;
5247 sReport += " - lut16Tags do not support single entry gamma curves.\n";
5249 }
5250 }
5251 }
5252 else {
5253 sReport += icMsgValidateCriticalError;
5254 sReport += sSigPathName;
5255 sReport += " - Incorrect number of B-curves.\n";
5257 }
5258 }
5259 }
5260
5261 if (m_Matrix) {
5262 rv = icMaxStatus(rv, m_Matrix->Validate(sigPath + icGetSigPath(GetType()), sReport, pProfile));
5263 }
5264 else {
5265 int sum=0;
5266 for (int i=0; i<9; i++) {
5267 sum += m_XYZMatrix[i];
5268 }
5269 if (m_XYZMatrix[0]!=1.0 || m_XYZMatrix[4]!=1.0 || m_XYZMatrix[8]!=1.0 || sum!=3.0) {
5270 sReport += icMsgValidateWarning;
5271 sReport += sSigPathName;
5272 sReport += " - Matrix must be identity.\n";
5274 }
5275 }
5276
5277 if (m_CurvesA) {
5278
5279 for (i=0; i<nOutput; i++) {
5280 if (m_CurvesA[i]) {
5281 rv = icMaxStatus(rv, m_CurvesA[i]->Validate(sigPath+icGetSigPath(GetType()), sReport, pProfile));
5282 if (m_CurvesA[i]->GetType()==icSigCurveType) {
5283 CIccTagCurve *pTagCurve = (CIccTagCurve*)m_CurvesA[i];
5284 if (pTagCurve->GetSize()==1) {
5285 sReport += icMsgValidateCriticalError;
5286 sReport += sSigPathName;
5287 sReport += " - lut16Tags do not support single entry gamma curves.\n";
5289 }
5290 }
5291 }
5292 else {
5293 sReport += icMsgValidateCriticalError;
5294 sReport += sSigPathName;
5295 sReport += " - Incorrect number of A-curves.\n";
5297 }
5298 }
5299
5300 }
5301
5302 break;
5303 }
5304 default:
5305 {
5306 }
5307 }
5308
5309
5310 return rv;
5311}
icValidateStatus
Definition IccDefs.h:118
@ icValidateWarning
Definition IccDefs.h:120
@ 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 * icMsgValidateWarning
Definition IccUtil.cpp:90
icUInt32Number icGetSpaceSamples(icColorSpaceSignature sig)
Definition IccUtil.cpp:1303
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
icSignature icGetFirstSigPathSig(std::string sigPath)
Definition IccUtil.cpp:1201
Type: Class.
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)
Name: CIccMBB::Validate.
LPIccCurve * m_CurvesA
Definition IccTagLut.h:486
icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL) const
Name: CIccMatrix::Validate.
icUInt32Number GetSize() const
Definition IccTagLut.h:148
virtual icValidateStatus Validate(std::string sigPath, std::string &sReport, const CIccProfile *pProfile=NULL)
Name: CIccTagLut16::Validate.
icUInt32Number icSignature
@ icSigBToA2Tag
@ icSigAToB0Tag
@ icSigBToA1Tag
@ icSigAToB2Tag
@ icSigBToA0Tag
@ icSigAToB1Tag
@ icSigGamutTag

References CIccInfo::GetSigPathName(), CIccTagCurve::GetSize(), GetType(), icGetFirstSigPathSig(), icGetSigPath(), icGetSpaceSamples(), icMaxStatus(), icMsgValidateCriticalError, icMsgValidateWarning, icSigAToB0Tag, icSigAToB1Tag, icSigAToB2Tag, icSigBToA0Tag, icSigBToA1Tag, icSigBToA2Tag, icSigCurveType, icSigGamutTag, icValidateCriticalError, icValidateWarning, CIccMBB::m_CurvesA, CIccMBB::m_CurvesB, CIccMBB::m_Matrix, m_XYZMatrix, sig, CIccMatrix::Validate(), CIccMBB::Validate(), and Validate().

Referenced by Validate().

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

◆ Write()

bool CIccTagLut16::Write ( CIccIO * pIO)
virtual

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

Definition at line 5109 of file IccTagLut.cpp.

5110{
5112 icUInt8Number i, nGrid;
5113 icS15Fixed16Number XYZMatrix[9];
5114 icUInt16Number nInputEntries, nOutputEntries;
5115 LPIccCurve *pCurves;
5116 CIccTagCurve *pCurve;
5117
5118 if (m_Matrix) {
5119 for (i=0; i<9; i++) {
5120 XYZMatrix[i] = icDtoF(m_Matrix->m_e[i]);
5121 }
5122 }
5123 else {
5124 memset(XYZMatrix, 0, 9*sizeof(icS15Fixed16Number));
5125 XYZMatrix[0] = XYZMatrix[4] = XYZMatrix[8] = icDtoF(1.0);
5126 }
5127
5129 pCurves = m_CurvesM;
5130 }
5131 else {
5132 pCurves = m_CurvesB;
5133 }
5134
5135 if (!pCurves || !m_CurvesA || !m_CLUT)
5136 return false;
5137
5138 nGrid = m_CLUT->GridPoints();
5139
5140 nInputEntries = (icUInt16Number)(((CIccTagCurve*)pCurves[0])->GetSize());
5141 nOutputEntries = (icUInt16Number)(((CIccTagCurve*)m_CurvesA[0])->GetSize());
5142
5143 if (!pIO->Write32(&sig) ||
5144 !pIO->Write32(&m_nReserved) ||
5145 !pIO->Write8(&m_nInput) ||
5146 !pIO->Write8(&m_nOutput) ||
5147 !pIO->Write8(&nGrid) ||
5148 !pIO->Write8(&m_nReservedByte) ||
5149 pIO->Write32(XYZMatrix, 9) != 9 ||
5150 !pIO->Write16(&nInputEntries) ||
5151 !pIO->Write16(&nOutputEntries))
5152 return false;
5153
5154 //B Curves
5155 for (i=0; i<m_nInput; i++) {
5156 if (pCurves[i]->GetType()!=icSigCurveType)
5157 return false;
5158
5159 pCurve = (CIccTagCurve*)pCurves[i];
5160 if (!pCurve)
5161 return false;
5162
5163 if (pIO->WriteUInt16Float(&(*pCurve)[0], nInputEntries) != nInputEntries)
5164 return false;
5165 }
5166
5167 //CLUT
5168 if (!m_CLUT->WriteData(pIO, 2))
5169 return false;
5170
5171 //A Curves
5172 pCurves = m_CurvesA;
5173
5174 for (i=0; i<m_nOutput; i++) {
5175 if (pCurves[i]->GetType()!=icSigCurveType)
5176 return false;
5177
5178 pCurve = (CIccTagCurve*)pCurves[i];
5179
5180 if (pIO->WriteUInt16Float(&(*pCurve)[0], nOutputEntries) != nOutputEntries)
5181 return false;
5182 }
5183 return true;
5184}
bool WriteData(CIccIO *pIO, icUInt8Number nPrecision)
Name: CIccCLUT::WriteData.
icUInt8Number GridPoints() const
Definition IccTagLut.h:349
virtual icInt32Number Write8(void *pBuf8, icInt32Number nNum=1)
Definition IccIO.h:105
icInt32Number Write16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:122
icInt32Number Write32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:152
icInt32Number WriteUInt16Float(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:252
icInt32Number icS15Fixed16Number
Fixed numbers.

References GetType(), CIccCLUT::GridPoints(), icDtoF(), icSigCurveType, CIccMBB::m_bUseMCurvesAsBCurves, CIccMBB::m_CLUT, CIccMBB::m_CurvesA, CIccMBB::m_CurvesB, CIccMBB::m_CurvesM, CIccMatrix::m_e, CIccMBB::m_Matrix, CIccMBB::m_nInput, CIccMBB::m_nOutput, CIccTag::m_nReserved, m_nReservedByte, sig, CIccIO::Write16(), CIccIO::Write32(), CIccIO::Write8(), CIccCLUT::WriteData(), and CIccIO::WriteUInt16Float().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_nReservedByte

icUInt8Number CIccTagLut16::m_nReservedByte
protected

Definition at line 596 of file IccTagLut.h.

Referenced by CIccTagLut16(), CIccTagLut16(), Read(), and Write().

◆ m_XYZMatrix

icS15Fixed16Number CIccTagLut16::m_XYZMatrix[9]
protected

Definition at line 597 of file IccTagLut.h.

Referenced by CIccTagLut16(), CIccTagLut16(), operator=(), Read(), SetColorSpaces(), and Validate().


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