< prev index next >

src/java.desktop/share/native/liblcms/cmsgamma.c

Print this page




 579       Val = pow(1.0 - pow(1 - R, 1/Params[0]), 1/Params[0]);
 580       break;
 581 
 582     // y = (1 - (1-x)^1/g)^1/g
 583     // y^g = (1 - (1-x)^1/g)
 584     // 1 - y^g = (1-x)^1/g
 585     // (1 - y^g)^g = 1 - x
 586     // 1 - (1 - y^g)^g
 587     case -108:
 588         Val = 1 - pow(1 - pow(R, Params[0]), Params[0]);
 589         break;
 590 
 591     default:
 592         // Unsupported parametric curve. Should never reach here
 593         return 0;
 594     }
 595 
 596     return Val;
 597 }
 598 
 599 // Evaluate a segmented funtion for a single value. Return -1 if no valid segment found .
 600 // If fn type is 0, perform an interpolation on the table
 601 static
 602 cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R)
 603 {
 604     int i;
 605 
 606     for (i = g ->nSegments-1; i >= 0 ; --i) {
 607 
 608         // Check for domain
 609         if ((R > g ->Segments[i].x0) && (R <= g ->Segments[i].x1)) {
 610 
 611             // Type == 0 means segment is sampled
 612             if (g ->Segments[i].Type == 0) {
 613 
 614                 cmsFloat32Number R1 = (cmsFloat32Number) (R - g ->Segments[i].x0) / (g ->Segments[i].x1 - g ->Segments[i].x0);
 615                 cmsFloat32Number Out;
 616 
 617                 // Setup the table (TODO: clean that)
 618                 g ->SegInterp[i]-> Table = g ->Segments[i].SampledPoints;
 619 




 579       Val = pow(1.0 - pow(1 - R, 1/Params[0]), 1/Params[0]);
 580       break;
 581 
 582     // y = (1 - (1-x)^1/g)^1/g
 583     // y^g = (1 - (1-x)^1/g)
 584     // 1 - y^g = (1-x)^1/g
 585     // (1 - y^g)^g = 1 - x
 586     // 1 - (1 - y^g)^g
 587     case -108:
 588         Val = 1 - pow(1 - pow(R, Params[0]), Params[0]);
 589         break;
 590 
 591     default:
 592         // Unsupported parametric curve. Should never reach here
 593         return 0;
 594     }
 595 
 596     return Val;
 597 }
 598 
 599 // Evaluate a segmented function for a single value. Return -1 if no valid segment found .
 600 // If fn type is 0, perform an interpolation on the table
 601 static
 602 cmsFloat64Number EvalSegmentedFn(const cmsToneCurve *g, cmsFloat64Number R)
 603 {
 604     int i;
 605 
 606     for (i = g ->nSegments-1; i >= 0 ; --i) {
 607 
 608         // Check for domain
 609         if ((R > g ->Segments[i].x0) && (R <= g ->Segments[i].x1)) {
 610 
 611             // Type == 0 means segment is sampled
 612             if (g ->Segments[i].Type == 0) {
 613 
 614                 cmsFloat32Number R1 = (cmsFloat32Number) (R - g ->Segments[i].x0) / (g ->Segments[i].x1 - g ->Segments[i].x0);
 615                 cmsFloat32Number Out;
 616 
 617                 // Setup the table (TODO: clean that)
 618                 g ->SegInterp[i]-> Table = g ->Segments[i].SampledPoints;
 619 


< prev index next >