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

Class: CIccTagFormulaCurveSegment. More...

#include <IccMpeBasic.h>

+ Inheritance diagram for CIccFormulaCurveSegment:
+ Collaboration diagram for CIccFormulaCurveSegment:

Public Member Functions

virtual icFloatNumber Apply (icFloatNumber v) const
 Name: CIccFormulaCurveSegment::Apply.
 
virtual bool Begin (CIccCurveSegment *pPrevSeg)
 Name: CIccFormulaCurveSegment::Begin.
 
 CIccFormulaCurveSegment (const CIccFormulaCurveSegment &seg)
 Name: CIccFormulaCurveSegment::CIccFormulaCurveSegment.
 
 CIccFormulaCurveSegment (icFloatNumber start, icFloatNumber end)
 Name: CIccFormulaCurveSegment::CIccFormulaCurveSegment.
 
virtual void Describe (std::string &sDescription, int nVerboseness)
 Name: CIccFormulaCurveSegment::Describe.
 
virtual const icCharGetClassName () const
 
virtual icCurveSegSignature GetType () const
 
virtual CIccCurveSegmentNewCopy () const
 
CIccFormulaCurveSegmentoperator= (const CIccFormulaCurveSegment &seg)
 Name: &CIccFormulaCurveSegment::operator=.
 
virtual bool Read (icUInt32Number size, CIccIO *pIO)
 Name: CIccFormulaCurveSegment::Read.
 
void SetFunction (icUInt16Number functionType, icUInt8Number num_parameters, icFloatNumber *parameters)
 Name: CIccFormulaCurveSegment::SetFunction.
 
virtual icValidateStatus Validate (std::string sigPath, std::string &sReport, const CIccTagMultiProcessElement *pMPE=NULL, const CIccProfile *pProfile=NULL) const
 Name: CIccFormulaCurveSegment::Validate.
 
virtual bool Write (CIccIO *pIO)
 Name: CIccFormulaCurveSegment::Write.
 
virtual ~CIccFormulaCurveSegment ()
 Name: CIccFormulaCurveSegment::~CIccFormulaCurveSegment.
 
- Public Member Functions inherited from CIccCurveSegment
icFloatNumber EndPoint ()
 
icFloatNumber StartPoint ()
 
virtual ~CIccCurveSegment ()
 

Protected Attributes

icUInt16Number m_nFunctionType
 
icUInt8Number m_nParameters
 
icUInt16Number m_nReserved2
 
icUInt16Number m_nShortcutType
 
icFloatNumberm_params
 
- Protected Attributes inherited from CIccCurveSegment
icFloatNumber m_endPoint
 
icUInt32Number m_nReserved
 
icFloatNumber m_startPoint
 

Additional Inherited Members

- Static Public Member Functions inherited from CIccCurveSegment
static CIccCurveSegmentCreate (icCurveSegSignature sig, icFloatNumber start, icFloatNumber end)
 Name: CIccCurveSegment::Create.
 

Detailed Description

Class: CIccTagFormulaCurveSegment.

Purpose: The parametric curve segment

Definition at line 132 of file IccMpeBasic.h.

Constructor & Destructor Documentation

◆ CIccFormulaCurveSegment() [1/2]

CIccFormulaCurveSegment::CIccFormulaCurveSegment ( icFloatNumber start,
icFloatNumber end )

Name: CIccFormulaCurveSegment::CIccFormulaCurveSegment.

Purpose:

Args:

Return:

Definition at line 100 of file IccMpeBasic.cpp.

101{
102 m_nReserved = 0;
103 m_nReserved2 = 0;
104 m_startPoint = start;
105 m_endPoint = end;
106
107 m_nFunctionType = 0;
108 m_nShortcutType = 0;
109 m_nParameters = 0;
110 m_params = NULL;
111}
icFloatNumber m_startPoint
icFloatNumber m_endPoint
icUInt32Number m_nReserved
icUInt8Number m_nParameters
icUInt16Number m_nFunctionType
icUInt16Number m_nReserved2
icUInt16Number m_nShortcutType
icFloatNumber * m_params

◆ CIccFormulaCurveSegment() [2/2]

