We can use the following to produce a cms with the same colors:
static Xv_singlecolor colors[ ] = {
{ 255, 255, 255, }, /* white */
{ 255, 0, 0 }, /* red */
{ 0, 255 0, }, /* green */
{ 0, 0, 255 }, /* blue */
};
cms = xv_create(NULL, CMS,
CMS_SIZE, 4,
CMS_COLORS, colors,
NULL);
Alternatively, you can use the attribute CMS_X_COLORS to specify an array of XColor struc-
tures, defined in <X11/Xlib.h> as:
typedef struct {
unsigned long pixel;
unsigned short red, green, blue;
char flags; /* do_red, do_green, do_blue */
char pad;
} XColor;
Here is a way to produce a colormap segment with the same colors but using an array of
XColors:
static XColor colors[ ] = {
/* white */ { 0, 255<<8, 255<<8, 255<<8, DoRed|DoGreen|DoBlue, 0 },
/* red */ { 0, 255<<8, 0, 0, DoRed|DoGreen|DoBlue, 0 },
/* green */ { 0, 0, 255<<8, 0, DoRed|DoGreen|DoBlue, 0 },
/* blue */ { 0, 0, 0, 255<<8, DoRed|DoGreen|DoBlue, 0 },
};
cms = xv_create(NULL, CMS,
CMS_SIZE, 4,
CMS_X_COLORS, colors,
NULL);
Note that the color values in the red, green, and blue fields of the XColor data structure are
left-shifted by 8. For more details on specifying colors with Xlib, see Volume One, Xlib Pro-
gramming Manual.
When storing colors, if the colormap segment type is static, XView uses XAllocColor().
If the colormap segment type is dynamic, XView uses XAllocColorCells() and
XStoreColors() to allocate a dynamic colormap and store the requested colors in it.
After setting colors in a cms, the pixel values for the colors can be retrieved. These pixel val-
ues are indices ...