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

Class: CIccSegmentedCurve. More...

#include <IccMpeBasic.h>

+ Inheritance diagram for CIccSegmentedCurve:
+ Collaboration diagram for CIccSegmentedCurve:

Public Member Functions

virtual icFloatNumber Apply (icFloatNumber v) const
 Name: CIccSegmentedCurve::Apply.
 
virtual bool Begin (icElemInterp nInterp, CIccTagMultiProcessElement *pMPE)
 Name: CIccSegmentedCurve::Begin.
 
 CIccSegmentedCurve ()
 Name: CIccSegmentedCurve::CIccSegmentedCurve.
 
 CIccSegmentedCurve (const CIccSegmentedCurve &ITPC)
 Name: CIccSegmentedCurve::CIccSegmentedCurve.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccSegmentedCurve::Describe.
 
virtual const icCharGetClassName () const
 
virtual icCurveElemSignature GetType () const
 
bool Insert (CIccCurveSegment *pCurveSegment)
 Name: CIccSegmentedCurve::Insert.
 
virtual CIccCurveSetCurveNewCopy () const
 
CIccSegmentedCurveoperator= (const CIccSegmentedCurve &ParamCurveTag)
 Name: &CIccSegmentedCurve::operator=.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccSegmentedCurve::Read.
 
void Reset ()
 Name: CIccSegmentedCurve::Reset.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const
 Name: CIccSegmentedCurve::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccSegmentedCurve::Write.
 
virtual ~CIccSegmentedCurve ()
 Name: CIccSegmentedCurve::~CIccSegmentedCurve.
 
- Public Member Functions inherited from CIccCurveSetCurve
virtual ~CIccCurveSetCurve ()
 

Protected Attributes

CIccCurveSegmentListm_list
 
icUInt32Number m_nReserved1
 
icUInt32Number m_nReserved2
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccCurveSetCurve
static CIccCurveSetCurveCreate (icCurveElemSignature sig)
 Name: CIccCurveSetCurve::Create.
 

Detailed Description

Class: CIccSegmentedCurve.

Purpose: The Curve Set Segmented Curve Type

Definition at line 248 of file IccMpeBasic.h.

Constructor & Destructor Documentation

◆ CIccSegmentedCurve() [1/2]

CIccSegmentedCurve::CIccSegmentedCurve ( )

Name: CIccSegmentedCurve::CIccSegmentedCurve.

Purpose:

Args:

Return:

Definition at line 2523 of file IccMpeBasic.cpp.

2524{
2526 m_nReserved1 = 0;
2527 m_nReserved2 = 0;
2528
2529}
std::list< CIccCurveSegment * > CIccCurveSegmentList
icUInt32Number m_nReserved2
CIccCurveSegmentList * m_list
icUInt32Number m_nReserved1

◆ CIccSegmentedCurve() [2/2]

CIccSegmentedCurve::CIccSegmentedCurve ( const CIccSegmentedCurve & curve)

Name: CIccSegmentedCurve::CIccSegmentedCurve.

Purpose:

Args:

Return:

Definition at line 2542 of file IccMpeBasic.cpp.

2543{
2544 CIccCurveSegmentList::iterator i;
2545
2547
2548 for (i=curve.m_list->begin(); i!=curve.m_list->end(); i++) {
2549 m_list->push_back((*i)->NewCopy());
2550 }
2551 m_nReserved1 = curve.m_nReserved1;
2552 m_nReserved2 = curve.m_nReserved2;
2553}

References m_list, m_nReserved1, and m_nReserved2.

◆ ~CIccSegmentedCurve()

CIccSegmentedCurve::~CIccSegmentedCurve ( )
virtual

Name: CIccSegmentedCurve::~CIccSegmentedCurve.

Purpose:

Args:

Return:

Definition at line 2592 of file IccMpeBasic.cpp.

2593{
2594 Reset();
2595 delete m_list;
2596}
void Reset()
Name: CIccSegmentedCurve::Reset.

Member Function Documentation

◆ Apply()

icFloatNumber CIccSegmentedCurve::Apply ( icFloatNumber v) const
virtual

Name: CIccSegmentedCurve::Apply.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2882 of file IccMpeBasic.cpp.

2883{
2884 CIccCurveSegmentList::iterator i;
2885
2886 for (i=m_list->begin(); i!=m_list->end(); i++) {
2887 if (v <= (*i)->EndPoint())
2888 return (*i)->Apply(v);
2889 }
2890 return v;
2891}