CIccFormulaCurveSegment::CIccFormulaCurveSegment ( const CIccFormulaCurveSegment & seg)

Name: CIccFormulaCurveSegment::CIccFormulaCurveSegment.

Purpose:

Args:

Return:

Definition at line 123 of file IccMpeBasic.cpp.

124{
129
133
134 if (seg.m_params) {
136 if (m_params)
137 memcpy(m_params, seg.m_params, m_nParameters*sizeof(icFloatNumber));
138 }
139 else
140 m_params = NULL;
141}
float icFloatNumber
All floating point operations/variables in IccProfLib use the icFloatNumber data type.
Definition IccDefs.h:100

References CIccCurveSegment::m_endPoint, m_nFunctionType, m_nParameters, CIccCurveSegment::m_nReserved, m_nReserved2, m_nShortcutType, m_params, and CIccCurveSegment::m_startPoint.

◆ ~CIccFormulaCurveSegment()

CIccFormulaCurveSegment::~CIccFormulaCurveSegment ( )
virtual

Name: CIccFormulaCurveSegment::~CIccFormulaCurveSegment.

Purpose:

Args:

Return:

Definition at line 187 of file IccMpeBasic.cpp.

188{
189 if (m_params) {
190 free(m_params);
191 }
192}

Member Function Documentation

◆ Apply()

icFloatNumber CIccFormulaCurveSegment::Apply ( icFloatNumber v) const
virtual

Name: CIccFormulaCurveSegment::Apply.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 618 of file IccMpeBasic.cpp.

619{
620 switch (m_nFunctionType) {
621 case 0x0000:
622 //Y = (a * X + b) ^ g + c : g a b c
623 switch (m_nShortcutType) {
624 case 0:
625 default:
626 return (icFloatNumber)(pow(m_params[1] * v + m_params[2], m_params[0]) + m_params[3]);
627 case 1:
628 return (m_params[1] * v);
629 case 2:
630 return (m_params[1] * v + m_params[3]);
631 case 3:
632 return (m_params[1] * v + m_params[2]);
633 case 4:
634 return (m_params[1] * v + m_params[2] + m_params[3]);
635 }
636
637 case 0x0001:
638 // Y = a * log (b * X^g + c) + d : g a b c d
639 return (icFloatNumber)(m_params[1] * log10(m_params[2] * pow(v, m_params[0]) + m_params[3]) + m_params[4]);
640
641 case 0x0002:
642 //Y = a * b^(c*X+d) + e : a b c d e
643 return (icFloatNumber)(m_params[0] * pow(m_params[1], m_params[2] * v + m_params[3]) + m_params[4]);
644
645 case 0x0003:
646 //Y = a * (b * X + c) ^ g + d : g a b c d
647 return (icFloatNumber)(m_params[1] * clipPow(m_params[2] * v + m_params[3], m_params[0]) + m_params[4]);
648
649 case 0x0004:
650 //Y = a * ln(d * X^g - b) + c : g a b c d
651 if (m_nShortcutType != 1)
652 return (icFloatNumber)(m_params[1] * log(m_params[4] * pow(v, m_params[0]) - m_params[2]) + m_params[3]);
653 else
654 return (icFloatNumber)(m_params[1] * log(m_params[4] * v - m_params[2]) + m_params[3]);
655
656 case 0x0005:
657 //Y = e * exp((d * X^g - c) / a) + b : g a b c d e
658 if (m_nShortcutType != 1)
659 return (icFloatNumber)(m_params[5] * exp((m_params[4] * pow(v, m_params[0]) - m_params[3]) / m_params[1]) + m_params[2]);
660 else
661 return (icFloatNumber)(m_params[5] * exp((m_params[4] * v - m_params[3]) / m_params[1]) + m_params[2]);
662
663 case 0x0006:
664 //Y = d * (max(e * X^g - a, 0)/(b - c * X^g))^w : w g a b c d e
665 if (m_nShortcutType!=1) {
666 return (icFloatNumber)(m_params[5] * pow(icMax((icFloatNumber)(m_params[6] * pow(v, m_params[1]) - m_params[2]), 0.0f) /
667 (m_params[3] - m_params[4] * pow(v, m_params[1])), m_params[0]));
668 }
669 else { //m_nShortcutType == 1
670 return (icFloatNumber)(m_params[5] * pow(icMax((icFloatNumber)(m_params[6] * v - m_params[2]), 0.0f) /
671 (m_params[3] - m_params[4] * v), m_params[0]));
672 }
673
674 case 0x0007:
675 //Y = d * ((a + b * X^g)/(1 + c * X^g)) ^ w : w g a b c d
676 if (m_nShortcutType != 1) {
677 return (icFloatNumber)(m_params[5] * pow((m_params[2] + m_params[3] * pow(v, m_params[1])) /
678 (1.0 + m_params[4] * pow(v, m_params[1])), m_params[0]));
679 }
680 else { //m_nShortcutType == 1
681 return (icFloatNumber)(m_params[5] * pow((m_params[2] + m_params[3] * v) /
682 (1.0 + m_params[4] * v), m_params[0]));
683 }
684 }
685
686 //Shouldn't get here!
687 return v;
688}
static icFloatNumber clipPow(double v, double g)
icFloatNumber icMax(icFloatNumber v1, icFloatNumber v2)
Definition IccUtil.cpp:903

