\section{The \texttt{VDisplay} class}

The \verb+VDisplay+ class is an abstraction over the VIPS \verb+im_col_display+
type which gives convenient and safe representation of VIPS display profiles.

VIPS display profiles are now mostly obsolete. You're better off using the
ICC colour management \verb+VImage+ member functions \verb+ICC_export()+ and 
\verb+ICC_import()+.

\subsection{Constructors}

There are two constructors for \verb+VDisplay+:

\begin{verbatim}
VDisplay( const char *name );
VDisplay();
\end{verbatim}

The first form initialises the display from one of the standard VIPS display
types. For example:

\begin{verbatim}
VDisplay fred( "sRGB" );
VDisplay jim( "ultra2-20/2/98" );
\end{verbatim}

Makes \verb+fred+ a profile for making images in sRGB format, and \verb+jim+ a
profile representing my workstation display, as of 20/2/98.  The second form
of constructor makes an uninitialised display.

\subsection{Projection functions}

A set of member functions of \verb+VDisplay+ provide read and write access to
the fields in the display.

\begin{verbatim}
char *name();
VDisplayType &type();
matrix &mat();
float &YCW();
float &xCW();
float &yCW();
float &YCR();
float &YCG();
float &YCB();
int &Vrwr();
int &Vrwg();
int &Vrwb();
float &Y0R();
float &Y0G();
float &Y0B();
float &gammaR();
float &gammaG();
float &gammaB();
float &B();
float &P();
\end{verbatim}

Where \verb+VDisplayType+ is defined as:

\begin{verbatim}
enum VDisplayType {
    BARCO,
    DUMB
};
\end{verbatim}

And \verb+matrix+ is defined as:

\begin{verbatim}
typedef float matrix[3][3];
\end{verbatim}

For a description of all the fields in a VIPS display profile, see the manual
page for \verb+im_XYZ2RGB()+.
