Table of Contents
rle_getrow - Read a scanline of pixels from an RLE file.
#include
<rle.h>
rle_getrow( the_hdr, rows );
rle_hdr * the_hdr;
rle_pixel ** rows;
Rle_getrow reads information for a single
scanline from the input file each time it is called. The_hdr should point
to the structure initialized by rle_get_setup(3)
. The array rows should
contain pointers to arrays of characters, into which the scanline data
will be written. There should be as many elements in rows as there are
primary colors in the input file (typically 1 or 3), and the scanline arrays
must be indexable up to the maximum X coordinate, as specified by the_hdr->xmax.
rle_getrow returns the y value of the scanline just read. This will always
be 1 greater than the y value from the scanline previously read, and starts
at the_hdr->ymin. Only those channels enabled by the_hdr->bits will be returned.
If an alpha channel is present in the input and enabled (by RLE_SET_BIT,
see rle_hdr(3)
), then rows should include a -1 entry. (I.e., rows[-1] should
point to a valid scanline array.) The easiest way to ensure this is to
use rle_row_alloc(3)
to allocate rows.
Rle_getrow will continue to return
scanlines even after the end of the input file has been reached, incrementing
the return scanline number each time it is called. The calling program
should use some other termination criterion (such as the scanline number
reaching the_hdr->ymax, or explicitly testing testing for end of file on
the input with feof(infile). The second test may fail if rle_getrow has
encountered a logical EOF in the file. The first will always work eventually.)
The code below reads the first two 3 color scanlines of 512 pixels
from an RLE file on the standard input.
char scanline[2][3][512], *rows[3];
int row, i;
rle_dflt_hdr.rle_file = stdin;
rle_get_setup( &rle_dflt_hdr );
for ( row = 0; row < 2; row++ )
{
for ( i = 0; i < 3; i++ )
rows[i] = scanline[row][i];
rle_getrow( &rle_dflt_hdr, rows );
}
rle_hdr(3)
, rle_row_alloc(3)
, rle_row_free(3)
, rle_get_setup(3)
,
rle_getraw(3)
, rle_getskip(3)
, rle_putrow(3)
, librle(3)
, RLE(5)
.
Spencer
W. Thomas, Todd Fuqua
University of Utah
Table of Contents