References clipPow(), and icMax().

+ Here is the call graph for this function:

◆ Begin()

bool CIccFormulaCurveSegment::Begin ( CIccCurveSegment * pPrevSeg = NULL)
virtual

Name: CIccFormulaCurveSegment::Begin.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 511 of file IccMpeBasic.cpp.

512{
513 switch (m_nFunctionType) {
514 case 0x0000:
515 if (!m_params || m_nParameters<4)
516 return false;
517
518 if (icIsNear(m_params[0], 1.0)) { //don't apply gamma
519 if (icIsNear(m_params[2], 0.0) && icIsNear(m_params[3], 0.0))
520 m_nShortcutType = 1;
521 else if (icIsNear(m_params[2], 0.0))
522 m_nShortcutType = 2;
523 else if (icIsNear(m_params[3], 0.0))
524 m_nShortcutType = 3;
525 else
526 m_nShortcutType = 4;
527 }
528 else {
529 m_nShortcutType = 0;
530 }
531
532 return true;
533
534 case 0x0001:
535 if (!m_params || m_nParameters<5)
536 return false;
537
538 return true;
539
540 case 0x0002:
541 case 0x0003:
542 if (!m_params || m_nParameters < 5)
543 return false;
544
545 case 0x0004:
546 if (!m_params || m_nParameters < 5)
547 return false;
548
549 if (icIsNear(m_params[0], 1.0)) { //don't apply gamma
550 m_nShortcutType = 1;
551 }
552 else {
553 m_nShortcutType = 0;
554 }
555 return true;
556
557 case 0x0005:
558 if (!m_params || m_nParameters < 6)
559 return false;
560
561 if (icIsNear(m_params[0], 1.0)) { //don't apply gamma
562 m_nShortcutType = 1;
563 }
564 else {
565 m_nShortcutType = 0;
566 }
567 return true;
568
569 case 0x0006:
570 if (!m_params || m_nParameters < 7)
571 return false;
572
573 if (icIsNear(m_params[1], 1.0)) { //don't apply gamma
574 m_nShortcutType = 1;
575 }
576 else {
577 m_nShortcutType = 0;
578 }
579 return true;
580
581 case 0x0007:
582 if (!m_params || m_nParameters < 6)
583 return false;
584
585 if (icIsNear(m_params[1], 1.0)) { //don't apply gamma
586 m_nShortcutType = 1;
587 }
588 else {
589 m_nShortcutType = 0;
590 }
591 return true;
592
593
594 default:
595 return false;
596 }
597
598 return true;
599}
bool icIsNear(icFloatNumber v1, icFloatNumber v2, icFloatNumber nearRange)
Name: icIsNear.
Definition IccUtil.cpp:142

References icIsNear().

+ Here is the call graph for this function:

◆ Describe()

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

Name: CIccFormulaCurveSegment::Describe.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 204 of file IccMpeBasic.cpp.

