From 2cfebdbe06338db3fd0d0810896c055e8ae54422 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Thu, 20 Feb 2014 08:11:48 +0100 Subject: info: curve manipulators MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Mattias Andrée --- info/blueshift.texinfo | 174 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 173 insertions(+), 1 deletion(-) (limited to 'info') diff --git a/info/blueshift.texinfo b/info/blueshift.texinfo index d77c535..2383411 100644 --- a/info/blueshift.texinfo +++ b/info/blueshift.texinfo @@ -52,6 +52,7 @@ Texts. A copy of the license is included in the section entitled @menu * Overview:: Brief overview of @command{blueshift}. * Invoking:: Invocation of @command{blueshift}. +* Configuration API:: How to write configuration files. * GNU Free Documentation License:: Copying and sharing this manual. @end menu @@ -200,7 +201,7 @@ look better. @item -t @itemx --temperature TEMP Changes the colour tempurature to @var{TEMP} -kelvin. The standard colour tempurature is +Kelvin. The standard colour tempurature is 6500 K@footnote{Or actually 6504 K using revised constants in Plank's law}. If not specified, the colour temperature will be 3700 K during @@ -243,6 +244,177 @@ in relation to each other. +@node Configuration API +@chapter Configuration API + +Blueshift has three colour curves: + +@table @code +@item r_curve +The curve for the red colour component. +@item g_curve +The curve for the green colour component. +@item b_curve +The curve for the blue colour component. +@end table + +These are @code{i_size} sized floating point +lists, where 0 is the darkest colour and 1 +is the brightest colour. Values outside this +range are clipped unless @code{clip_result} +is set to @code{False}. By calling @code{clip} +(has no parameters) this clipping is done +independently of the value of @code{clip_result}. +When applied these values are automatically +translated to appropriate integer values: +[0, @code{o_size} - 1]. + +Blueshift provides a set of functions to +manipulate these curves: + +@table @code +@item rgb_contrast(rgb) +Adjusts the contrast to @code{rgb}. + +@item rgb_contrast(r, g, b) +Adjusts the contrast to @code{r}, @code{g} +and @code{b} on the red, green and blue curves, +respectively. + +@item cie_contrast(y) +Adjusts the contrast to @code{y}. +The function calculate the values by using +the CIE xyY colour space instead of the sRGB +colour space. + +@item rgb_brightness(rgb) +Adjusts the brightness to @code{rgb}. + +@item rgb_brightness(r, g, b) +Adjusts the brightness to @code{r}, @code{g} +and @code{b} on the red, green and blue curves, +respectively. + +@item cie_brightness(y) +Adjusts the brightness to @code{y}. +The function calculate the values by using +the CIE xyY colour space instead of the sRGB +colour space. + +@item linearise() +Converts the colour curves from sRGB to +linear RGB. sRGB is the default colour space. + +@item standardise() +Converts the colour curves from linear RGB to +sRGB, the default colour space. + +@item gamma(rgb) +Adjusts the gamma to @code{rgb}. + +@item gamma(r, g, b) +Adjusts the gamma to @code{r}, @code{g} +and @code{b} on the red, green and blue curves, +respectively. + +@item negative(rgb) +Inverts the all values on the colour curves +if @code{rgb} is @code{True}. + +@item negative(r, g, b) +Inverts the all values on the red, green and +blue curves if @code{r}, @code{g} and @code{b} +are @code{True}, respectively. + +@item sigmoid(r, g, b) +An inverted sigmoid curve function is applied +to the values of in red, green and blue curves +if @code{r}, @code{g} and @code{b} are not +@code{None}, respectively. @code{r}, @code{g} +and @code{b} are the curve sigmoid curve +multipliers for the red, green and blue curves, +respectively. + +@item manipulate(rgb) +Applies the function @code{rgb} : float +@click{} float to colour curves. + +@item manipulate(r, g, b) +Applies the functions @code{r}, @code{g} and +@code{b} : float @click{} float to red, green +and blue colour curves, respectively. + +@item temperature(temperature, algorithm) +Applies the a blackbody colour temperature of +@code{temperature}@footnote{Actually multiplied +by 1.000556328, due to revisions of natural +constants} Kelvin. Where the white point +for that temperature is calculates by +the function @code{algorithm} : @code{temperature} +@click{} (red, green, blue). When the white +point has been calculates, its components +are used as parameters in a componentwise +brightness adjustment. + +There are a few algorithm for calculating the +white point included: +@table @code +@item series_d(temperature) +Can only calculate the white point correctly for +temperatures inside [4000, 7000]. The CIE illuminant +series D is used to calculate the white point. + +@item simple_whitepoint(temperature) +Can only calculate the white point accurately for +temperatures inside [1000, 40000]. A mathematical +model of the @code{cmf_10deg} function is used. + +@item cmf_2deg(temperature) +Uses a lookup table with linear interpolation to +calculate temperatures inside [1000, 40000]. +CIE 1931 2 degree CMF is used. + +@item cmf_10deg(temperature) +Uses a lookup table with linear interpolation to +calculate temperatures inside [1000, 40000]. +CIE 1964 10 degree CMF is used. This is the +preferred algorithm. + +@item redshift(temperature, old_version, linear_interpolation = False) +Uses the lookup table from Redshift with linear +interpolation. If @code{old_version} is @code{True} +the table Redshift<=1.8 is used, which is limited +to [1000, 10000], and is not that accurate. Otherwise +(the default) the table from Redshift>1.8 is used, +which is limited to [1000, 25100], and is accurate. + +If @code{linear_interpolation} is @code{False} +(the default) the sRGB colour space is used for +interpolation, otherwise linear RGB is used. +@end table + +Some of these algorithms (including @code{cmf_10deg}) +are not very good by themself and should be wrapped +with @code{divide_by_maximum} or @code{clip_whitepoint} +((red, green, blue) @click{} (red, green, blue) functions.) +For example, instead of using @code{cmf_10deg}, you +can use @code{lambda t : divide_by_maximum(cmf_10deg(t))}. +@end table + +Keep in mind that the order your call the +function matters. For example, adjusting +the gamma before the brightness does not +yeild the same result as in the reverse +order, the latter is the correct way to +apply gamma correction. + +If you want to write your own functions +@code{curves(r, g, b)} returns a tuple +containing the tuples @code{(r_curve, r)}, +@code{(g_curve, g)} and @code{(b_curve, b)}. + + + @node GNU Free Documentation License @appendix GNU Free Documentation License @include fdl.texinfo -- cgit v1.2.3-70-g09d2