References CIccCurveSegment::Apply().

+ Here is the call graph for this function:

◆ Begin()

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

Name: CIccSegmentedCurve::Begin.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2854 of file IccMpeBasic.cpp.

2855{
2856 if (m_list->size()==0)
2857 return false;
2858
2859 CIccCurveSegmentList::iterator i;
2860 CIccCurveSegment *pLast = NULL;
2861
2862 for (i=m_list->begin(); i!=m_list->end(); i++) {
2863 if (!(*i)->Begin(pLast))
2864 return false;
2865 pLast = *i;
2866 }
2867
2868 return true;
2869}
Class: CIccCurveSegment.
Definition IccMpeBasic.h:95

Referenced by CIccTagSegmentedCurve::Begin().

+ Here is the caller graph for this function:

◆ Describe()

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

Name: CIccSegmentedCurve::Describe.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2609 of file IccMpeBasic.cpp.

2610{
2611 CIccCurveSegmentList::iterator i;
2612
2613 sDescription += "BEGIN_CURVE\n";
2614 for (i=m_list->begin(); i!=m_list->end(); i++) {
2615 (*i)->Describe(sDescription, nVerboseness);
2616 }
2617}

◆ GetClassName()

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

Implements CIccCurveSetCurve.

Definition at line 258 of file IccMpeBasic.h.

258{ return "CIccSegmentedCurve"; }

◆ GetType()

virtual icCurveElemSignature CIccSegmentedCurve::GetType ( ) const
inlinevirtual

Implements CIccCurveSetCurve.

Definition at line 257 of file IccMpeBasic.h.

257{ return icSigSegmentedCurve; }
@ icSigSegmentedCurve

References icSigSegmentedCurve.

◆ Insert()

bool CIccSegmentedCurve::Insert ( CIccCurveSegment * pCurveSegment)

Name: CIccSegmentedCurve::Insert.

Purpose:

Args:

Return:

Definition at line 2825 of file IccMpeBasic.cpp.

2826{
2827 CIccCurveSegmentList::reverse_iterator last = m_list->rbegin();
2828
2829 if (last!=m_list->rend()) {
2830 if (pCurveSegment->StartPoint() == (*last)->EndPoint()) {
2831 m_list->push_back(pCurveSegment);
2832 return true;
2833 }
2834 }
2835 else {
2836 m_list->push_back(pCurveSegment);
2837 return true;
2838 }
2839
2840 return false;
2841}
icFloatNumber StartPoint()

References CIccCurveSegment::StartPoint().

+ Here is the call graph for this function:

◆ NewCopy()

virtual CIccCurveSetCurve * CIccSegmentedCurve::NewCopy ( ) const
inlinevirtual

Implements CIccCurveSetCurve.

Definition at line 254 of file IccMpeBasic.h.

254{ return new CIccSegmentedCurve(*this);}
CIccSegmentedCurve()
Name: CIccSegmentedCurve::CIccSegmentedCurve.

Referenced by CIccTagSegmentedCurve::CIccTagSegmentedCurve(), CIccDefaultEncProfileConverter::ConvertFromParams(), and CIccTagSegmentedCurve::operator=().

+ Here is the caller graph for this function:

◆ operator=()

CIccSegmentedCurve & CIccSegmentedCurve::operator= ( const CIccSegmentedCurve & curve)

Name: &CIccSegmentedCurve::operator=.

Purpose:

Args:

Return:

Definition at line 2566 of file IccMpeBasic.cpp.

2567{
2568 Reset();
2569
2570 CIccCurveSegmentList::iterator i;
2571
2572 for (i=curve.m_list->begin(); i!=curve.m_list->end(); i++) {
2573 m_list->push_back((*i)->NewCopy());
2574 }
2575 m_nReserved1 = curve.m_nReserved1;
2576 m_nReserved2 = curve.m_nReserved2;
2577
2578 return (*this);
2579}

References m_list, m_nReserved1, and m_nReserved2.

◆ Read()

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

Name: CIccSegmentedCurve::Read.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2631 of file IccMpeBasic.cpp.