205{
206 icChar buf[256];
207
208 sDescription += "Segment [";
210 sDescription += "-Infinity, ";
211 else {
212 sprintf(buf, "%.8f, ", m_startPoint);
213 sDescription += buf;
214 }
216 sDescription += "+Infinity";
217 else {
218 sprintf(buf, "%.8f", m_endPoint);
219 sDescription += buf;
220 }
221 sprintf(buf, "]\nFunctionType: %04Xh\n", m_nFunctionType);
222 sDescription += buf;
223
224 switch(m_nFunctionType) {
225 case 0x0000:
226 if (icIsNear(m_params[1], 0.0) && icIsNear(m_params[2], 0.0))
227 sprintf(buf, "Y = %.8f\n\n", m_params[3]);
228 else if (icIsNear(m_params[0], 1.0) && icIsNear(m_params[1], 1.0) &&
229 icIsNear(m_params[2], 0.0) && icIsNear(m_params[3], 0.0))
230 sprintf(buf, "Y = X\n\n");
231 else if (icIsNear(m_params[0], 1.0) && icIsNear(m_params[2], 0.0))
232 sprintf(buf, "Y = %.8f * X + %.8f\n\n",
233 m_params[1], m_params[3]);
234 else
235 sprintf(buf, "Y = (%.8f * X + %.8f)^%.4f + %.8f\n\n",
236 m_params[1], m_params[2], m_params[0], m_params[3]);
237 sDescription += buf;
238 return;
239
240 case 0x0001:
241 sprintf(buf, "Y = %.8f * log (%.8f * (X ^ %.8f) + %.8f) + %.8f\n\n",
242 m_params[1], m_params[2], m_params[0], m_params[3], m_params[4]);
243 sDescription += buf;
244 return;
245
246 case 0x0002:
247 sprintf(buf, "Y = %.8f * (%.8f ^ (%.8f * X + %.8f)) + %.8f\n\n",
248 m_params[0], m_params[1], m_params[2], m_params[3], m_params[4]);
249 sDescription += buf;
250 return;
251
252 case 0x0003:
253 if (icIsNear(m_params[1],0.0) && icIsNear(m_params[2], 0.0))
254 sprintf(buf, "Y = %.8f\n\n", m_params[3]);
255 else if (icIsNear(m_params[0], 1.0) && icIsNear(m_params[1], 1.0) &&
256 icIsNear(m_params[2], 1.0) && icIsNear(m_params[3], 0.0) &&
257 icIsNear(m_params[4], 0.0))
258 sprintf(buf, "Y = X\n\n");
259 else if (icIsNear(m_params[0], 1.0) && icIsNear(m_params[1], 1.0) &&
260 icIsNear(m_params[3], 0.0))
261 sprintf(buf, "Y = %.8f * X + %.8f\n\n",
262 m_params[2], m_params[3]);
263 else if (icIsNear(m_params[0], 1.0) && icIsNear(m_params[2], 1.0) &&
264 icIsNear(m_params[3], 0.0))
265 sprintf(buf, "Y = %.8f * X + %.8f\n\n",
266 m_params[1], m_params[3]);
267 else
268 sprintf(buf, "Y = %8f * (%.8f * X + %.8f)^%.4f + %.8f\n\n",
269 m_params[1], m_params[2], m_params[3], m_params[0], m_params[4]);
270 sDescription += buf;
271 return;
272
273 case 0x0004:
274 if (!icIsNear(m_params[0], 1.0))
275 sprintf(buf, "Y = %.8f * ln(%.8f * X^%8.f - %.8f) + %.8f\n\n",
276 m_params[1], m_params[4], m_params[0], m_params[2], m_params[3]);
277 else
278 sprintf(buf, "Y = %.8f * ln(%.8f * X - %.8f) + %.8f\n\n",
279 m_params[1], m_params[4], m_params[2], m_params[3]);
280
281 sDescription += buf;
282 return;
283
284 case 0x0005:
285 if (!icIsNear(m_params[0], 1.0))
286 sprintf(buf, "Y = %.8f * exp((%.8f * X^%.8f - %.8f) / %.8f) + %.8f\n\n",
287 m_params[5], m_params[4], m_params[0], m_params[3], m_params[1], m_params[2]);
288 else
289 sprintf(buf, "Y = %.8f * exp((%.8f * X - %.8f) / %.8f) + %.8f\n\n",
290 m_params[5], m_params[4], m_params[3], m_params[1], m_params[2]);
291
292 sDescription += buf;
293 return;
294
295 case 0x0006:
296 if (!icIsNear(m_params[1], 1.0))
297 sprintf(buf, "Y = %.8f * (max[(%.8f * X^%.8f - %.8f), 0] / (%.8f - %.8f * X^%.8f))^%.8f\n\n",
298 m_params[5], m_params[6], m_params[1], m_params[2], m_params[3], m_params[4], m_params[1], m_params[0]);
299 else
300 sprintf(buf, "Y = %.8f * (max[(%.8f * X - %.8f), 0] / (%.8f - %.8f * X))^%.8f\n\n",
301 m_params[5], m_params[6], m_params[2], m_params[3], m_params[4], m_params[0]);
302 sDescription += buf;
303 return;
304
305 case 0x0007:
306 if (!icIsNear(m_params[1], 1.0))
307 sprintf(buf, "Y = %.8f * ((%.8f + %.8f * X^%.8f) / (1 + %.8f * X^%.8f))^%.8f\n\n",
308 m_params[5], m_params[2], m_params[3], m_params[1], m_params[4], m_params[1], m_params[0]);
309 else
310 sprintf(buf, "Y = %.8f * ((%.8f + %.8f * X) / (1 + %.8f * X))^%.8f\n\n",
311 m_params[5], m_params[2], m_params[3], m_params[4], m_params[0]);
312 sDescription += buf;
313 return;
314
315 default:
316 int i;
317 sprintf(buf, "Unknown Function with %d parameters:\n\n", m_nParameters);
318 sDescription += buf;
319
320 for (i=0; i<m_nParameters; i++) {
321 sprintf(buf, "Param[%d] = %.8lf\n\n", i, m_params[i]);
322 sDescription += buf;
323 }
324 }
325}
char icChar
Definition IccDefs.h:109
#define icMinFloat32Number
#define icMaxFloat32Number
Useful macros for defining Curve Segment breakpoints.

