| /*- |
| * sRGB.h |
| * |
| * Last changed in libpng 1.6.0 [February 14, 2013] |
| * |
| * COPYRIGHT: Written by John Cunningham Bowler, 2013. |
| * To the extent possible under law, the author has waived all copyright and |
| * related or neighboring rights to this work. This work is published from: |
| * United States. |
| * |
| * Utility file; not actually a header, this contains definitions of sRGB |
| * calculation functions for inclusion in those test programs that need them. |
| * |
| * All routines take and return a floating point value in the range |
| * 0 to 1.0, doing a calculation according to the sRGB specification |
| * (in fact the source of the numbers is the wikipedia article at |
| * http://en.wikipedia.org/wiki/SRGB). |
| */ |
| static double |
| sRGB_from_linear(double l) |
| { |
| if (l <= 0.0031308) |
| l *= 12.92; |
| |
| else |
| l = 1.055 * pow(l, 1/2.4) - 0.055; |
| |
| return l; |
| } |
| |
| static double |
| linear_from_sRGB(double s) |
| { |
| if (s <= 0.04045) |
| return s / 12.92; |
| |
| else |
| return pow((s+0.055)/1.055, 2.4); |
| } |
| |
| static double |
| YfromRGB(double r, double g, double b) |
| { |
| /* Use the sRGB (rounded) coefficients for Rlinear, Glinear, Blinear to get |
| * the CIE Y value (also linear). |
| */ |
| return 0.2126 * r + 0.7152 * g + 0.0722 * b; |
| } |