| .TH IM_COL_XYZ2RGB 3 "2 December 1992" |
| .SH NAME |
| im_col_Lab2LCh, im_col_LCh2ab, im_col_Lab2XYZ, im_col_XYZ2Lab, |
| im_col_pythagoras, im_col_display, im_col_XYZ2rgb, im_col_rgb2XYZ, |
| im_col_L2Lucs, im_col_Lucs2L, im_col_C2Cucs, im_col_Cucs2C, im_col_Ch2hucs, |
| im_col_Chucs2h, im_col_make_tables_UCS, im_col_dECMC |
| \- colour space conversion |
| .SH SYNOPSIS |
| #include <vips/vips.h> |
| |
| |
| int im_col_ab2Ch( a, b, C, h ) |
| .br |
| float a, b, *C, *h; |
| |
| |
| int im_col_Ch2ab( C, h, a, b ) |
| .br |
| float C, h, *a, *b; |
| |
| int im_col_Lab2XYZ( L, a, b, X, Y, Z ) |
| .br |
| float L, a, b, *X, *Y, *Z; |
| |
| int im_col_XYZ2Lab( X, Y, Z, L, a, b ) |
| .br |
| float X, Y, Z, *L, *a, *b; |
| |
| float im_col_pythagoras( L1, a1, b1, L2, a2, b2 ) |
| .br |
| float L1, a1, b1, L2, a2, b2; |
| |
| extern struct im_col_display *im_col_displays[]; |
| |
| struct im_col_tab_disp *im_col_make_tables_RGB( im, display ) |
| .br |
| IMAGE *im; |
| .br |
| struct im_col_display *display; |
| |
| int im_col_XYZ2rgb( display, table, X, Y, Z, r, g, b, oflow ) |
| .br |
| struct im_col_display *display; |
| .br |
| struct im_col_tab_disp *table; |
| .br |
| float X, Y, Z; |
| .br |
| int *r, *g, *b; |
| .br |
| int *oflow; |
| |
| |
| int im_col_rgb2XYZ( display, table, r, g, b, X, Y, Z ) |
| .br |
| struct im_col_display *display; |
| .br |
| struct im_col_tab_disp *table; |
| .br |
| int r, g, b; |
| .br |
| float *X, *Y, *Z; |
| |
| float im_col_L2Lucs( L ) |
| .br |
| float L; |
| |
| float im_col_Lucs2L( Lucs ) |
| .br |
| float Lucs; |
| |
| float im_col_C2Cucs( C ) |
| .br |
| float C; |
| |
| float im_col_Cucs2C( Cucs ) |
| .br |
| float Cucs; |
| |
| float im_col_Ch2hucs( C, h ) |
| .br |
| float h, C; |
| |
| float im_col_Chucs2h( C, hucs ) |
| .br |
| float hucs, C; |
| |
| void im_col_make_tables_UCS( void ) |
| |
| float im_col_dECMC( L1, a1, b1, L2, a2, b2 ) |
| .br |
| float L1, a1, b1, L2, a2, b2; |
| |
| .SH DESCRIPTION |
| Colour space conversion. |
| These functions convert colour values between four different formats: XYZ |
| (float), Lab (float), UCS (float), and RGB (unsigned char) |
| displayable. Additionally, functions are provided to move from (a,b)-style |
| rectangular colour coordinates to (C,h)-style coordinates. h is always |
| in degrees. |
| |
| UCS is a colour space derived from the CMC(1:1) equations. There is no easy |
| analytical conversion from UCS to Lab, so look-up tables are used. These have |
| to be built with a call to im_col_make_tables_UCS(). Once built, these |
| tables are shared by all UCS functions. You may call im_col_make_tables_UCS() |
| many times - tables are only built on the first call. |
| |
| im_col_pythagoras() returns the pythagoran distance between two points in a |
| colour space. It can be used for finding CIELAB delta E's. im_col_dECMC() |
| returns the colour difference between two LAB points in CMC(1:1). |
| |
| An im_col_display structure characterises a CRT screen (see <vips/colour.h>). |
| You can make up your own (if you can find a TV analyser), or use one of the |
| structures provied by VIPS in the NULL-terminated array im_col_displays[]. See |
| the source for disp2XYZ(1) for ideas on extracting a display struct from this |
| list. |
| |
| im_make_tables_RGB(3) has a display type as argument, and returns a pointer |
| to the structure im_col_tab_RGB. This latter contains the matrices to go from |
| XYZ to luminances (and back), and the tables to go from the luminances (in r, |
| g, b) to the effective signal values to be applied to the monitor input (and |
| back). The function returns NULL on error. The IMAGE argument is passed on to |
| im_malloc() to make the space required for the tables. Pass either NULL (if |
| you need to free the memory yourself) or an IMAGE descriptor (if you want the |
| memory to be freed automatically when that descriptor is closed). |
| |
| im_col_XYZ2rgb() takes a display, a look-up table and an XYZ coordinate are |
| returns three values in the range 0-255. The extra value oflow is set to 0 if |
| the specified XYZ position aflls within the display gamut, and to 1 if the |
| point lies outside the gamut. im_col_rgb2XYZ() is the reverse transformation. |
| .SH RETURN VALUE |
| The functions (usually) return 0 on success and -1 on error. |
| .SH SEE\ ALSO |
| .nf |
| im_XYZ2disp(3), im_dE_fromdisp(3). |
| .SH COPYRIGHT |
| National Gallery, 1990-1993. |
| .SH AUTHOR |
| D. Saunders \- 1988 |
| .br |
| J.Ph. Laurent \- 2/12/1992 |
| .br |
| J.Cupitt \- 21/7/93 |