References icIsNear(), icMaxFloat32Number, and icMinFloat32Number.

+ Here is the call graph for this function:

◆ GetClassName()

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

Implements CIccCurveSegment.

Definition at line 142 of file IccMpeBasic.h.

142{ return "CIccFormulaCurveSegment"; }

◆ GetType()

virtual icCurveSegSignature CIccFormulaCurveSegment::GetType ( ) const
inlinevirtual

Implements CIccCurveSegment.

Definition at line 141 of file IccMpeBasic.h.

141{ return icSigFormulaCurveSeg; }
@ icSigFormulaCurveSeg

References icSigFormulaCurveSeg.

◆ NewCopy()

virtual CIccCurveSegment * CIccFormulaCurveSegment::NewCopy ( ) const
inlinevirtual

Implements CIccCurveSegment.

Definition at line 138 of file IccMpeBasic.h.

138{ return new CIccFormulaCurveSegment(*this);}
CIccFormulaCurveSegment(icFloatNumber start, icFloatNumber end)
Name: CIccFormulaCurveSegment::CIccFormulaCurveSegment.

◆ operator=()

CIccFormulaCurveSegment & CIccFormulaCurveSegment::operator= ( const CIccFormulaCurveSegment & seg)

Name: &CIccFormulaCurveSegment::operator=.

Purpose:

Args:

Return:

Definition at line 153 of file IccMpeBasic.cpp.

154{
155 if (m_params)
156 free(m_params);
157
162
166 if (seg.m_params) {
168 if (m_params)
169 memcpy(m_params, seg.m_params, m_nParameters*sizeof(icFloatNumber));
170 }
171 else
172 m_params = NULL;
173
174 return (*this);
175}

References CIccCurveSegment::m_endPoint, m_nFunctionType, m_nParameters, CIccCurveSegment::m_nReserved, m_nReserved2, m_nShortcutType, m_params, and CIccCurveSegment::m_startPoint.

