54 #include "allheaders.h" 75 PROCNAME(
"pixRotateOrth");
78 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
79 if (quads < 0 || quads > 3)
80 return (
PIX *)ERROR_PTR(
"quads not in {0,1,2,3}", procName, NULL);
126 PROCNAME(
"pixRotate180");
129 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
130 d = pixGetDepth(pixs);
131 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
132 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
136 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
137 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
166 l_int32 wd, hd, d, wpls, wpld;
167 l_int32 i, j, k, m, iend, nswords;
169 l_uint32 *lines, *datas, *lined, *datad;
172 PROCNAME(
"pixRotate90");
175 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
177 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
178 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
180 if (direction != 1 && direction != -1)
181 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
183 if ((pixd =
pixCreate(wd, hd, d)) == NULL)
184 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
186 pixCopyResolution(pixd, pixs);
187 pixCopyInputFormat(pixd, pixs);
190 wpls = pixGetWpl(pixs);
192 wpld = pixGetWpl(pixd);
194 if (direction == 1) {
198 for (i = 0; i < hd; i++) {
199 lined = datad + i * wpld;
200 lines = datas + (wd - 1) * wpls;
201 for (j = 0; j < wd; j++) {
208 for (i = 0; i < hd; i++) {
209 lined = datad + i * wpld;
210 lines = datas + (wd - 1) * wpls;
211 for (j = 0; j < wd; j++) {
219 for (i = 0; i < hd; i++) {
220 lined = datad + i * wpld;
221 lines = datas + (wd - 1) * wpls;
222 for (j = 0; j < wd; j++) {
230 for (i = 0; i < hd; i++) {
231 lined = datad + i * wpld;
232 lines = datas + (wd - 1) * wpls;
233 for (j = 0; j < wd; j++) {
241 for (i = 0; i < hd; i++) {
242 lined = datad + i * wpld;
243 lines = datas + (wd - 1) * wpls;
244 for (j = 0; j < wd; j++) {
253 for (j = 0; j < wd; j++) {
255 lines = datas + (wd - 1 - j) * wpls;
256 for (k = 0; k < nswords; k++) {
263 for (m = 0, i = 32 * k; i < iend; i++, m++) {
264 if ((word << m) & 0x80000000)
270 for (i = 32 * nswords; i < hd; i++) {
279 L_ERROR(
"illegal depth: %d\n", procName, d);
286 for (i = 0; i < hd; i++) {
287 lined = datad + i * wpld;
289 for (j = 0; j < wd; j++) {
290 lined[j] = lines[hd - 1 - i];
296 for (i = 0; i < hd; i++) {
297 lined = datad + i * wpld;
299 for (j = 0; j < wd; j++) {
307 for (i = 0; i < hd; i++) {
308 lined = datad + i * wpld;
310 for (j = 0; j < wd; j++) {
318 for (i = 0; i < hd; i++) {
319 lined = datad + i * wpld;
321 for (j = 0; j < wd; j++) {
329 for (i = 0; i < hd; i++) {
330 lined = datad + i * wpld;
332 for (j = 0; j < wd; j++) {
341 for (j = 0; j < wd; j++) {
342 lined = datad + (hd - 1) * wpld;
343 lines = datas + (wd - 1 - j) * wpls;
344 for (k = 0; k < nswords; k++) {
351 for (m = 0, i = 32 * k; i < iend; i++, m++) {
352 if ((word << m) & 0x80000000)
358 for (i = 32 * nswords; i < hd; i++) {
367 L_ERROR(
"illegal depth: %d\n", procName, d);
427 l_int32 w, h, d, wpl;
428 l_int32 extra, shift, databpl, bpl, i, j;
430 l_uint32 *line, *data, *buffer;
432 PROCNAME(
"pixFlipLR");
435 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
437 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
438 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
442 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
443 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
446 wpl = pixGetWpl(pixd);
464 if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl,
sizeof(l_uint32))) == NULL) {
465 if (tab) LEPT_FREE(tab);
466 return (
PIX *)ERROR_PTR(
"buffer not made", procName, pixd);
473 for (i = 0; i < h; i++) {
474 line = data + i * wpl;
475 memcpy(buffer, line, bpl);
476 for (j = 0; j < w; j++)
477 line[j] = buffer[w - 1 - j];
481 for (i = 0; i < h; i++) {
482 line = data + i * wpl;
483 memcpy(buffer, line, bpl);
484 for (j = 0; j < w; j++) {
491 for (i = 0; i < h; i++) {
492 line = data + i * wpl;
493 memcpy(buffer, line, bpl);
494 for (j = 0; j < w; j++) {
501 extra = (w * d) & 31;
503 shift = 8 - extra / 4;
509 databpl = (w + 1) / 2;
510 for (i = 0; i < h; i++) {
511 line = data + i * wpl;
512 memcpy(buffer, line, bpl);
513 for (j = 0; j < databpl; j++) {
520 extra = (w * d) & 31;
522 shift = 16 - extra / 2;
528 databpl = (w + 3) / 4;
529 for (i = 0; i < h; i++) {
530 line = data + i * wpl;
531 memcpy(buffer, line, bpl);
532 for (j = 0; j < databpl; j++) {
539 extra = (w * d) & 31;
547 databpl = (w + 7) / 8;
548 for (i = 0; i < h; i++) {
549 line = data + i * wpl;
550 memcpy(buffer, line, bpl);
551 for (j = 0; j < databpl; j++) {
559 L_ERROR(
"illegal depth: %d\n", procName, d);
564 if (tab) LEPT_FREE(tab);
604 l_int32 h, d, wpl, i, k, h2, bpl;
605 l_uint32 *linet, *lineb;
606 l_uint32 *data, *buffer;
608 PROCNAME(
"pixFlipTB");
611 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
613 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
614 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
618 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
619 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
622 wpl = pixGetWpl(pixd);
623 if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl,
sizeof(l_uint32))) == NULL)
624 return (
PIX *)ERROR_PTR(
"buffer not made", procName, pixd);
628 for (i = 0, k = h - 1; i < h2; i++, k--) {
629 linet = data + i * wpl;
630 lineb = data + k * wpl;
631 memcpy(buffer, linet, bpl);
632 memcpy(linet, lineb, bpl);
633 memcpy(lineb, buffer, bpl);
657 PROCNAME(
"makeReverseByteTab1");
659 if ((tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8))) == NULL)
660 return (l_uint8 *)ERROR_PTR(
"calloc fail for tab", procName, NULL);
662 for (i = 0; i < 256; i++)
663 tab[i] = ((0x80 & i) >> 7) |
689 PROCNAME(
"makeReverseByteTab2");
691 if ((tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8))) == NULL)
692 return (l_uint8 *)ERROR_PTR(
"calloc fail for tab", procName, NULL);
694 for (i = 0; i < 256; i++)
695 tab[i] = ((0xc0 & i) >> 6) |
716 PROCNAME(
"makeReverseByteTab4");
718 if ((tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8))) == NULL)
719 return (l_uint8 *)ERROR_PTR(
"calloc fail for tab", procName, NULL);
721 for (i = 0; i < 256; i++)
722 tab[i] = ((0xf0 & i) >> 4) | ((0x0f & i) << 4);
PIX * pixFlipLR(PIX *pixd, PIX *pixs)
pixFlipLR()
static l_uint8 * makeReverseByteTab4(void)
makeReverseByteTab4()
static l_uint8 * makeReverseByteTab2(void)
makeReverseByteTab2()
PIX * pixRotate180(PIX *pixd, PIX *pixs)
pixRotate180()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
#define SET_DATA_QBIT(pdata, n, val)
l_uint32 * pixGetData(PIX *pix)
pixGetData()
#define GET_DATA_BIT(pdata, n)
static l_uint8 * makeReverseByteTab1(void)
makeReverseByteTab1()
#define SET_DATA_DIBIT(pdata, n, val)
PIX * pixFlipTB(PIX *pixd, PIX *pixs)
pixFlipTB()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
#define GET_DATA_BYTE(pdata, n)
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixCopyColormap(PIX *pixd, PIX *pixs)
pixCopyColormap()
PIX * pixRotateOrth(PIX *pixs, l_int32 quads)
pixRotateOrth()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift)
rasteropHipLow()
#define GET_DATA_TWO_BYTES(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
PIX * pixRotate90(PIX *pixs, l_int32 direction)
pixRotate90()
#define SET_DATA_TWO_BYTES(pdata, n, val)
#define SET_DATA_BIT(pdata, n)