NAME
Image::Leptonica::Func::rotateorthlow
VERSION
version 0.04
rotateorthlow.c
rotateorthlow.c
90-degree rotation (cw)
void rotate90Low()
LR-flip
void flipLRLow()
TB-flip
void flipTBLow()
Byte reverse tables
l_uint8 *makeReverseByteTab1()
l_uint8 *makeReverseByteTab2()
l_uint8 *makeReverseByteTab4()
FUNCTIONS
flipLRLow
void flipLRLow ( l_uint32 *data, l_int32 w, l_int32 h, l_int32 d, l_int32 wpl, l_uint8 *tab, l_uint32 *buffer )
flipLRLow()
Notes:
(1) 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);
}
}
(2) This operation is in-place.
flipTBLow
void flipTBLow ( l_uint32 *data, l_int32 h, l_int32 wpl, l_uint32 *buffer )
flipTBLow()
Notes:
(1) This is simple and fast. We use the memcpy function
to do all the work on aligned data, regardless of pixel
depth.
(2) This operation is in-place.
makeReverseByteTab1
l_uint8 * makeReverseByteTab1 ( void )
makeReverseByteTab1()
Notes:
(1) This generates an 8 bit lookup table for reversing
the order of eight 1-bit pixels.
makeReverseByteTab2
l_uint8 * makeReverseByteTab2 ( void )
makeReverseByteTab2()
Notes:
(1) This generates an 8 bit lookup table for reversing
the order of four 2-bit pixels.
makeReverseByteTab4
l_uint8 * makeReverseByteTab4 ( void )
makeReverseByteTab4()
Notes:
(1) This generates an 8 bit lookup table for reversing
the order of two 4-bit pixels.
rotate90Low
void rotate90Low ( l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 d, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_int32 direction )
rotate90Low()
direction: 1 for cw rotation
-1 for ccw rotation
Notes:
(1) The dest must be cleared in advance because not
all source pixels are written to the destination.
AUTHOR
Zakariyya Mughal <zmughal@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2014 by Zakariyya Mughal.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.