◆ Read()

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

Name: CIccFormulaCurveSegment::Read.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 365 of file IccMpeBasic.cpp.

366{
368
369 icUInt32Number headerSize = sizeof(icTagTypeSignature) +
370 sizeof(icUInt32Number) +
371 sizeof(icUInt16Number) +
372 sizeof(icUInt16Number);
373
374 if (headerSize > size)
375 return false;
376
377 if (!pIO) {
378 return false;
379 }
380
381 if (!pIO->Read32(&sig))
382 return false;
383
384 if (!pIO->Read32(&m_nReserved))
385 return false;
386
387 if (!pIO->Read16(&m_nFunctionType))
388 return false;
389
390 if (!pIO->Read16(&m_nReserved2))
391 return false;
392
393 if (m_params) {
394 free(m_params);
395 }
396
397 switch(m_nFunctionType) {
398 case 0x0000:
399 m_nParameters = 4;
400 break;
401
402 case 0x0001:
403 case 0x0002:
404 case 0x0003:
405 case 0x0004:
406 m_nParameters = 5;
407 break;
408
409 case 0x0005:
410 case 0x0007:
411 m_nParameters = 6;
412 break;
413
414 case 0x0006:
415 m_nParameters = 7;
416 break;
417
418 default:
419 return false;
420 }
421
422 if (m_nParameters) {
423
425 if (!m_params)
426 return false;
427
429 return false;
430 }
431 }
432 else
433 m_params = NULL;
434
435 return true;
436}
icArraySignature sig
icTagTypeSignature
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
unsigned short icUInt16Number
icCurveSegSignature
MPE Curve segment Signatures.

References CIccIO::Read16(), CIccIO::Read32(), CIccIO::ReadFloat32Float(), and sig.

+ Here is the call graph for this function:

◆ SetFunction()

void CIccFormulaCurveSegment::SetFunction ( icUInt16Number functionType,
icUInt8Number num_parameters,
icFloatNumber * parameters )

Name: CIccFormulaCurveSegment::SetFunction.

Purpose:

Args:

Return:

Definition at line 338 of file IccMpeBasic.cpp.

339{
340 if (m_params)
341 free(m_params);
342
343 if (num_parameters) {
344 m_params = (icFloatNumber*)malloc(num_parameters * sizeof(icFloatNumber));
345 if (m_params)
346 memcpy(m_params, parameters, num_parameters * sizeof(icFloatNumber));
347 }
348 else
349 m_params = NULL;
350
351 m_nFunctionType = functionType;
352 m_nParameters = num_parameters;
353}

◆ Validate()

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

Name: CIccFormulaCurveSegment::Validate.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 700 of file IccMpeBasic.cpp.