2632{
2634
2635 icUInt32Number startPos = pIO->Tell();
2636
2637 icUInt32Number headerSize = sizeof(icCurveElemSignature) +
2638 sizeof(icUInt32Number) +
2639 sizeof(icUInt16Number) +
2640 sizeof(icUInt16Number);
2641
2642 if (headerSize > size)
2643 return false;
2644
2645 if (!pIO) {
2646 return false;
2647 }
2648
2649 if (!pIO->Read32(&sig))
2650 return false;
2651
2652 if (sig!=GetType())
2653 return false;
2654
2655 if (!pIO->Read32(&m_nReserved1))
2656 return false;
2657
2658 icUInt16Number nSegments;
2659
2660 if (!pIO->Read16(&nSegments))
2661 return false;
2662
2663 if (!pIO->Read16(&m_nReserved2))
2664 return false;
2665
2666 Reset();
2667
2668 icUInt32Number pos = pIO->Tell();
2669 icCurveSegSignature segSig;
2670 CIccCurveSegment *pSeg;
2671
2672 if (nSegments==1) {
2673 if (sizeof(segSig) > size - headerSize)
2674 return false;
2675
2676 if (!pIO->Read32(&segSig))
2677 return false;
2679 if (!pSeg)
2680 return false;
2681
2682 pIO->Seek(pos, icSeekSet);
2683
2684 if (!pSeg->Read(size-(pos-startPos), pIO)) {
2685 delete pSeg;
2686 return false;
2687 }
2688
2689 m_list->push_back(pSeg);
2690 }
2691 else if (nSegments) {
2692 if (nSegments > size - headerSize)
2693 return false;
2694
2695 icFloatNumber *breakpoints=(icFloatNumber*)calloc(nSegments-1, sizeof(icFloatNumber));
2696
2697 if (!breakpoints)
2698 return false;
2699
2700 if (pIO->ReadFloat32Float(breakpoints, nSegments-1)!=nSegments-1) {
2701 free(breakpoints);
2702 return false;
2703 }
2704
2705 int i;
2706 for (i=0; i<nSegments; i++) {
2707 pos = pIO->Tell();
2708 if (!pIO->Read32(&segSig)) {
2709 free(breakpoints);
2710 return false;
2711 }
2712 if (pIO->Seek(pos, icSeekSet)!=(icInt32Number)pos)
2713 return false;;
2714
2715 if (!i)
2716 pSeg = CIccCurveSegment::Create(segSig, icMinFloat32Number, breakpoints[i]);
2717 else if (i==nSegments-1)
2718 pSeg = CIccCurveSegment::Create(segSig, breakpoints[i-1], icMaxFloat32Number);
2719 else
2720 pSeg = CIccCurveSegment::Create(segSig, breakpoints[i-1], breakpoints[i]);
2721
2722 if (!pSeg) {
2723 free(breakpoints);
2724 return false;
2725 }
2726
2727 if (!pSeg->Read(size-(pos-startPos), pIO)) {
2728 delete pSeg;
2729 free(breakpoints);
2730 return false;
2731 }
2732
2733 m_list->push_back(pSeg);
2734 }
2735
2736 free(breakpoints);
2737 }
2738
2739 return true;
2740}
icArraySignature sig
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100
@ icSeekSet
Definition IccIO.h:83
unsigned int icUInt32Number
virtual bool Read(icUInt32Number size, CIccIO *pIO)=0
static CIccCurveSegment * Create(icCurveSegSignature sig, icFloatNumber start, icFloatNumber end)
Name: CIccCurveSegment::Create.
icInt32Number ReadFloat32Float(void *pBufFloat, icInt32Number nNum=1)
Definition IccIO.cpp:302
icInt32Number Read16(void *pBuf16, icInt32Number nNum=1)
Definition IccIO.cpp:114
virtual icInt32Number Tell()
Definition IccIO.h:133
virtual icInt32Number Seek(icInt32Number nOffset, icSeekVal pos)
Definition IccIO.h:132
icInt32Number Read32(void *pBuf32, icInt32Number nNum=1)
Definition IccIO.cpp:143
virtual icCurveElemSignature GetType() const
icCurveElemSignature
MPE Curve Set Curve signature.
unsigned short icUInt16Number
long icInt32Number
icCurveSegSignature
MPE Curve segment Signatures.
#define icMinFloat32Number
#define icMaxFloat32Number
Useful macros for defining Curve Segment breakpoints.

References CIccCurveSegment::Create(), icMaxFloat32Number, icMinFloat32Number, icSeekSet, CIccCurveSegment::Read(), CIccIO::Read16(), CIccIO::Read32(), CIccIO::ReadFloat32Float(), CIccIO::Seek(), sig, and CIccIO::Tell().

