NAME¶
vpSetImage - specify an image array
SYNOPSIS¶
#include <volpack.h>
vpResult
vpSetImage(vpc,
image, width, height, scan_bytes, pixel_type )
-
- vpContext *vpc;
-
- unsigned char *image;
-
- int width, height;
-
- int scan_bytes;
-
- int pixel_type;
ARGUMENTS¶
- vpc
- VolPack context from vpCreateContext.
- image
- 2D array for storing result images.
- width
- Width of image in pixels.
- height
- Height of image in pixels.
- scan_bytes
- Number of bytes per scanline in image array.
- pixel_type
- Code indicating the format of each pixel in the array.
DESCRIPTION¶
vpSetImage is used to specify a buffer for storing the result image
during rendering. The
width and
height parameters specify the
size of the result image. The clipping window (see vpWindow(3) or
vpWindowPHIGS(3)) is scaled to exactly match the specified size. The
scan_bytes argument specifies the size of a scanline in the image
array, in bytes. This argument can be used to add padding to the end of each
scanline to satisfy alignment restrictions (e.g. raster operations
sometimes require the beginning of each scanline to lie on a word boundary).
The
pixel_type argument specifies the format of a pixel. The following
formats are supported:
- VP_ALPHA
- Each pixel is one byte and contains an 8-bit alpha channel
(containing an opacity or coverage value for the pixel).
- VP_LUMINANCE
- Each pixel is one byte and contains an 8-bit grayscale
intensity.
- VP_LUMINANCEA
- Each pixel is two bytes and contains an 8-bit grayscale
intensity followed by an 8-bit alpha channel.
- VP_RGB
- Each pixel is three bytes and contains an RGB color (8
bits/channel). The R channel is stored first, followed by G and then
B.
- VP_RGBA
- Each pixel is four bytes and contains an RGBA color with an
alpha channel (8 bits/channel). The R channel is stored first, followed by
G, B and A.
- VP_BGR
- Each pixel is three bytes and contains an RGB color (8
bits/channel). The B channel is stored first, follow by G and then R.
- VP_ABGR
- Each pixel is four bytes and contains an RGBA color with an
alpha channel (8 bits/channel). The A channel is stored first, followed by
B, G and R.
The formats VP_LUMINANCE and VP_LUMINANCEA may only be used with grayscale
shaders (the
color_channels argument to
vpSetLookupShader must
be 1, or if you are using a callback function for shading you must use the
VP_GRAY_SHADE_FUNC argument to
vpSetCallback). The formats VP_RGB,
VP_RGBA, VP_BGR and VP_ABGR may only be used with color shaders. The format
VP_ALPHA may be used with either type of shader.
The size of the
image array must be:
-
- unsigned char image[height][scan_bytes];
The
scan_bytes argument must be at least
width times the number of
bytes per pixel. Pixels in a horizontal scanline are packed next to each
other, regardless of the size of the pixel. Any extra padding bytes at the end
of a scanline are not modified.
The alpha channel may be used to composite the rendered image against a
background image. Alpha gives the fraction of the background that is visible
through the rendered image (0 for fully visible, 255 for fully obscured). As
an example, to change the background color of the image to a solid color C,
modify the color of each pixel in the image according to the formula:
-
- color(x,y) += C * (1 - alpha(x,y)/255)
STATE VARIABLES¶
The current image array properties can be retrieved with the following state
variable codes (see vpGeti(3)): VP_IMAGE, VP_IMAGE_WIDTH, VP_IMAGE_HEIGHT,
VP_IMAGE_SCAN_SIZE, VP_PIXEL_TYPE.
ERRORS¶
The return value is always VP_OK.
SEE ALSO¶
VolPack(3), vpCreateContext(3), vpRenderRawVolume(3)