Leptonica
1.54
|
Функции | |
static l_uint8 * | makeReverseByteTab1 (void) |
static l_uint8 * | makeReverseByteTab2 (void) |
static l_uint8 * | makeReverseByteTab4 (void) |
PIX * | pixRotateOrth (PIX *pixs, l_int32 quads) |
PIX * | pixRotate180 (PIX *pixd, PIX *pixs) |
PIX * | pixRotate90 (PIX *pixs, l_int32 direction) |
PIX * | pixFlipLR (PIX *pixd, PIX *pixs) |
PIX * | pixFlipTB (PIX *pixd, PIX *pixs) |
static l_uint8 * makeReverseByteTab1 | ( | void | ) | [static] |
Notes: (1) This generates an 8 bit lookup table for reversing the order of eight 1-bit pixels.
static l_uint8 * makeReverseByteTab2 | ( | void | ) | [static] |
Notes: (1) This generates an 8 bit lookup table for reversing the order of four 2-bit pixels.
static l_uint8 * makeReverseByteTab4 | ( | void | ) | [static] |
Notes: (1) This generates an 8 bit lookup table for reversing the order of two 4-bit pixels.
Input: pixd (<optional>; can be null, equal to pixs, or different from pixs) pixs (all depths) Return: pixd, or null on error
Notes: (1) This does a left-right flip of the image, which is equivalent to a rotation out of the plane about a vertical line through the image center. (2) There are 3 cases for input: (a) pixd == null (creates a new pixd) (b) pixd == pixs (in-place operation) (c) pixd != pixs (existing pixd) (3) For clarity, use these three patterns, respectively: (a) pixd = pixFlipLR(NULL, pixs); (b) pixFlipLR(pixs, pixs); (c) pixFlipLR(pixd, pixs); (4) If an existing pixd is not the same size as pixs, the image data will be reallocated. (5) The pixel access routines allow a trivial implementation. However, for d < 8, it is more efficient to right-justify each line to a 32-bit boundary and then extract bytes and do pixel reversing. In those cases, as in the 180 degree rotation, we right-shift the data (if necessary) to right-justify on the 32 bit boundary, and then read the bytes off each raster line in reverse order, reversing the pixels in each byte using a table. These functions for 1, 2 and 4 bpp were tested against the "trivial" version (shown here for 4 bpp): for (i = 0; i < h; i++) { line = data + i * wpl; memcpy(buffer, line, bpl); for (j = 0; j < w; j++) { val = GET_DATA_QBIT(buffer, w - 1 - j); SET_DATA_QBIT(line, j, val); } }
Input: pixd (<optional>; can be null, equal to pixs, or different from pixs) pixs (all depths) Return: pixd, or null on error
Notes: (1) This does a top-bottom flip of the image, which is equivalent to a rotation out of the plane about a horizontal line through the image center. (2) There are 3 cases for input: (a) pixd == null (creates a new pixd) (b) pixd == pixs (in-place operation) (c) pixd != pixs (existing pixd) (3) For clarity, use these three patterns, respectively: (a) pixd = pixFlipTB(NULL, pixs); (b) pixFlipTB(pixs, pixs); (c) pixFlipTB(pixd, pixs); (4) If an existing pixd is not the same size as pixs, the image data will be reallocated. (5) This is simple and fast. We use the memcpy function to do all the work on aligned data, regardless of pixel depth.
PIX* pixRotate180 | ( | PIX * | pixd, |
PIX * | pixs | ||
) |
Input: pixd (<optional>; can be null, equal to pixs, or different from pixs) pixs (all depths) Return: pixd, or null on error
Notes: (1) This does a 180 rotation of the image about the center, which is equivalent to a left-right flip about a vertical line through the image center, followed by a top-bottom flip about a horizontal line through the image center. (2) There are 3 cases for input: (a) pixd == null (creates a new pixd) (b) pixd == pixs (in-place operation) (c) pixd != pixs (existing pixd) (3) For clarity, use these three patterns, respectively: (a) pixd = pixRotate180(NULL, pixs); (b) pixRotate180(pixs, pixs); (c) pixRotate180(pixd, pixs);
PIX* pixRotate90 | ( | PIX * | pixs, |
l_int32 | direction | ||
) |
Input: pixs (all depths) direction (1 = clockwise, -1 = counter-clockwise) Return: pixd, or null on error
Notes: (1) This does a 90 degree rotation of the image about the center, either cw or ccw, returning a new pix. (2) The direction must be either 1 (cw) or -1 (ccw).
PIX* pixRotateOrth | ( | PIX * | pixs, |
l_int32 | quads | ||
) |
Input: pixs (all depths) quads (0-3; number of 90 degree cw rotations) Return: pixd, or null on error