54 #include <config_auto.h>
58 #include "allheaders.h"
79 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
80 if (quads < 0 || quads > 3)
81 return (
PIX *)ERROR_PTR(
"quads not in {0,1,2,3}", __func__, NULL);
128 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
129 d = pixGetDepth(pixs);
130 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
131 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
135 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
136 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
165 l_int32 wd, hd, d, wpls, wpld;
166 l_int32 i, j, k, m, iend, nswords;
168 l_uint32 *lines, *datas, *lined, *datad;
172 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
174 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
175 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
177 if (direction != 1 && direction != -1)
178 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
180 if ((pixd =
pixCreate(wd, hd, d)) == NULL)
181 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
183 pixCopyResolution(pixd, pixs);
184 pixCopyInputFormat(pixd, pixs);
188 wpls = pixGetWpl(pixs);
190 wpld = pixGetWpl(pixd);
192 if (direction == 1) {
196 for (i = 0; i < hd; i++) {
197 lined = datad + i * wpld;
198 lines = datas + (wd - 1) * wpls;
199 for (j = 0; j < wd; j++) {
206 for (i = 0; i < hd; i++) {
207 lined = datad + i * wpld;
208 lines = datas + (wd - 1) * wpls;
209 for (j = 0; j < wd; j++) {
217 for (i = 0; i < hd; i++) {
218 lined = datad + i * wpld;
219 lines = datas + (wd - 1) * wpls;
220 for (j = 0; j < wd; j++) {
228 for (i = 0; i < hd; i++) {
229 lined = datad + i * wpld;
230 lines = datas + (wd - 1) * wpls;
231 for (j = 0; j < wd; j++) {
239 for (i = 0; i < hd; i++) {
240 lined = datad + i * wpld;
241 lines = datas + (wd - 1) * wpls;
242 for (j = 0; j < wd; j++) {
251 for (j = 0; j < wd; j++) {
253 lines = datas + (wd - 1 - j) * wpls;
254 for (k = 0; k < nswords; k++) {
261 for (m = 0, i = 32 * k; i < iend; i++, m++) {
262 if ((word << m) & 0x80000000)
268 for (i = 32 * nswords; i < hd; i++) {
277 L_ERROR(
"illegal depth: %d\n", __func__, d);
284 for (i = 0; i < hd; i++) {
285 lined = datad + i * wpld;
287 for (j = 0; j < wd; j++) {
288 lined[j] = lines[hd - 1 - i];
294 for (i = 0; i < hd; i++) {
295 lined = datad + i * wpld;
297 for (j = 0; j < wd; j++) {
305 for (i = 0; i < hd; i++) {
306 lined = datad + i * wpld;
308 for (j = 0; j < wd; j++) {
316 for (i = 0; i < hd; i++) {
317 lined = datad + i * wpld;
319 for (j = 0; j < wd; j++) {
327 for (i = 0; i < hd; i++) {
328 lined = datad + i * wpld;
330 for (j = 0; j < wd; j++) {
339 for (j = 0; j < wd; j++) {
340 lined = datad + (hd - 1) * wpld;
341 lines = datas + (wd - 1 - j) * wpls;
342 for (k = 0; k < nswords; k++) {
349 for (m = 0, i = 32 * k; i < iend; i++, m++) {
350 if ((word << m) & 0x80000000)
356 for (i = 32 * nswords; i < hd; i++) {
365 L_ERROR(
"illegal depth: %d\n", __func__, d);
425 l_int32 w, h, d, wpl;
426 l_int32 extra, shift, databpl, bpl, i, j;
428 l_uint32 *line, *data, *buffer;
431 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
433 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
434 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
438 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
439 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
442 wpl = pixGetWpl(pixd);
460 if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl,
sizeof(l_uint32))) == NULL) {
461 if (tab) LEPT_FREE(tab);
462 return (
PIX *)ERROR_PTR(
"buffer not made", __func__, pixd);
469 for (i = 0; i < h; i++) {
470 line = data + i * wpl;
471 memcpy(buffer, line, bpl);
472 for (j = 0; j < w; j++)
473 line[j] = buffer[w - 1 - j];
477 for (i = 0; i < h; i++) {
478 line = data + i * wpl;
479 memcpy(buffer, line, bpl);
480 for (j = 0; j < w; j++) {
487 for (i = 0; i < h; i++) {
488 line = data + i * wpl;
489 memcpy(buffer, line, bpl);
490 for (j = 0; j < w; j++) {
497 extra = (w * d) & 31;
499 shift = 8 - extra / 4;
505 databpl = (w + 1) / 2;
506 for (i = 0; i < h; i++) {
507 line = data + i * wpl;
508 memcpy(buffer, line, bpl);
509 for (j = 0; j < databpl; j++) {
516 extra = (w * d) & 31;
518 shift = 16 - extra / 2;
524 databpl = (w + 3) / 4;
525 for (i = 0; i < h; i++) {
526 line = data + i * wpl;
527 memcpy(buffer, line, bpl);
528 for (j = 0; j < databpl; j++) {
535 extra = (w * d) & 31;
543 databpl = (w + 7) / 8;
544 for (i = 0; i < h; i++) {
545 line = data + i * wpl;
546 memcpy(buffer, line, bpl);
547 for (j = 0; j < databpl; j++) {
555 L_ERROR(
"illegal depth: %d\n", __func__, d);
560 if (tab) LEPT_FREE(tab);
600 l_int32 h, d, wpl, i, k, h2, bpl;
601 l_uint32 *linet, *lineb;
602 l_uint32 *data, *buffer;
605 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
607 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
608 return (
PIX *)ERROR_PTR(
"pixs not in {1,2,4,8,16,32} bpp",
612 if ((pixd =
pixCopy(pixd, pixs)) == NULL)
613 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
616 wpl = pixGetWpl(pixd);
617 if ((buffer = (l_uint32 *)LEPT_CALLOC(wpl,
sizeof(l_uint32))) == NULL)
618 return (
PIX *)ERROR_PTR(
"buffer not made", __func__, pixd);
622 for (i = 0, k = h - 1; i < h2; i++, k--) {
623 linet = data + i * wpl;
624 lineb = data + k * wpl;
625 memcpy(buffer, linet, bpl);
626 memcpy(linet, lineb, bpl);
627 memcpy(lineb, buffer, bpl);
651 tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8));
652 for (i = 0; i < 256; i++)
653 tab[i] = ((0x80 & i) >> 7) |
678 tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8));
679 for (i = 0; i < 256; i++)
680 tab[i] = ((0xc0 & i) >> 6) |
701 tab = (l_uint8 *)LEPT_CALLOC(256,
sizeof(l_uint8));
702 for (i = 0; i < 256; i++)
703 tab[i] = ((0xf0 & i) >> 4) | ((0x0f & i) << 4);
#define GET_DATA_QBIT(pdata, n)
#define GET_DATA_TWO_BYTES(pdata, n)
#define SET_DATA_BIT(pdata, n)
#define SET_DATA_DIBIT(pdata, n, val)
#define SET_DATA_TWO_BYTES(pdata, n, val)
#define GET_DATA_BYTE(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_BIT(pdata, n)
#define SET_DATA_QBIT(pdata, n, val)
l_uint32 * pixGetData(PIX *pix)
pixGetData()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_ok pixCopySpp(PIX *pixd, const PIX *pixs)
pixCopySpp()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
l_ok pixCopyColormap(PIX *pixd, const PIX *pixs)
pixCopyColormap()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
void rasteropHipLow(l_uint32 *data, l_int32 pixh, l_int32 depth, l_int32 wpl, l_int32 y, l_int32 h, l_int32 shift)
rasteropHipLow()
PIX * pixRotate180(PIX *pixd, PIX *pixs)
pixRotate180()
PIX * pixRotate90(PIX *pixs, l_int32 direction)
pixRotate90()
PIX * pixFlipLR(PIX *pixd, PIX *pixs)
pixFlipLR()
PIX * pixFlipTB(PIX *pixd, PIX *pixs)
pixFlipTB()
static l_uint8 * makeReverseByteTab1(void)
makeReverseByteTab1()
static l_uint8 * makeReverseByteTab2(void)
makeReverseByteTab2()
static l_uint8 * makeReverseByteTab4(void)
makeReverseByteTab4()
PIX * pixRotateOrth(PIX *pixs, l_int32 quads)
pixRotateOrth()