Referenced by CIccTagSegmentedCurve::Read().

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

◆ Reset()

void CIccSegmentedCurve::Reset ( )

Name: CIccSegmentedCurve::Reset.

Purpose:

Args:

Return:

Definition at line 2804 of file IccMpeBasic.cpp.

2805{
2806 CIccCurveSegmentList::iterator i;
2807
2808 for (i=m_list->begin(); i!=m_list->end(); i++) {
2809 delete (*i);
2810 }
2811 m_list->clear();
2812}

◆ Validate()

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

Name: CIccSegmentedCurve::Validate.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2903 of file IccMpeBasic.cpp.

2904{
2905 CIccInfo Info;
2906 std::string sSigPathName = Info.GetSigPathName(sigPath);
2907
2909 if (m_nReserved1 || m_nReserved2) {
2910 sReport += icMsgValidateWarning;
2911 sReport += sSigPathName;
2912 sReport += " Segmented curve has non zero reserved data.\n";
2913 rv = icValidateWarning;
2914 }
2915
2916 if (m_list->size()==0) {
2917 sReport += icMsgValidateCriticalError;
2918 sReport += sSigPathName;
2919 sReport += " Has Empty CurveSegment!\n";
2921 }
2922
2923 CIccCurveSegmentList::iterator i;
2924
2925 for (i=m_list->begin(); i!=m_list->end(); i++) {
2926 rv = icMaxStatus(rv, (*i)->Validate(sigPath+icGetSigPath(GetType()), sReport, pMPE, pProfile));
2927 }
2928
2929 return rv;
2930}
icValidateStatus
Definition IccDefs.h:118
@ icValidateOK
Definition IccDefs.h:119
@ 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
const char * icMsgValidateCriticalError
Definition IccUtil.cpp:92
Type: Class.
Definition IccUtil.h:303
std::string GetSigPathName(std::string sigPath)
Definition IccUtil.cpp:1614

References CIccInfo::GetSigPathName(), icGetSigPath(), icMaxStatus(), icMsgValidateCriticalError, icMsgValidateWarning, icValidateCriticalError, icValidateOK, and icValidateWarning.

+ Here is the call graph for this function:

◆ Write()

bool CIccSegmentedCurve::Write ( CIccIO * pIO)
virtual

Name: CIccSegmentedCurve::Write.

Purpose:

Args:

Return:

Implements CIccCurveSetCurve.

Definition at line 2753 of file IccMpeBasic.cpp.

2754{
2756
2757 if (!pIO)
2758 return false;
2759
2760 if (!pIO->Write32(&sig))
2761 return false;
2762
2763 if (!pIO->Write32(&m_nReserved1))
2764 return false;
2765
2766 icUInt16Number nSegments = (icUInt16Number)m_list->size();
2767
2768 if (!pIO->Write16(&nSegments))
2769 return false;
2770
2771 if (!pIO->Write16(&m_nReserved2))
2772 return false;
2773
2774 CIccCurveSegmentList::iterator i;
2775 if (nSegments>1) {
2776 icFloatNumber breakpoint;
2777
2778 i=m_list->begin();
2779 for (i++; i!=m_list->end(); i++) {
2780 breakpoint = (*i)->StartPoint();
2781 if (!pIO->WriteFloat32Float(&breakpoint))
2782 return false;
2783 }
2784 }
2785 for (i=m_list->begin(); i!=m_list->end(); i++) {
2786 if (!(*i)->Write(pIO))
2787 return false;
2788 }
2789
2790 return true;
2791}
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 sig, CIccIO::Write16(), CIccIO::Write32(), and CIccIO::WriteFloat32Float().

+ Here is the call graph for this function:

Member Data Documentation

◆ m_list

CIccCurveSegmentList* CIccSegmentedCurve::m_list
protected

Definition at line 273 of file IccMpeBasic.h.

Referenced by CIccSegmentedCurve(), and operator=().

◆ m_nReserved1

icUInt32Number CIccSegmentedCurve::m_nReserved1
protected

Definition at line 274 of file IccMpeBasic.h.

Referenced by CIccSegmentedCurve(), and operator=().

◆ m_nReserved2

icUInt32Number CIccSegmentedCurve::m_nReserved2
protected

Definition at line 275 of file IccMpeBasic.h.

Referenced by CIccSegmentedCurve(), and operator=().


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