IccMAX 2.1.27
Color Profile Tools
Loading...
Searching...
No Matches
IccEncoding.cpp File Reference
#include "IccEncoding.h"
#include "IccProfile.h"
#include "IccTag.h"
#include "IccTagMPE.h"
#include "IccMpeBasic.h"
#include "IccCAM.h"
#include "IccUtil.h"
#include <string>
#include <time.h>
#include <cstring>
+ Include dependency graph for IccEncoding.cpp:

Go to the source code of this file.

Data Structures

class  CIccDefaultEncProfileCacheHandler
 
class  CIccDefaultEncProfileConverter
 

Functions

icStatusEncConvert icConvertEncodingProfile (CIccProfilePtr &newIcc, CIccProfile *pEncodeIcc)
 
static icFloatNumber icGetParamFloatNum (CIccTagStruct *pParams, icColorEncodingParamsMemberSignature sig, icFloatNumber defaultValue=0)
 
static void icYxy2XYZVector (icFloatNumber *XYZ, icFloatNumber Y, icFloatNumber *xy, icUInt8Number idxOffset=1)
 

Variables

static IIccEncProfileCacheHandlerg_pEncProfileCacheHandler = NULL
 
static IIccEncProfileConverterg_pEncProfileConverter = NULL
 

Function Documentation

◆ icConvertEncodingProfile()

icStatusEncConvert icConvertEncodingProfile ( CIccProfilePtr &  newIcc,
CIccProfile pEncodeIcc 
)
539{
540 newIcc = NULL;
541
542 if (!pEncodeIcc || pEncodeIcc->m_Header.deviceClass!=icSigColorEncodingClass)
544
545 CIccTag *pTag;
546 CIccTagStruct *pParams=NULL;
547 pTag = pEncodeIcc->FindTagOfType(icSigReferenceNameTag, icSigUtf8TextType);
548 if (pTag) {
549 CIccTagUtf8Text *pText = (CIccTagUtf8Text*)pTag;
550 const icUChar *szRefName = pText->GetText();
551 if (!strcmp((const char*)szRefName, "ISO 22028-1")) {
552 pTag = pEncodeIcc->FindTagOfType(icSigColorEncodingParamsTag, icSigTagStructType);
553 if (pTag)
554 pParams = (CIccTagStruct*)pTag->NewCopy();
555 }
556 else {
557 CIccTag *pNameTag = pEncodeIcc->FindTagOfType(icSigColorSpaceNameTag, icSigUtf8TextType);
558 if (pNameTag) {
559 pText = (CIccTagUtf8Text *)pNameTag;
560 const icUChar *szName = pText->GetText();
561
563 if (!pBaseIcc) {
565 }
566
567 pTag = pBaseIcc->FindTagOfType(icSigColorEncodingParamsTag, icSigTagStructType);
568 if (!pTag) {
569 delete pBaseIcc;
571 }
572 pParams = (CIccTagStruct*)pTag->NewCopy();
573 delete pBaseIcc;
574
575 //Now Copy Overrides into pParams (if they exist in pEncodeIcc
576 CIccTag *pOverridesTag = pEncodeIcc->FindTagOfType(icSigColorEncodingParamsTag, icSigTagStructType);
577 if (pOverridesTag) {
578 CIccTagStruct *pStruct = (CIccTagStruct*)pOverridesTag;
579 TagEntryList *pTags = pStruct->GetElemList();
580 if (pTags) {
581 TagEntryList::iterator entry;
582 for (entry=pTags->begin(); entry!=pTags->end(); entry++) {
583 if (entry->pTag) {
584 pStruct->DeleteElem(entry->TagInfo.sig);
585 pStruct->AttachElem(entry->TagInfo.sig, entry->pTag->NewCopy());
586 }
587 }
588 }
589 }
590 }
591 }
592 }
593
594 if (!pParams) {
596 }
597
598 //Create and initialize new profile from pEncodeIcc and pParams
599 icStatusEncConvert stat = IIccEncProfileConverter::GetHandler()->ConvertFromParams(newIcc, pParams, &pEncodeIcc->m_Header);
600
601 delete pParams;
602
603 return stat;
604}
@ icSigColorEncodingClass
Definition icProfileHeader.h:959
@ icSigUtf8TextType
Definition icProfileHeader.h:574
@ icSigTagStructType
Definition icProfileHeader.h:564
@ icSigColorSpaceNameTag
Definition icProfileHeader.h:384
@ icSigColorEncodingParamsTag
Definition icProfileHeader.h:383
@ icSigReferenceNameTag
Definition icProfileHeader.h:464
class ICCPROFLIB_API CIccProfile
Definition IccPcc.h:80
unsigned char icUChar
Definition IccDefs.h:111
icStatusEncConvert
Definition IccEncoding.h:74
@ icEncConvertBadProfile
Definition IccEncoding.h:76
@ icEncConvertNoBaseProfile
Definition IccEncoding.h:77
@ icEncConvertBadBaseProfile
Definition IccEncoding.h:78
Definition IccTagComposite.h:156
bool AttachElem(icSignature sig, CIccTag *pTag)
Definition IccTagComposite.cpp:757
bool DeleteElem(icSignature sig)
Definition IccTagComposite.cpp:807
TagEntryList * GetElemList()
Definition IccTagComposite.h:181
virtual CIccProfile * GetEncodingProfile(const icUChar *szColorSpaceName)=0
static IIccEncProfileCacheHandler * GetHandler()
Definition IccEncoding.cpp:99
static IIccEncProfileConverter * GetHandler()
Definition IccEncoding.cpp:519
virtual icStatusEncConvert ConvertFromParams(CIccProfilePtr &newIcc, CIccTagStruct *pParams, icHeader *pHeader)=0
Definition IccTagBasic.h:108
virtual CIccTag * NewCopy() const
Definition IccTagBasic.h:121
Definition IccTagBasic.h:322
const icUChar * GetText() const
Definition IccTagBasic.h:338

