.TH IM_XYZ2disp 3 "2 Decemder 1992"
.SH NAME
im_XYZ2disp, im_disp2XYZ, im_Lab2XYZ, im_XYZ2Lab, im_XYZ2Yxy, im_Yxy2XYZ,
im_XYZ2sRGB, im_sRGB2XYZ,
im_Lab2LCh, im_LCh2Lab, im_LCh2UCS, im_UCS2LCh \- convert images between 
various colour spaces
.SH SYNOPSIS
#include <vips/vips.h>

int im_XYZ2disp(in, out, display)
.br
IMAGE *in, *out;
.br
struct im_col_display *display;

int im_disp2XYZ(in, out, display)
.br
IMAGE *in, *out;
.br
struct im_col_display *display;

int im_Lab2XYZ(in, out)
.br
IMAGE *in, *out;

int im_XYZ2Lab(in, out)
.br
IMAGE *in, *out;

int im_XYZ2Yxy(in, out)
.br
IMAGE *in, *out;

int im_Yxy2XYZ(in, out)
.br
IMAGE *in, *out;

int im_XYZ2sRGB(in, out)
.br
IMAGE *in, *out;

int im_sRGB2XYZ(in, out)
.br
IMAGE *in, *out;

int im_Lab2LCh(in, out)
.br
IMAGE *in, *out;

int im_LCh2Lab(in, out)
.br
IMAGE *in, *out;

int im_LCh2UCS(in, out)
.br
IMAGE *in, *out;

int im_UCS2LCh(in, out)
.br
IMAGE *in, *out;

.SH DESCRIPTION
Functions to convert images between the different colour spaces supported by
VIPS: RGB, sRGB, XYZ, Yxy, Lab, LCh and UCS. RGB and sRGB are three band uchar
files. XYZ, Lab, LCh and UCS are three band float files.

These are the basic conversion routines provided by VIPS. Other conversions,
such as im_Lab2disp(3), are built by composing these functions and are provided
as a convenience to the programmer.

The VIPS colour spaces inter-convert as follows:

                        +------- sRGB
                        |
  LabQ ----- Lab ----- XYZ ----- RGB
   |          |         |
   |          |         +------- Yxy
   |          |
   |          +------- LCh ----- UCS
   |
   +-------- LabS

The colour spaces are:

LabQ --- This is the principal VIPS colorimetric storage format. See
im_LabQ2Lab(3) for an explanation. You cannot perform calculations on LabQ
images. They are for storage only.

LabS --- This format represents coordinates in CIE Lab space as 16-bit
integers. It is the best format for computation, being relatively compact,
quick, and accurate. Colour values expressed in this way are hard to
visualise. See the page for im_LabQ2LabS().

Lab --- Coordinates in CIE Lab space are represented as float values in the
usual range. This is the easiest format for general work: adding 50 to the L
channel, for example, has the expected result.

XYZ --- CIE XYZ colour space.

Yxy --- CIE Yxy colour space.

RGB --- This format is compatible with the RGB colour systems used in other
packages. If you want to export your image to a PC, for example, convert your
colorimetric image to RGB, then turn it to TIFF with vips2TIFF(1). You need to
supply a structure which characterises your display. See the manual page for
im_col_XYZ2rgb(3) for hints on these guys.

sRGB --- This is a standard RGB, as defined by:

  http://www.color.org/contrib/sRGB.html

it's handy for carrying colour information through JPEG compressors, for
example.

LCh --- Like Lab, but the rectangular ab coordinates are replaced with the
polar Ch (Chroma and hue) coordinates. Hue angles are expressed in degrees.

UCS --- A colour space based on the CMC(1:1) colour difference measurement.
This is a highly uniform colour space, much better than Lab for expressing
small differences. Conversions to and from UCS are extremely slow.

These conversions set the Type field in the image header to LABQ, LABS, LAB,
XYZ, RGB, sRGB, LCH and UCS respectively. The Type field is for user
information only --- no function reads the Type field to determine its
behaviour.  Visualisation programs, such as ip(1), use the Type field to help
present the information to the user.

All VIPS colour spaces are based around D65.

VIPS has functions for finding colour difference images. See
im_dE_fromLab(3).

.SH RETURN VALUE
The functions return 0 on success and -1 on error.
.SH SEE ALSO
im_col_XYZ2rgb(3), im_dE_fromLab(3), im_LabQ2Lab(3), im_Lab2disp(3).
.SH COPYRIGHT
National Gallery and Birkbeck College, 1990 - 1993
.SH AUTHOR
K. Martinez \- 2/12/1992
.br
J. Cupitt \- 21/7/93
