ruby-iup 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +97 -0
- data/doc/README +10 -0
- data/doc/build_install.txt +77 -0
- data/examples/README +16 -0
- data/examples/ctrl/cbox.rb +221 -0
- data/examples/ctrl/checkboard.rb +33 -0
- data/examples/ctrl/degrade.rb +73 -0
- data/examples/ctrl/example1.rb +53 -0
- data/examples/ctrl/example2.rb +39 -0
- data/examples/ctrl/iupcolorbar.rb +95 -0
- data/examples/ctrl/iupcolorbrowser.rb +45 -0
- data/examples/ctrl/iupdial.rb +117 -0
- data/examples/ctrl/iupgauge.rb +242 -0
- data/examples/ctrl/iupgetcolor.rb +8 -0
- data/examples/ctrl/iupgetparam.rb +62 -0
- data/examples/ctrl/iupglcanvas.rb +172 -0
- data/examples/ctrl/iupmask.rb +15 -0
- data/examples/ctrl/iupmatrix.rb +39 -0
- data/examples/ctrl/iupplot2.rb +603 -0
- data/examples/ctrl/iuptabs.rb +22 -0
- data/examples/ctrl/iuptree.rb +190 -0
- data/examples/ctrl/iupval.rb +71 -0
- data/examples/ctrl/numbering.rb +46 -0
- data/examples/ctrl/sample.rb +166 -0
- data/examples/dlg/iupalarm.rb +14 -0
- data/examples/dlg/iupfiledlg.rb +19 -0
- data/examples/dlg/iupgetfile.rb +19 -0
- data/examples/dlg/iuplistdialog.rb +26 -0
- data/examples/dlg/iupmessage.rb +5 -0
- data/examples/dlg/iupscanf.rb +17 -0
- data/examples/elem/iupbutton.rb +197 -0
- data/examples/elem/iupcanvas.rb +27 -0
- data/examples/elem/iupcanvas2.rb +113 -0
- data/examples/elem/iupcanvas3.rb +62 -0
- data/examples/elem/iupdialog.rb +71 -0
- data/examples/elem/iupdialog2.rb +25 -0
- data/examples/elem/iupfill.rb +51 -0
- data/examples/elem/iupframe.rb +25 -0
- data/examples/elem/iuphbox.rb +68 -0
- data/examples/elem/iupimage.rb +113 -0
- data/examples/elem/iupitem.rb +60 -0
- data/examples/elem/iuplabel.rb +57 -0
- data/examples/elem/iuplist.rb +41 -0
- data/examples/elem/iuplist2.rb +125 -0
- data/examples/elem/iupmenu.rb +32 -0
- data/examples/elem/iupmultiline.rb +24 -0
- data/examples/elem/iupmultiline2.rb +156 -0
- data/examples/elem/iupradio.rb +32 -0
- data/examples/elem/iupseparator.rb +81 -0
- data/examples/elem/iupsubmenu.rb +85 -0
- data/examples/elem/iuptext.rb +61 -0
- data/examples/elem/iuptimer.rb +36 -0
- data/examples/elem/iuptoggle.rb +110 -0
- data/examples/elem/iupvbox.rb +87 -0
- data/examples/elem/iupzbox.rb +60 -0
- data/examples/elem/mdisample.rb +376 -0
- data/examples/elem/progressbar.rb +294 -0
- data/examples/elem/scrollbar.rb +66 -0
- data/examples/elem/tray.rb +90 -0
- data/examples/func/iupgetattribute.rb +32 -0
- data/examples/func/iupidle.rb +48 -0
- data/ext/extconf.rb +27 -0
- data/ext/iup-linux/include/cd.h +494 -0
- data/ext/iup-linux/include/cd_canvas.hpp +358 -0
- data/ext/iup-linux/include/cd_old.h +158 -0
- data/ext/iup-linux/include/cd_private.h +362 -0
- data/ext/iup-linux/include/cdcgm.h +34 -0
- data/ext/iup-linux/include/cdclipbd.h +22 -0
- data/ext/iup-linux/include/cddbuf.h +23 -0
- data/ext/iup-linux/include/cddebug.h +24 -0
- data/ext/iup-linux/include/cddgn.h +23 -0
- data/ext/iup-linux/include/cddxf.h +22 -0
- data/ext/iup-linux/include/cdemf.h +22 -0
- data/ext/iup-linux/include/cdgdiplus.h +29 -0
- data/ext/iup-linux/include/cdimage.h +23 -0
- data/ext/iup-linux/include/cdirgb.h +30 -0
- data/ext/iup-linux/include/cdiup.h +22 -0
- data/ext/iup-linux/include/cdlua.h +39 -0
- data/ext/iup-linux/include/cdlua3_private.h +120 -0
- data/ext/iup-linux/include/cdlua5_private.h +141 -0
- data/ext/iup-linux/include/cdluaim.h +24 -0
- data/ext/iup-linux/include/cdluaiup.h +27 -0
- data/ext/iup-linux/include/cdluapdf.h +27 -0
- data/ext/iup-linux/include/cdmf.h +24 -0
- data/ext/iup-linux/include/cdmf_private.h +32 -0
- data/ext/iup-linux/include/cdnative.h +26 -0
- data/ext/iup-linux/include/cdpdf.h +38 -0
- data/ext/iup-linux/include/cdpicture.h +22 -0
- data/ext/iup-linux/include/cdprint.h +23 -0
- data/ext/iup-linux/include/cdps.h +37 -0
- data/ext/iup-linux/include/cdwmf.h +22 -0
- data/ext/iup-linux/include/im.h +282 -0
- data/ext/iup-linux/include/im_attrib.h +116 -0
- data/ext/iup-linux/include/im_attrib_flat.h +39 -0
- data/ext/iup-linux/include/im_binfile.h +214 -0
- data/ext/iup-linux/include/im_capture.h +365 -0
- data/ext/iup-linux/include/im_color.h +465 -0
- data/ext/iup-linux/include/im_colorhsi.h +61 -0
- data/ext/iup-linux/include/im_complex.h +160 -0
- data/ext/iup-linux/include/im_convert.h +127 -0
- data/ext/iup-linux/include/im_counter.h +69 -0
- data/ext/iup-linux/include/im_dib.h +195 -0
- data/ext/iup-linux/include/im_file.h +111 -0
- data/ext/iup-linux/include/im_format.h +79 -0
- data/ext/iup-linux/include/im_format_all.h +576 -0
- data/ext/iup-linux/include/im_format_avi.h +87 -0
- data/ext/iup-linux/include/im_format_ecw.h +93 -0
- data/ext/iup-linux/include/im_format_jp2.h +78 -0
- data/ext/iup-linux/include/im_format_raw.h +64 -0
- data/ext/iup-linux/include/im_format_wmv.h +100 -0
- data/ext/iup-linux/include/im_image.h +403 -0
- data/ext/iup-linux/include/im_kernel.h +315 -0
- data/ext/iup-linux/include/im_lib.h +191 -0
- data/ext/iup-linux/include/im_math.h +368 -0
- data/ext/iup-linux/include/im_math_op.h +219 -0
- data/ext/iup-linux/include/im_palette.h +172 -0
- data/ext/iup-linux/include/im_plus.h +73 -0
- data/ext/iup-linux/include/im_process.h +35 -0
- data/ext/iup-linux/include/im_process_ana.h +221 -0
- data/ext/iup-linux/include/im_process_glo.h +170 -0
- data/ext/iup-linux/include/im_process_loc.h +577 -0
- data/ext/iup-linux/include/im_process_pon.h +712 -0
- data/ext/iup-linux/include/im_raw.h +34 -0
- data/ext/iup-linux/include/im_util.h +277 -0
- data/ext/iup-linux/include/imlua.h +83 -0
- data/ext/iup-linux/include/iup.h +255 -0
- data/ext/iup-linux/include/iup_pplot.h +40 -0
- data/ext/iup-linux/include/iupcb.h +25 -0
- data/ext/iup-linux/include/iupcbox.h +23 -0
- data/ext/iup-linux/include/iupcbs.h +42 -0
- data/ext/iup-linux/include/iupcells.h +130 -0
- data/ext/iup-linux/include/iupcolorbar.h +126 -0
- data/ext/iup-linux/include/iupcompat.h +62 -0
- data/ext/iup-linux/include/iupcontrols.h +40 -0
- data/ext/iup-linux/include/iupcpi.h +76 -0
- data/ext/iup-linux/include/iupdef.h +520 -0
- data/ext/iup-linux/include/iupdial.h +64 -0
- data/ext/iup-linux/include/iupgauge.h +57 -0
- data/ext/iup-linux/include/iupgc.h +20 -0
- data/ext/iup-linux/include/iupgetparam.h +27 -0
- data/ext/iup-linux/include/iupgl.h +101 -0
- data/ext/iup-linux/include/iupim.h +21 -0
- data/ext/iup-linux/include/iupkey.h +290 -0
- data/ext/iup-linux/include/iuplua.h +41 -0
- data/ext/iup-linux/include/iuplua_pplot.h +26 -0
- data/ext/iup-linux/include/iupluacontrols.h +27 -0
- data/ext/iup-linux/include/iupluagl.h +26 -0
- data/ext/iup-linux/include/iupluaim.h +26 -0
- data/ext/iup-linux/include/iupluaole.h +26 -0
- data/ext/iup-linux/include/iupmask.h +52 -0
- data/ext/iup-linux/include/iupmatrix.h +69 -0
- data/ext/iup-linux/include/iupole.h +24 -0
- data/ext/iup-linux/include/iupsbox.h +20 -0
- data/ext/iup-linux/include/iupspeech.h +23 -0
- data/ext/iup-linux/include/iupspin.h +21 -0
- data/ext/iup-linux/include/iuptabs.h +79 -0
- data/ext/iup-linux/include/iuptree.h +93 -0
- data/ext/iup-linux/include/iupval.h +46 -0
- data/ext/iup-linux/include/lauxlib.h +174 -0
- data/ext/iup-linux/include/lua.h +388 -0
- data/ext/iup-linux/include/lua.hpp +9 -0
- data/ext/iup-linux/include/luaconf.h +763 -0
- data/ext/iup-linux/include/lualib.h +53 -0
- data/ext/iup-linux/include/old_im.h +59 -0
- data/ext/iup-linux/include/wd.h +78 -0
- data/ext/iup-linux/include/wd_old.h +85 -0
- data/ext/iup-linux/libcd.so +0 -0
- data/ext/iup-linux/libcdcontextplus.so +0 -0
- data/ext/iup-linux/libcdluacontextplus51.so +0 -0
- data/ext/iup-linux/libcdpdf.so +0 -0
- data/ext/iup-linux/libfreetype.so +0 -0
- data/ext/iup-linux/libim.so +0 -0
- data/ext/iup-linux/libim_fftw.so +0 -0
- data/ext/iup-linux/libim_jp2.so +0 -0
- data/ext/iup-linux/libim_process.so +0 -0
- data/ext/iup-linux/libiup.so +0 -0
- data/ext/iup-linux/libiup_pplot.so +0 -0
- data/ext/iup-linux/libiupcd.so +0 -0
- data/ext/iup-linux/libiupcontrols.so +0 -0
- data/ext/iup-linux/libiupgl.so +0 -0
- data/ext/iup-linux/libiupim.so +0 -0
- data/ext/iup-linux/libiupimglib.so +0 -0
- data/ext/iup-linux/libpdflib.so +0 -0
- data/ext/iup-win32/cd.dll +0 -0
- data/ext/iup-win32/cd.lib +0 -0
- data/ext/iup-win32/cdcontextplus.dll +0 -0
- data/ext/iup-win32/cdcontextplus.lib +0 -0
- data/ext/iup-win32/cdlua51.lib +0 -0
- data/ext/iup-win32/cdluacontextplus51.lib +0 -0
- data/ext/iup-win32/cdluaim51.lib +0 -0
- data/ext/iup-win32/cdluapdf51.lib +0 -0
- data/ext/iup-win32/cdpdf.dll +0 -0
- data/ext/iup-win32/cdpdf.lib +0 -0
- data/ext/iup-win32/freetype6.dll +0 -0
- data/ext/iup-win32/freetype6.lib +0 -0
- data/ext/iup-win32/im.dll +0 -0
- data/ext/iup-win32/im_avi.dll +0 -0
- data/ext/iup-win32/im_capture.dll +0 -0
- data/ext/iup-win32/im_ecw.dll +0 -0
- data/ext/iup-win32/im_fftw.dll +0 -0
- data/ext/iup-win32/im_jp2.dll +0 -0
- data/ext/iup-win32/im_process.dll +0 -0
- data/ext/iup-win32/im_wmv.dll +0 -0
- data/ext/iup-win32/include/cd.h +494 -0
- data/ext/iup-win32/include/cd_canvas.hpp +358 -0
- data/ext/iup-win32/include/cd_old.h +158 -0
- data/ext/iup-win32/include/cd_private.h +362 -0
- data/ext/iup-win32/include/cdcgm.h +34 -0
- data/ext/iup-win32/include/cdclipbd.h +22 -0
- data/ext/iup-win32/include/cddbuf.h +23 -0
- data/ext/iup-win32/include/cddebug.h +24 -0
- data/ext/iup-win32/include/cddgn.h +23 -0
- data/ext/iup-win32/include/cddxf.h +22 -0
- data/ext/iup-win32/include/cdemf.h +22 -0
- data/ext/iup-win32/include/cdgdiplus.h +29 -0
- data/ext/iup-win32/include/cdimage.h +23 -0
- data/ext/iup-win32/include/cdirgb.h +30 -0
- data/ext/iup-win32/include/cdiup.h +22 -0
- data/ext/iup-win32/include/cdlua.h +39 -0
- data/ext/iup-win32/include/cdlua3_private.h +120 -0
- data/ext/iup-win32/include/cdlua5_private.h +141 -0
- data/ext/iup-win32/include/cdluaim.h +24 -0
- data/ext/iup-win32/include/cdluaiup.h +27 -0
- data/ext/iup-win32/include/cdluapdf.h +27 -0
- data/ext/iup-win32/include/cdmf.h +24 -0
- data/ext/iup-win32/include/cdmf_private.h +32 -0
- data/ext/iup-win32/include/cdnative.h +26 -0
- data/ext/iup-win32/include/cdpdf.h +38 -0
- data/ext/iup-win32/include/cdpicture.h +22 -0
- data/ext/iup-win32/include/cdprint.h +23 -0
- data/ext/iup-win32/include/cdps.h +37 -0
- data/ext/iup-win32/include/cdwmf.h +22 -0
- data/ext/iup-win32/include/iup.h +255 -0
- data/ext/iup-win32/include/iup_pplot.h +40 -0
- data/ext/iup-win32/include/iupcb.h +25 -0
- data/ext/iup-win32/include/iupcbox.h +23 -0
- data/ext/iup-win32/include/iupcbs.h +42 -0
- data/ext/iup-win32/include/iupcells.h +130 -0
- data/ext/iup-win32/include/iupcolorbar.h +126 -0
- data/ext/iup-win32/include/iupcompat.h +62 -0
- data/ext/iup-win32/include/iupcontrols.h +40 -0
- data/ext/iup-win32/include/iupcpi.h +76 -0
- data/ext/iup-win32/include/iupdef.h +520 -0
- data/ext/iup-win32/include/iupdial.h +64 -0
- data/ext/iup-win32/include/iupgauge.h +57 -0
- data/ext/iup-win32/include/iupgc.h +20 -0
- data/ext/iup-win32/include/iupgetparam.h +27 -0
- data/ext/iup-win32/include/iupgl.h +101 -0
- data/ext/iup-win32/include/iupim.h +21 -0
- data/ext/iup-win32/include/iupkey.h +290 -0
- data/ext/iup-win32/include/iuplua.h +41 -0
- data/ext/iup-win32/include/iuplua_pplot.h +26 -0
- data/ext/iup-win32/include/iupluacontrols.h +27 -0
- data/ext/iup-win32/include/iupluagl.h +26 -0
- data/ext/iup-win32/include/iupluaim.h +26 -0
- data/ext/iup-win32/include/iupluaole.h +26 -0
- data/ext/iup-win32/include/iupmask.h +52 -0
- data/ext/iup-win32/include/iupmatrix.h +69 -0
- data/ext/iup-win32/include/iupole.h +24 -0
- data/ext/iup-win32/include/iupsbox.h +20 -0
- data/ext/iup-win32/include/iupspeech.h +23 -0
- data/ext/iup-win32/include/iupspin.h +21 -0
- data/ext/iup-win32/include/iuptabs.h +79 -0
- data/ext/iup-win32/include/iuptree.h +93 -0
- data/ext/iup-win32/include/iupval.h +46 -0
- data/ext/iup-win32/include/wd.h +78 -0
- data/ext/iup-win32/include/wd_old.h +85 -0
- data/ext/iup-win32/iup.dll +0 -0
- data/ext/iup-win32/iup.lib +0 -0
- data/ext/iup-win32/iup_pplot.dll +0 -0
- data/ext/iup-win32/iup_pplot.lib +0 -0
- data/ext/iup-win32/iupcd.dll +0 -0
- data/ext/iup-win32/iupcd.lib +0 -0
- data/ext/iup-win32/iupcontrols.dll +0 -0
- data/ext/iup-win32/iupcontrols.lib +0 -0
- data/ext/iup-win32/iupgl.dll +0 -0
- data/ext/iup-win32/iupgl.lib +0 -0
- data/ext/iup-win32/iupim.dll +0 -0
- data/ext/iup-win32/iupim.lib +0 -0
- data/ext/iup-win32/iupimglib.dll +0 -0
- data/ext/iup-win32/iupimglib.lib +0 -0
- data/ext/iup-win32/iuplua51.lib +0 -0
- data/ext/iup-win32/iuplua_pplot51.lib +0 -0
- data/ext/iup-win32/iupluacd51.lib +0 -0
- data/ext/iup-win32/iupluacontrols51.lib +0 -0
- data/ext/iup-win32/iupluagl51.lib +0 -0
- data/ext/iup-win32/iupluaim51.lib +0 -0
- data/ext/iup-win32/iupluaimglib51.lib +0 -0
- data/ext/iup-win32/iupluaole51.lib +0 -0
- data/ext/iup-win32/iupole.dll +0 -0
- data/ext/iup-win32/iupole.lib +0 -0
- data/ext/iup-win32/iupstub.lib +0 -0
- data/ext/iup-win32/pdflib.dll +0 -0
- data/ext/iup-win32/pdflib.lib +0 -0
- data/ext/iup.c +1261 -0
- data/ext/mkrf_conf.rb +72 -0
- data/ext/rb_cd.h +1525 -0
- data/ext/rb_iup.h +2446 -0
- data/ext/rb_iup_pplot.h +129 -0
- data/ext/rb_iupcb.h +13 -0
- data/ext/rb_iupcbox.h +40 -0
- data/ext/rb_iupcells.h +15 -0
- data/ext/rb_iupcolorbar.h +17 -0
- data/ext/rb_iupcompat.h +237 -0
- data/ext/rb_iupcontrols.h +28 -0
- data/ext/rb_iupdef.h +3 -0
- data/ext/rb_iupdial.h +24 -0
- data/ext/rb_iupgauge.h +15 -0
- data/ext/rb_iupgc.h +18 -0
- data/ext/rb_iupgetparam.h +72 -0
- data/ext/rb_iupgl.h +58 -0
- data/ext/rb_iupim.h +25 -0
- data/ext/rb_iupmask.h +189 -0
- data/ext/rb_iupmatrix.h +80 -0
- data/ext/rb_iupole.h +24 -0
- data/ext/rb_iupsbox.h +23 -0
- data/ext/rb_iupspeech.h +25 -0
- data/ext/rb_iupspin.h +29 -0
- data/ext/rb_iuptabs.h +29 -0
- data/ext/rb_iuptree.h +94 -0
- data/ext/rb_iupval.h +24 -0
- data/lib/README +1 -0
- metadata +391 -0
|
@@ -0,0 +1,465 @@
|
|
|
1
|
+
/** \file
|
|
2
|
+
* \brief Color Manipulation
|
|
3
|
+
*
|
|
4
|
+
* See Copyright Notice in im_lib.h
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef __IM_COLOR_H
|
|
8
|
+
#define __IM_COLOR_H
|
|
9
|
+
|
|
10
|
+
#include "im_math.h"
|
|
11
|
+
|
|
12
|
+
/** \defgroup color Color Manipulation
|
|
13
|
+
*
|
|
14
|
+
* \par
|
|
15
|
+
* Functions to convert from one color space to another,
|
|
16
|
+
* and color gammut utilities.
|
|
17
|
+
* \par
|
|
18
|
+
* See \ref im_color.h
|
|
19
|
+
*
|
|
20
|
+
* \section s1 Some Color Science
|
|
21
|
+
* \par
|
|
22
|
+
* Y is luminance, a linear-light quantity.
|
|
23
|
+
* It is directly proportional to physical intensity
|
|
24
|
+
* weighted by the spectral sensitivity of human vision.
|
|
25
|
+
* \par
|
|
26
|
+
* L* is lightness, a nonlinear luminance
|
|
27
|
+
* that aproximates the perception of brightness.
|
|
28
|
+
* It is nearly perceptual uniform.
|
|
29
|
+
* It has a range of 0 to 100.
|
|
30
|
+
* \par
|
|
31
|
+
* Y' is luma, a nonlinear luminance that aproximates lightness.
|
|
32
|
+
* \par
|
|
33
|
+
* Brightness is a visual sensation according to which an area
|
|
34
|
+
* apears to exhibit more or less light.
|
|
35
|
+
* It is a subjective quantity and can not be measured.
|
|
36
|
+
* \par
|
|
37
|
+
* One unit of euclidian distante in CIE L*u*v* or CIE L*a*b* corresponds
|
|
38
|
+
* roughly to a just-noticeable difference (JND) of color.
|
|
39
|
+
* \par
|
|
40
|
+
\verbatim
|
|
41
|
+
ChromaUV = sqrt(u*u + v*v)
|
|
42
|
+
HueUV = atan2(v, u)
|
|
43
|
+
SaturationUV = ChromaUV / L (called psychometric saturation)
|
|
44
|
+
(the same can be calculated for Lab)
|
|
45
|
+
\endverbatim
|
|
46
|
+
* \par
|
|
47
|
+
* IEC 61966-2.1 Default RGB colour space - sRGB
|
|
48
|
+
* \li ITU-R Recommendation BT.709 (D65 white point).
|
|
49
|
+
* \li D65 White Point (X,Y,Z) = (0.9505 1.0000 1.0890)
|
|
50
|
+
* \par
|
|
51
|
+
* Documentation extracted from Charles Poynton - Digital Video and HDTV - Morgan Kaufmann - 2003.
|
|
52
|
+
*
|
|
53
|
+
* \section Links
|
|
54
|
+
* \li www.color.org - ICC
|
|
55
|
+
* \li www.srgb.com - sRGB
|
|
56
|
+
* \li www.poynton.com - Charles Poynton
|
|
57
|
+
* \li www.littlecms.com - A free Color Management System (use this if you need precise color conversions)
|
|
58
|
+
*
|
|
59
|
+
* \section cci Color Component Intervals
|
|
60
|
+
* \par
|
|
61
|
+
* All the color components are stored in the 0-max interval, even the signed ones. \n
|
|
62
|
+
* Here are the pre-defined intervals for each data type. These values are used for standard color conversion.
|
|
63
|
+
* You should normalize data before converting betwwen color spaces.
|
|
64
|
+
* \par
|
|
65
|
+
\verbatim
|
|
66
|
+
byte [0,255] or [-128,+127] (1 byte)
|
|
67
|
+
ushort [0,65535] or [-32768,+32767] (2 bytes)
|
|
68
|
+
int [0,16777215] or [-8388608,+8388607] (3 bytes)
|
|
69
|
+
float [0,1] or [-0.5,+0.5] (4 bytes)
|
|
70
|
+
\endverbatim
|
|
71
|
+
* \ingroup util */
|
|
72
|
+
|
|
73
|
+
/** Returns the zero value for color conversion porpouses. \n
|
|
74
|
+
* This is a value to be compensated when the data_type is unsigned and component is signed. \n
|
|
75
|
+
* \ingroup color */
|
|
76
|
+
inline float imColorZero(int data_type)
|
|
77
|
+
{
|
|
78
|
+
float zero[] = {128.0f, 32768.0f, 8388608.0f, 0.5f};
|
|
79
|
+
return zero[data_type];
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Returns the maximum value for color conversion porpouses. \n
|
|
83
|
+
* \ingroup color */
|
|
84
|
+
inline int imColorMax(int data_type)
|
|
85
|
+
{
|
|
86
|
+
int max[] = {255, 65535, 16777215, 1};
|
|
87
|
+
return max[data_type];
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** Quantize r=0-1 values into q=0-max.
|
|
91
|
+
* max is the maximum value.
|
|
92
|
+
* max and the returned value are usually integers,
|
|
93
|
+
* but the dummy quantizer uses real values.
|
|
94
|
+
* See also \ref math.
|
|
95
|
+
* \ingroup color */
|
|
96
|
+
template <class T>
|
|
97
|
+
inline T imColorQuantize(const float& value, const T& max)
|
|
98
|
+
{
|
|
99
|
+
if (max == 1) return (T)value; // to allow a dummy quantizer
|
|
100
|
+
if (value >= 1) return max;
|
|
101
|
+
if (value <= 0) return 0;
|
|
102
|
+
/* return (T)imRound(value*(max + 1) - 0.5f); not necessary since all values are positive */
|
|
103
|
+
return (T)(value*(max + 1));
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/** Reconstruct 0-max values into 0-1. \n
|
|
107
|
+
* max is the maximum value.
|
|
108
|
+
* max and the given value are usually integers,
|
|
109
|
+
* but the dummy reconstructor uses real values.
|
|
110
|
+
* See also \ref math.
|
|
111
|
+
* \ingroup color */
|
|
112
|
+
template <class T>
|
|
113
|
+
inline float imColorReconstruct(const T& value, const T& max)
|
|
114
|
+
{
|
|
115
|
+
if (max == 1) return (float)value; // to allow a dummy reconstructor
|
|
116
|
+
if (value <= 0) return 0;
|
|
117
|
+
if (value >= max) return 1;
|
|
118
|
+
return (((float)value + 0.5f)/((float)max + 1.0f));
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/** Converts Y'CbCr to R'G'B' (all nonlinear). \n
|
|
122
|
+
* ITU-R Recommendation 601-1 with no headroom/footroom.
|
|
123
|
+
\verbatim
|
|
124
|
+
0 <= Y <= 1 ; -0.5 <= CbCr <= 0.5 ; 0 <= RGB <= 1
|
|
125
|
+
|
|
126
|
+
R'= Y' + 0.000 *Cb + 1.402 *Cr
|
|
127
|
+
G'= Y' - 0.344 *Cb - 0.714 *Cr
|
|
128
|
+
B'= Y' + 1.772 *Cb + 0.000 *Cr
|
|
129
|
+
\endverbatim
|
|
130
|
+
* \ingroup color */
|
|
131
|
+
template <class T>
|
|
132
|
+
inline void imColorYCbCr2RGB(const T Y, const T Cb, const T Cr,
|
|
133
|
+
T& R, T& G, T& B,
|
|
134
|
+
const T& zero, const T& max)
|
|
135
|
+
{
|
|
136
|
+
float r = float(Y + 1.402f * (Cr - zero));
|
|
137
|
+
float g = float(Y - 0.344f * (Cb - zero) - 0.714f * (Cr - zero));
|
|
138
|
+
float b = float(Y + 1.772f * (Cb - zero));
|
|
139
|
+
|
|
140
|
+
// now we should enforce 0<= rgb <= max
|
|
141
|
+
|
|
142
|
+
R = (T)IM_CROPMAX(r, max);
|
|
143
|
+
G = (T)IM_CROPMAX(g, max);
|
|
144
|
+
B = (T)IM_CROPMAX(b, max);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
/** Converts R'G'B' to Y'CbCr (all nonlinear). \n
|
|
148
|
+
* ITU-R Recommendation 601-1 with no headroom/footroom.
|
|
149
|
+
\verbatim
|
|
150
|
+
0 <= Y <= 1 ; -0.5 <= CbCr <= 0.5 ; 0 <= RGB <= 1
|
|
151
|
+
|
|
152
|
+
Y' = 0.299 *R' + 0.587 *G' + 0.114 *B'
|
|
153
|
+
Cb = -0.169 *R' - 0.331 *G' + 0.500 *B'
|
|
154
|
+
Cr = 0.500 *R' - 0.419 *G' - 0.081 *B'
|
|
155
|
+
\endverbatim
|
|
156
|
+
* \ingroup color */
|
|
157
|
+
template <class T>
|
|
158
|
+
inline void imColorRGB2YCbCr(const T R, const T G, const T B,
|
|
159
|
+
T& Y, T& Cb, T& Cr,
|
|
160
|
+
const T& zero)
|
|
161
|
+
{
|
|
162
|
+
Y = (T)( 0.299f *R + 0.587f *G + 0.114f *B);
|
|
163
|
+
Cb = (T)(-0.169f *R - 0.331f *G + 0.500f *B + (float)zero);
|
|
164
|
+
Cr = (T)( 0.500f *R - 0.419f *G - 0.081f *B + (float)zero);
|
|
165
|
+
|
|
166
|
+
// there is no need for cropping here, YCrCr is already at the limits
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/** Converts C'M'Y'K' to R'G'B' (all nonlinear). \n
|
|
170
|
+
* This is a poor conversion that works for a simple visualization.
|
|
171
|
+
\verbatim
|
|
172
|
+
0 <= CMYK <= 1 ; 0 <= RGB <= 1
|
|
173
|
+
|
|
174
|
+
R = (1 - K) * (1 - C)
|
|
175
|
+
G = (1 - K) * (1 - M)
|
|
176
|
+
B = (1 - K) * (1 - Y)
|
|
177
|
+
\endverbatim
|
|
178
|
+
* \ingroup color */
|
|
179
|
+
template <class T>
|
|
180
|
+
inline void imColorCMYK2RGB(const T C, const T M, const T Y, const T K,
|
|
181
|
+
T& R, T& G, T& B, const T& max)
|
|
182
|
+
{
|
|
183
|
+
T W = max - K;
|
|
184
|
+
R = (T)((W * (max - C)) / max);
|
|
185
|
+
G = (T)((W * (max - M)) / max);
|
|
186
|
+
B = (T)((W * (max - Y)) / max);
|
|
187
|
+
|
|
188
|
+
// there is no need for cropping here, RGB is already at the limits
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
/** Converts CIE XYZ to Rec 709 RGB (all linear). \n
|
|
192
|
+
* ITU-R Recommendation BT.709 (D65 white point). \n
|
|
193
|
+
\verbatim
|
|
194
|
+
0 <= XYZ <= 1 ; 0 <= RGB <= 1
|
|
195
|
+
|
|
196
|
+
R = 3.2406 *X - 1.5372 *Y - 0.4986 *Z
|
|
197
|
+
G = -0.9689 *X + 1.8758 *Y + 0.0415 *Z
|
|
198
|
+
B = 0.0557 *X - 0.2040 *Y + 1.0570 *Z
|
|
199
|
+
\endverbatim
|
|
200
|
+
* \ingroup color */
|
|
201
|
+
template <class T>
|
|
202
|
+
inline void imColorXYZ2RGB(const T X, const T Y, const T Z,
|
|
203
|
+
T& R, T& G, T& B, const T& max)
|
|
204
|
+
{
|
|
205
|
+
float r = 3.2406f *X - 1.5372f *Y - 0.4986f *Z;
|
|
206
|
+
float g = -0.9689f *X + 1.8758f *Y + 0.0415f *Z;
|
|
207
|
+
float b = 0.0557f *X - 0.2040f *Y + 1.0570f *Z;
|
|
208
|
+
|
|
209
|
+
// we need to crop because not all XYZ colors are visible
|
|
210
|
+
|
|
211
|
+
R = (T)IM_CROPMAX(r, max);
|
|
212
|
+
G = (T)IM_CROPMAX(g, max);
|
|
213
|
+
B = (T)IM_CROPMAX(b, max);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
/** Converts Rec 709 RGB to CIE XYZ (all linear). \n
|
|
217
|
+
* ITU-R Recommendation BT.709 (D65 white point). \n
|
|
218
|
+
\verbatim
|
|
219
|
+
0 <= XYZ <= 1 ; 0 <= RGB <= 1
|
|
220
|
+
|
|
221
|
+
X = 0.4124 *R + 0.3576 *G + 0.1805 *B
|
|
222
|
+
Y = 0.2126 *R + 0.7152 *G + 0.0722 *B
|
|
223
|
+
Z = 0.0193 *R + 0.1192 *G + 0.9505 *B
|
|
224
|
+
\endverbatim
|
|
225
|
+
* \ingroup color */
|
|
226
|
+
template <class T>
|
|
227
|
+
inline void imColorRGB2XYZ(const T R, const T G, const T B,
|
|
228
|
+
T& X, T& Y, T& Z)
|
|
229
|
+
{
|
|
230
|
+
X = (T)(0.4124f *R + 0.3576f *G + 0.1805f *B);
|
|
231
|
+
Y = (T)(0.2126f *R + 0.7152f *G + 0.0722f *B);
|
|
232
|
+
Z = (T)(0.0193f *R + 0.1192f *G + 0.9505f *B);
|
|
233
|
+
|
|
234
|
+
// there is no need for cropping here, XYZ is already at the limits
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
#define IM_FWLAB(_w) (_w > 0.008856f? \
|
|
238
|
+
powf(_w, 1.0f/3.0f): \
|
|
239
|
+
7.787f * _w + 0.16f/1.16f)
|
|
240
|
+
|
|
241
|
+
/** Converts CIE XYZ (linear) to CIE L*a*b* (nonlinear). \n
|
|
242
|
+
* The white point is D65. \n
|
|
243
|
+
\verbatim
|
|
244
|
+
0 <= L <= 1 ; -0.5 <= ab <= +0.5 ; 0 <= XYZ <= 1
|
|
245
|
+
|
|
246
|
+
if (t > 0.008856)
|
|
247
|
+
f(t) = pow(t, 1/3)
|
|
248
|
+
else
|
|
249
|
+
f(t) = 7.787*t + 16/116
|
|
250
|
+
|
|
251
|
+
fX = f(X / Xn) fY = f(Y / Yn) fZ = f(Z / Zn)
|
|
252
|
+
|
|
253
|
+
L = 1.16 * fY - 0.16
|
|
254
|
+
a = 2.5 * (fX - fY)
|
|
255
|
+
b = (fY - fZ)
|
|
256
|
+
|
|
257
|
+
\endverbatim
|
|
258
|
+
* \ingroup color */
|
|
259
|
+
inline void imColorXYZ2Lab(const float X, const float Y, const float Z,
|
|
260
|
+
float& L, float& a, float& b)
|
|
261
|
+
{
|
|
262
|
+
float fX = X / 0.9505f; // white point D65
|
|
263
|
+
float fY = Y / 1.0f;
|
|
264
|
+
float fZ = Z / 1.0890f;
|
|
265
|
+
|
|
266
|
+
fX = IM_FWLAB(fX);
|
|
267
|
+
fY = IM_FWLAB(fY);
|
|
268
|
+
fZ = IM_FWLAB(fZ);
|
|
269
|
+
|
|
270
|
+
L = 1.16f * fY - 0.16f;
|
|
271
|
+
a = 2.5f * (fX - fY);
|
|
272
|
+
b = (fY - fZ);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
#define IM_GWLAB(_w) (_w > 0.20689f? \
|
|
276
|
+
powf(_w, 3.0f): \
|
|
277
|
+
0.1284f * (_w - 0.16f/1.16f))
|
|
278
|
+
|
|
279
|
+
/** Converts CIE L*a*b* (nonlinear) to CIE XYZ (linear). \n
|
|
280
|
+
* The white point is D65. \n
|
|
281
|
+
* 0 <= L <= 1 ; -0.5 <= ab <= +0.5 ; 0 <= XYZ <= 1
|
|
282
|
+
* \ingroup color */
|
|
283
|
+
inline void imColorLab2XYZ(const float L, const float a, const float b,
|
|
284
|
+
float& X, float& Y, float& Z)
|
|
285
|
+
|
|
286
|
+
{
|
|
287
|
+
float fY = (L + 0.16f) / 1.16f;
|
|
288
|
+
float gY = IM_GWLAB(fY);
|
|
289
|
+
|
|
290
|
+
float fgY = IM_FWLAB(gY);
|
|
291
|
+
float gX = fgY + a / 2.5f;
|
|
292
|
+
float gZ = fgY - b;
|
|
293
|
+
gX = IM_GWLAB(gX);
|
|
294
|
+
gZ = IM_GWLAB(gZ);
|
|
295
|
+
|
|
296
|
+
X = gX * 0.9505f; // white point D65
|
|
297
|
+
Y = gY * 1.0f;
|
|
298
|
+
Z = gZ * 1.0890f;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
/** Converts CIE XYZ (linear) to CIE L*u*v* (nonlinear). \n
|
|
302
|
+
* The white point is D65. \n
|
|
303
|
+
\verbatim
|
|
304
|
+
0 <= L <= 1 ; -1 <= uv <= +1 ; 0 <= XYZ <= 1
|
|
305
|
+
|
|
306
|
+
Y = Y / 1.0 (for D65)
|
|
307
|
+
if (Y > 0.008856)
|
|
308
|
+
fY = pow(Y, 1/3)
|
|
309
|
+
else
|
|
310
|
+
fY = 7.787 * Y + 0.16/1.16
|
|
311
|
+
L = 1.16 * fY - 0.16
|
|
312
|
+
|
|
313
|
+
U(x, y, z) = (4 * x)/(x + 15 * y + 3 * z)
|
|
314
|
+
V(x, y, z) = (9 * x)/(x + 15 * y + 3 * z)
|
|
315
|
+
un = U(Xn, Yn, Zn) = 0.1978 (for D65)
|
|
316
|
+
vn = V(Xn, Yn, Zn) = 0.4683 (for D65)
|
|
317
|
+
fu = U(X, Y, Z)
|
|
318
|
+
fv = V(X, Y, Z)
|
|
319
|
+
|
|
320
|
+
u = 13 * L * (fu - un)
|
|
321
|
+
v = 13 * L * (fv - vn)
|
|
322
|
+
\endverbatim
|
|
323
|
+
* \ingroup color */
|
|
324
|
+
inline void imColorXYZ2Luv(const float X, const float Y, const float Z,
|
|
325
|
+
float& L, float& u, float& v)
|
|
326
|
+
{
|
|
327
|
+
float XYZ = (float)(X + 15 * Y + 3 * Z);
|
|
328
|
+
float fY = Y / 1.0f;
|
|
329
|
+
|
|
330
|
+
if (XYZ != 0)
|
|
331
|
+
{
|
|
332
|
+
L = 1.16f * IM_FWLAB(fY) - 0.16f;
|
|
333
|
+
u = 6.5f * L * ((4 * X)/XYZ - 0.1978f);
|
|
334
|
+
v = 6.5f * L * ((9 * Y)/XYZ - 0.4683f);
|
|
335
|
+
}
|
|
336
|
+
else
|
|
337
|
+
{
|
|
338
|
+
L = u = v = 0;
|
|
339
|
+
}
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/** Converts CIE L*u*v* (nonlinear) to CIE XYZ (linear). \n
|
|
343
|
+
* The white point is D65.
|
|
344
|
+
* 0 <= L <= 1 ; -0.5 <= uv <= +0.5 ; 0 <= XYZ <= 1 \n
|
|
345
|
+
* \ingroup color */
|
|
346
|
+
inline void imColorLuv2XYZ(const float L, const float u, const float v,
|
|
347
|
+
float& X, float& Y, float& Z)
|
|
348
|
+
|
|
349
|
+
{
|
|
350
|
+
float fY = (L + 0.16f) / 1.16f;
|
|
351
|
+
Y = IM_GWLAB(fY) * 1.0f;
|
|
352
|
+
|
|
353
|
+
float ul = 0.1978f, vl = 0.4683f;
|
|
354
|
+
if (L != 0)
|
|
355
|
+
{
|
|
356
|
+
ul = u / (6.5f * L) + 0.1978f;
|
|
357
|
+
vl = v / (6.5f * L) + 0.4683f;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
X = ((9 * ul) / (4 * vl)) * Y;
|
|
361
|
+
Z = ((12 - 3 * ul - 20 * vl) / (4 * vl)) * Y;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/** Converts nonlinear values to linear values. \n
|
|
365
|
+
* We use the sRGB transfer function. sRGB uses ITU-R 709 primaries and D65 white point. \n
|
|
366
|
+
\verbatim
|
|
367
|
+
0 <= l <= 1 ; 0 <= v <= 1
|
|
368
|
+
|
|
369
|
+
if (v < 0.03928)
|
|
370
|
+
l = v / 12.92
|
|
371
|
+
else
|
|
372
|
+
l = pow((v + 0.055) / 1.055, 2.4)
|
|
373
|
+
\endverbatim
|
|
374
|
+
* \ingroup color */
|
|
375
|
+
inline float imColorTransfer2Linear(const float& nonlinear_value)
|
|
376
|
+
{
|
|
377
|
+
if (nonlinear_value < 0.03928f)
|
|
378
|
+
return nonlinear_value / 12.92f;
|
|
379
|
+
else
|
|
380
|
+
return powf((nonlinear_value + 0.055f) / 1.055f, 2.4f);
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
/** Converts linear values to nonlinear values. \n
|
|
384
|
+
* We use the sRGB transfer function. sRGB uses ITU-R 709 primaries and D65 white point. \n
|
|
385
|
+
\verbatim
|
|
386
|
+
0 <= l <= 1 ; 0 <= v <= 1
|
|
387
|
+
|
|
388
|
+
if (l < 0.0031308)
|
|
389
|
+
v = 12.92 * l
|
|
390
|
+
else
|
|
391
|
+
v = 1.055 * pow(l, 1/2.4) - 0.055
|
|
392
|
+
\endverbatim
|
|
393
|
+
* \ingroup color */
|
|
394
|
+
inline float imColorTransfer2Nonlinear(const float& value)
|
|
395
|
+
{
|
|
396
|
+
if (value < 0.0031308f)
|
|
397
|
+
return 12.92f * value;
|
|
398
|
+
else
|
|
399
|
+
return 1.055f * powf(value, 1.0f/2.4f) - 0.055f;
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
/** Converts RGB (linear) to R'G'B' (nonlinear).
|
|
403
|
+
* \ingroup color */
|
|
404
|
+
inline void imColorRGB2RGBNonlinear(const float RL, const float GL, const float BL,
|
|
405
|
+
float& R, float& G, float& B)
|
|
406
|
+
{
|
|
407
|
+
R = imColorTransfer2Nonlinear(RL);
|
|
408
|
+
G = imColorTransfer2Nonlinear(GL);
|
|
409
|
+
B = imColorTransfer2Nonlinear(BL);
|
|
410
|
+
}
|
|
411
|
+
|
|
412
|
+
/** Converts R'G'B' to Y' (all nonlinear). \n
|
|
413
|
+
\verbatim
|
|
414
|
+
Y' = 0.299 *R' + 0.587 *G' + 0.114 *B'
|
|
415
|
+
\endverbatim
|
|
416
|
+
* \ingroup color */
|
|
417
|
+
template <class T>
|
|
418
|
+
inline T imColorRGB2Luma(const T R, const T G, const T B)
|
|
419
|
+
{
|
|
420
|
+
return (T)((299 * R + 587 * G + 114 * B) / 1000);
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
/** Converts Luminance (CIE Y) to Lightness (CIE L*) (all linear). \n
|
|
424
|
+
* The white point is D65.
|
|
425
|
+
\verbatim
|
|
426
|
+
0 <= Y <= 1 ; 0 <= L* <= 1
|
|
427
|
+
|
|
428
|
+
Y = Y / 1.0 (for D65)
|
|
429
|
+
if (Y > 0.008856)
|
|
430
|
+
fY = pow(Y, 1/3)
|
|
431
|
+
else
|
|
432
|
+
fY = 7.787 * Y + 0.16/1.16
|
|
433
|
+
L = 1.16 * fY - 0.16
|
|
434
|
+
\endverbatim
|
|
435
|
+
* \ingroup color */
|
|
436
|
+
inline float imColorLuminance2Lightness(const float& Y)
|
|
437
|
+
{
|
|
438
|
+
return 1.16f * IM_FWLAB(Y) - 0.16f;
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
/** Converts Lightness (CIE L*) to Luminance (CIE Y) (all linear). \n
|
|
442
|
+
* The white point is D65.
|
|
443
|
+
\verbatim
|
|
444
|
+
0 <= Y <= 1 ; 0 <= L* <= 1
|
|
445
|
+
|
|
446
|
+
fY = (L + 0.16)/1.16
|
|
447
|
+
if (fY > 0.20689)
|
|
448
|
+
Y = pow(fY, 3)
|
|
449
|
+
else
|
|
450
|
+
Y = 0.1284 * (fY - 0.16/1.16)
|
|
451
|
+
Y = Y * 1.0 (for D65)
|
|
452
|
+
\endverbatim
|
|
453
|
+
* \ingroup color */
|
|
454
|
+
inline float imColorLightness2Luminance(const float& L)
|
|
455
|
+
{
|
|
456
|
+
float fY = (L + 0.16f) / 1.16f;
|
|
457
|
+
return IM_GWLAB(fY);
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
#undef IM_FWLAB
|
|
461
|
+
#undef IM_GWLAB
|
|
462
|
+
#undef IM_CROPL
|
|
463
|
+
#undef IM_CROPC
|
|
464
|
+
|
|
465
|
+
#endif
|