#include <gandalf/image/image_channel.h>
Gandalf stores images with the channels combined for each pixel.
If you wish to extract a channel of an image as a separate image, Gandalf
provides the following function:
Gan_Image *pRGBImage; /* declare RGB image */
Gan_Image *pRedChannel; /* declare image storing red channel */
/* ... create and fill RGB image, create red channel image ... */
/* extract red channel from image */
gan_image_extract_channel_q ( pRGBImage, GAN_RED_CHANNEL,
0, 0, pRGBImage->height, pRGBImage->width,
pRedChannel );
The second argument specifies which channel is to be extracted.
The different options are described by the following enumerated type.
/**
* \brief Image channel types for extracting individual channels.
*/
typedef enum
{
/// for grey-level/alpha images
GAN_INTENSITY_CHANNEL,
///for RGB and RGB/alpha images
GAN_RED_CHANNEL, GAN_GREEN_CHANNEL, GAN_BLUE_CHANNEL,
/// for grey-level/alpha and RGB/alpha images
GAN_ALPHA_CHANNEL,
/// for 2D and 3D vector field images
GAN_X_CHANNEL,
/// likewise
GAN_Y_CHANNEL,
/// for 3D vector field images
GAN_Z_CHANNEL,
/// all channels
GAN_ALL_CHANNELS
} Gan_ImageChannelType;
The offset (3,4) and dimension (5,6) arguments allow a sub-region to
be extracted rather than the whole image, and work in the same way
as with gan_image_extract_q(). There is also a version which
extracts the channel as a new image:
pRedChannel = gan_image_extract_channel_s ( pRGBImage, GAN_RED_CHANNEL,
0, 0,
pRGBImage->height, pRGBImage->width );
There are also functions for filling a channel of an RGB image with a constant value. For instance
Gan_Pixel Pixel;
/* ... fill pRGBImage as an RGB unsigned character image ...*/
/* fill green channel of pRGBImage with constant value */
Pixel.format = GAN_GREY_LEVEL_IMAGE;
Pixel.type = GAN_UCHAR;
Pixel.data.gl.uc = 128;
gan_image_fill_channel_const ( pRGBImage, GAN_GREEN_CHANNEL, &Pixel );
sets the all the green pixel components to the value 128. Note that
the format of the pixel is set to grey-level, so defining a single channel
pixel. To set the channel to zero there is the macro
gan_image_fill_channel_zero ( pRGBImage, GAN_GREEN_CHANNEL );
instead.
Error detection: The gan_image_extract_channel_[qs]()
return a pointer to the result image, returning NULL and invoking
the Gandalf error handler on error. gan_image_fill_channel_const()
and
gan_image_fill_channel_zero() return a boolean value, so
GAN_FALSE is returned on error.