701{
702 CIccInfo Info;
703 std::string sSigPathName = Info.GetSigPathName(sigPath);
704
706 if (m_nReserved || m_nReserved2) {
707 sReport += icMsgValidateWarning;
708 sReport += sSigPathName;
709 sReport += " formula curve has non zero reserved data.\n";
711 }
712
713 switch (m_nFunctionType) {
714 case 0x0000:
715 if (!m_params || m_nParameters<4) {
717 sReport += sSigPathName;
718 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
720 }
721 else if (m_nParameters > 4) {
722 sReport += icMsgValidateWarning;
723 sReport += sSigPathName;
724 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
726 }
727 break;
728
729 case 0x0001:
730 if (!m_params || m_nParameters<5) {
732 sReport += sSigPathName;
733 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
735 }
736 else if (m_nParameters > 5) {
737 sReport += icMsgValidateWarning;
738 sReport += sSigPathName;
739 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
741 }
742 break;
743
744 case 0x0002:
745 if (!m_params || m_nParameters<5) {
747 sReport += sSigPathName;
748 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
750 }
751 else if (m_nParameters > 5) {
752 sReport += icMsgValidateWarning;
753 sReport += sSigPathName;
754 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
756 }
757 break;
758
759 case 0x0003:
760 if (!m_params || m_nParameters<5) {
762 sReport += sSigPathName;
763 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
765 }
766 else if (m_nParameters > 5) {
767 sReport += icMsgValidateWarning;
768 sReport += sSigPathName;
769 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
771 }
772 break;
773
774 case 0x0004:
775 if (!m_params || m_nParameters < 5) {
777 sReport += sSigPathName;
778 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
780 }
781 else if (m_nParameters > 5) {
782 sReport += icMsgValidateWarning;
783 sReport += sSigPathName;
784 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
786 }
787 break;
788
789 case 0x0005:
790 if (!m_params || m_nParameters < 6) {
792 sReport += sSigPathName;
793 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
795 }
796 else if (m_nParameters > 6) {
797 sReport += icMsgValidateWarning;
798 sReport += sSigPathName;
799 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
801 }
802 break;
803
804 case 0x0006:
805 if (!m_params || m_nParameters < 6) {
807 sReport += sSigPathName;
808 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
810 }
811 else if (m_nParameters > 6) {
812 sReport += icMsgValidateWarning;
813 sReport += sSigPathName;
814 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
816 }
817 break;
818
819 case 0x0007:
820 if (!m_params || m_nParameters < 6) {
822 sReport += sSigPathName;
823 sReport += " formula curve has Invalid formulaCurveSegment parameters.\n";
825 }
826 else if (m_nParameters > 6) {
827 sReport += icMsgValidateWarning;
828 sReport += sSigPathName;
829 sReport += " formula curve has too many formulaCurveSegment parameters.\n";
831 }
832 break;
833
834 default:
835 {
836 icChar buf[128];
838 sReport += sSigPathName;
839 sprintf(buf, " formula curve uses unknown formulaCurveSegment function type %d\n", m_nFunctionType);
840 sReport += buf;
842 }
843 }
844
845 return rv;
846}
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
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(), icMaxStatus(), icMsgValidateCriticalError, icMsgValidateWarning, icValidateCriticalError, icValidateOK, and icValidateWarning.

+ Here is the call graph for this function:

◆ Write()

bool CIccFormulaCurveSegment::Write ( CIccIO * pIO)
virtual

Name: CIccFormulaCurveSegment::Write.

Purpose:

Args:

Return:

Implements CIccCurveSegment.

Definition at line 448 of file IccMpeBasic.cpp.

449{
451
452 if (!pIO)
453 return false;
454
455 if (!pIO->Write32(&sig))
456 return false;
457
458 if (!pIO->Write32(&m_nReserved))
459 return false;
460
461 if (!pIO->Write16(&m_nFunctionType))
462 return false;
463
464 if (!pIO->Write16(&m_nReserved2))
465 return false;
466
467 switch(m_nFunctionType) {
468 case 0x0000:
469 if (m_nParameters!=4)
470 return false;
471 break;
472
473 case 0x0001:
474 case 0x0002:
475 case 0x0003:
476 case 0x0004:
477 if (m_nParameters!=5)
478 return false;
479 break;
480
481 case 0x0005:
482 case 0x0007:
483 if (m_nParameters != 6)
484 return false;
485 break;
486
487 case 0x0006:
488 if (m_nParameters != 7)
489 return false;
490 break;
491 }
492
493 if (m_nParameters) {
495 return false;
496 }
497
498 return true;
499}
virtual icCurveSegSignature GetType() const
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_nFunctionType

icUInt16Number CIccFormulaCurveSegment::m_nFunctionType
protected

Definition at line 158 of file IccMpeBasic.h.

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

◆ m_nParameters

icUInt8Number CIccFormulaCurveSegment::m_nParameters
protected

Definition at line 157 of file IccMpeBasic.h.

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

◆ m_nReserved2

icUInt16Number CIccFormulaCurveSegment::m_nReserved2
protected

Definition at line 156 of file IccMpeBasic.h.

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

◆ m_nShortcutType

icUInt16Number CIccFormulaCurveSegment::m_nShortcutType
protected

Definition at line 159 of file IccMpeBasic.h.

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

◆ m_params

icFloatNumber* CIccFormulaCurveSegment::m_params
protected

Definition at line 160 of file IccMpeBasic.h.

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


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