References CIccTagStruct::AttachElem(), CIccProfile, IIccEncProfileConverter::ConvertFromParams(), CIccTagStruct::DeleteElem(), icHeader::deviceClass, CIccTagStruct::GetElemList(), IIccEncProfileCacheHandler::GetEncodingProfile(), IIccEncProfileCacheHandler::GetHandler(), IIccEncProfileConverter::GetHandler(), CIccTagUtf8Text::GetText(), icEncConvertBadBaseProfile, icEncConvertBadProfile, icEncConvertNoBaseProfile, icSigColorEncodingClass, icSigColorEncodingParamsTag, icSigColorSpaceNameTag, icSigReferenceNameTag, icSigTagStructType, icSigUtf8TextType, CIccTag::NewCopy(), and icTag::sig.

+ Here is the call graph for this function:

◆ icGetParamFloatNum()

static icFloatNumber icGetParamFloatNum ( CIccTagStruct pParams,
icColorEncodingParamsMemberSignature  sig,
icFloatNumber  defaultValue = 0 
)
static
126{
128
129 if (!pTag || pTag->GetSize()<1)
130 return defaultValue;
131
132 return (*pTag)[0];
133}
@ icSigFloat32ArrayType
Definition icProfileHeader.h:541
CIccTag * FindElemOfType(icSignature sig, icTagTypeSignature sigType)
Definition IccTagComposite.cpp:698
Definition IccTagBasic.h:1058
icUInt32Number GetSize() const
Returns the size of the data array.
Definition IccTagBasic.h:1079

References CIccTagStruct::FindElemOfType(), CIccTagFloatNum< T, Tsig >::GetSize(), icSigFloat32ArrayType, and CIccTagFloatNum< T, Tsig >::operator[]().

+ Here is the call graph for this function:

◆ icYxy2XYZVector()

static void icYxy2XYZVector ( icFloatNumber XYZ,
icFloatNumber  Y,
icFloatNumber xy,
icUInt8Number  idxOffset = 1 
)
static
136{
137 XYZ[0] = Y*xy[0] / xy[1];
138 XYZ[idxOffset] = Y;
139 XYZ[idxOffset<<1] = Y*(1.0f-xy[0]-xy[1]) / xy[1];
140}

Referenced by CIccDefaultEncProfileConverter::ConvertFromParams().

+ Here is the caller graph for this function:

Variable Documentation

◆ g_pEncProfileCacheHandler

◆ g_pEncProfileConverter