Chris Craik | ca2bf81 | 2013-07-29 15:28:30 -0700 | [diff] [blame] | 1 | /*- |
| 2 | * sRGB.h |
| 3 | * |
| 4 | * Last changed in libpng 1.6.0 [February 14, 2013] |
| 5 | * |
| 6 | * COPYRIGHT: Written by John Cunningham Bowler, 2013. |
| 7 | * To the extent possible under law, the author has waived all copyright and |
| 8 | * related or neighboring rights to this work. This work is published from: |
| 9 | * United States. |
| 10 | * |
| 11 | * Utility file; not actually a header, this contains definitions of sRGB |
| 12 | * calculation functions for inclusion in those test programs that need them. |
| 13 | * |
| 14 | * All routines take and return a floating point value in the range |
| 15 | * 0 to 1.0, doing a calculation according to the sRGB specification |
| 16 | * (in fact the source of the numbers is the wikipedia article at |
Leon Scroggins III | 3cc83ac | 2017-10-06 11:02:56 -0400 | [diff] [blame] | 17 | * https://en.wikipedia.org/wiki/SRGB). |
Chris Craik | ca2bf81 | 2013-07-29 15:28:30 -0700 | [diff] [blame] | 18 | */ |
| 19 | static double |
| 20 | sRGB_from_linear(double l) |
| 21 | { |
| 22 | if (l <= 0.0031308) |
| 23 | l *= 12.92; |
| 24 | |
| 25 | else |
| 26 | l = 1.055 * pow(l, 1/2.4) - 0.055; |
| 27 | |
| 28 | return l; |
| 29 | } |
| 30 | |
| 31 | static double |
| 32 | linear_from_sRGB(double s) |
| 33 | { |
| 34 | if (s <= 0.04045) |
| 35 | return s / 12.92; |
| 36 | |
| 37 | else |
| 38 | return pow((s+0.055)/1.055, 2.4); |
| 39 | } |
| 40 | |
| 41 | static double |
| 42 | YfromRGB(double r, double g, double b) |
| 43 | { |
| 44 | /* Use the sRGB (rounded) coefficients for Rlinear, Glinear, Blinear to get |
| 45 | * the CIE Y value (also linear). |
| 46 | */ |
| 47 | return 0.2126 * r + 0.7152 * g + 0.0722 * b; |
| 48 | } |