130 #include "allheaders.h" 132 static const l_uint32 rmask32[] = {0x0,
133 0x00000001, 0x00000003, 0x00000007, 0x0000000f,
134 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff,
135 0x000001ff, 0x000003ff, 0x000007ff, 0x00000fff,
136 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff,
137 0x0001ffff, 0x0003ffff, 0x0007ffff, 0x000fffff,
138 0x001fffff, 0x003fffff, 0x007fffff, 0x00ffffff,
139 0x01ffffff, 0x03ffffff, 0x07ffffff, 0x0fffffff,
140 0x1fffffff, 0x3fffffff, 0x7fffffff, 0xffffffff};
145 LEPT_DLL l_float32 AlphaMaskBorderVals[2] = {0.0, 0.5};
148 #ifndef NO_CONSOLE_IO 149 #define DEBUG_SERIALIZE 0 185 l_int32 w, h, d, wpl, val;
186 l_uint32 *line, *data;
188 PROCNAME(
"pixGetPixel");
191 return ERROR_INT(
"&val not defined", procName, 1);
194 return ERROR_INT(
"pix not defined", procName, 1);
197 if (x < 0 || x >= w || y < 0 || y >= h)
200 wpl = pixGetWpl(pix);
202 line = data + y * wpl;
224 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
256 l_int32 w, h, d, wpl;
257 l_uint32 *line, *data;
259 PROCNAME(
"pixSetPixel");
262 return ERROR_INT(
"pix not defined", procName, 1);
265 return ERROR_INT(
"x out of bounds", procName, 1);
267 return ERROR_INT(
"y out of bounds", procName, 1);
270 wpl = pixGetWpl(pix);
271 line = data + y * wpl;
296 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
321 l_int32 w, h, d, wpl;
322 l_uint32 *data, *ppixel;
324 PROCNAME(
"pixGetRGBPixel");
326 if (prval) *prval = 0;
327 if (pgval) *pgval = 0;
328 if (pbval) *pbval = 0;
329 if (!prval && !pgval && !pbval)
330 return ERROR_INT(
"no output requested", procName, 1);
332 return ERROR_INT(
"pix not defined", procName, 1);
335 return ERROR_INT(
"pix not 32 bpp", procName, 1);
337 return ERROR_INT(
"x out of bounds", procName, 1);
339 return ERROR_INT(
"y out of bounds", procName, 1);
341 wpl = pixGetWpl(pix);
343 ppixel = data + y * wpl + x;
369 l_int32 w, h, d, wpl;
371 l_uint32 *data, *line;
373 PROCNAME(
"pixSetRGBPixel");
376 return ERROR_INT(
"pix not defined", procName, 1);
379 return ERROR_INT(
"pix not 32 bpp", procName, 1);
381 return ERROR_INT(
"x out of bounds", procName, 1);
383 return ERROR_INT(
"y out of bounds", procName, 1);
385 wpl = pixGetWpl(pix);
387 line = data + y * wpl;
414 l_int32 w, h, x, y, rval, gval, bval;
418 PROCNAME(
"pixGetRandomPixel");
423 if (!pval && !px && !py)
424 return ERROR_INT(
"no output requested", procName, 1);
426 return ERROR_INT(
"pix not defined", procName, 1);
435 if ((cmap = pixGetColormap(pix)) != NULL) {
459 l_int32 w, h, d, wpl;
460 l_uint32 *line, *data;
462 PROCNAME(
"pixClearPixel");
465 return ERROR_INT(
"pix not defined", procName, 1);
468 return ERROR_INT(
"x out of bounds", procName, 1);
470 return ERROR_INT(
"y out of bounds", procName, 1);
472 wpl = pixGetWpl(pix);
474 line = data + y * wpl;
496 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
515 l_int32 w, h, d, wpl;
517 l_uint32 *line, *data;
519 PROCNAME(
"pixFlipPixel");
522 return ERROR_INT(
"pix not defined", procName, 1);
525 return ERROR_INT(
"x out of bounds", procName, 1);
527 return ERROR_INT(
"y out of bounds", procName, 1);
530 wpl = pixGetWpl(pix);
531 line = data + y * wpl;
562 val = line[x] ^ 0xffffffff;
566 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
617 fprintf(stderr,
"illegal depth in setPixelLow()\n");
651 PROCNAME(
"pixGetBlackOrWhiteVal");
654 return ERROR_INT(
"&val not defined", procName, 1);
657 return ERROR_INT(
"pixs not defined", procName, 1);
659 return ERROR_INT(
"invalid op", procName, 1);
661 cmap = pixGetColormap(pixs);
662 d = pixGetDepth(pixs);
668 val = (d == 32) ? 0xffffff00 : (1 << d) - 1;
702 PROCNAME(
"pixClearAll");
705 return ERROR_INT(
"pix not defined", procName, 1);
707 pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix),
734 PROCNAME(
"pixSetAll");
737 return ERROR_INT(
"pix not defined", procName, 1);
738 if ((cmap = pixGetColormap(pix)) != NULL) {
740 if (n < cmap->nalloc)
741 return ERROR_INT(
"cmap entry does not exist", procName, 1);
744 pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix),
775 l_int32 d, spp, index;
780 PROCNAME(
"pixSetAllGray");
783 return ERROR_INT(
"pix not defined", procName, 1);
785 L_WARNING(
"grayval < 0; setting to 0\n", procName);
787 }
else if (grayval > 255) {
788 L_WARNING(
"grayval > 255; setting to 255\n", procName);
793 cmap = pixGetColormap(pix);
801 d = pixGetDepth(pix);
802 spp = pixGetSpp(pix);
813 }
else if (d == 16) {
814 grayval |= (grayval << 8);
816 }
else if (d == 32 && spp == 3) {
819 }
else if (d == 32 && spp == 4) {
826 L_ERROR(
"invalid depth: %d\n", procName, d);
867 l_int32 n, i, j, w, h, d, wpl, npix;
868 l_uint32 maxval, wordval;
869 l_uint32 *data, *line;
872 PROCNAME(
"pixSetAllArbitrary");
875 return ERROR_INT(
"pix not defined", procName, 1);
879 if ((cmap = pixGetColormap(pix)) != NULL) {
882 L_WARNING(
"index not in colormap; using last color\n", procName);
891 maxval = (1 << d) - 1;
893 L_WARNING(
"val = %d too large for depth; using maxval = %d\n",
894 procName, val, maxval);
902 for (j = 0; j < npix; j++)
903 wordval |= (val << (j * d));
904 wpl = pixGetWpl(pix);
906 for (i = 0; i < h; i++) {
907 line = data + i * wpl;
908 for (j = 0; j < wpl; j++) {
909 *(line + j) = wordval;
940 PROCNAME(
"pixSetBlackOrWhite");
943 return ERROR_INT(
"pix not defined", procName, 1);
945 return ERROR_INT(
"invalid op", procName, 1);
947 cmap = pixGetColormap(pixs);
948 d = pixGetDepth(pixs);
986 l_uint32 mask1, mask2;
989 PROCNAME(
"pixSetComponentArbitrary");
991 if (!pix || pixGetDepth(pix) != 32)
992 return ERROR_INT(
"pix not defined or not 32 bpp", procName, 1);
995 return ERROR_INT(
"invalid component", procName, 1);
996 if (val < 0 || val > 255)
997 return ERROR_INT(
"val not in [0 ... 255]", procName, 1);
999 mask1 = ~(255 << (8 * (3 - comp)));
1000 mask2 = val << (8 * (3 - comp));
1001 nwords = pixGetHeight(pix) * pixGetWpl(pix);
1003 for (i = 0; i < nwords; i++) {
1036 PROCNAME(
"pixClearInRect");
1039 return ERROR_INT(
"pix not defined", procName, 1);
1041 return ERROR_INT(
"box not defined", procName, 1);
1069 l_int32 n, x, y, w, h;
1072 PROCNAME(
"pixSetInRect");
1075 return ERROR_INT(
"pix not defined", procName, 1);
1077 return ERROR_INT(
"box not defined", procName, 1);
1078 if ((cmap = pixGetColormap(pix)) != NULL) {
1080 if (n < cmap->nalloc)
1081 return ERROR_INT(
"cmap entry does not exist", procName, 1);
1112 l_int32 n, x, y, xstart, xend, ystart, yend, bw, bh, w, h, d, wpl, maxval;
1113 l_uint32 *data, *line;
1117 PROCNAME(
"pixSetInRectArbitrary");
1120 return ERROR_INT(
"pix not defined", procName, 1);
1122 return ERROR_INT(
"box not defined", procName, 1);
1124 if (d != 1 && d != 2 && d != 4 && d !=8 && d != 16 && d != 32)
1125 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
1126 if ((cmap = pixGetColormap(pix)) != NULL) {
1129 L_WARNING(
"index not in colormap; using last color\n", procName);
1134 maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1;
1135 if (val > maxval) val = maxval;
1143 (d == 2 && val == 3) ||
1144 (d == 4 && val == 0xf) ||
1145 (d == 8 && val == 0xff) ||
1146 (d == 16 && val == 0xffff) ||
1147 (d == 32 && ((val ^ 0xffffff00) >> 8 == 0))) {
1154 return ERROR_INT(
"no overlap of box with image", procName, 1);
1156 xend = xstart + bw - 1;
1157 yend = ystart + bh - 1;
1160 wpl = pixGetWpl(pix);
1162 for (y = ystart; y <= yend; y++) {
1163 line = data + y * wpl;
1164 for (x = xstart; x <= xend; x++) {
1183 return ERROR_INT(
"depth not 2|4|8|16|32 bpp", procName, 1);
1214 l_int32 i, j, bx, by, bw, bh, w, h, wpls;
1215 l_int32 prval, pgval, pbval, rval, gval, bval;
1217 l_uint32 *datas, *lines;
1219 PROCNAME(
"pixBlendInRect");
1221 if (!pixs || pixGetDepth(pixs) != 32)
1222 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
1227 wpls = pixGetWpl(pixs);
1229 for (i = 0; i < h; i++) {
1230 lines = datas + i * wpls;
1231 for (j = 0; j < w; j++) {
1232 val32 = *(lines + j);
1234 prval = (l_int32)((1. - fract) * prval + fract * rval);
1235 pgval = (l_int32)((1. - fract) * pgval + fract * gval);
1236 pbval = (l_int32)((1. - fract) * pbval + fract * bval);
1238 *(lines + j) = val32;
1245 for (i = 0; i < bh; i++) {
1246 if (by + i < 0 || by + i >= h)
continue;
1247 lines = datas + (by + i) * wpls;
1248 for (j = 0; j < bw; j++) {
1249 if (bx + j < 0 || bx + j >= w)
continue;
1250 val32 = *(lines + bx + j);
1252 prval = (l_int32)((1. - fract) * prval + fract * rval);
1253 pgval = (l_int32)((1. - fract) * pgval + fract * gval);
1254 pbval = (l_int32)((1. - fract) * pbval + fract * bval);
1256 *(lines + bx + j) = val32;
1298 l_int32 i, w, h, d, wpl, endbits, fullwords;
1300 l_uint32 *data, *pword;
1302 PROCNAME(
"pixSetPadBits");
1305 return ERROR_INT(
"pix not defined", procName, 1);
1312 wpl = pixGetWpl(pix);
1313 endbits = 32 - (((l_int64)w * d) % 32);
1316 fullwords = (1LL * w * d) / 32;
1317 mask = rmask32[endbits];
1321 for (i = 0; i < h; i++) {
1322 pword = data + i * wpl + fullwords;
1324 *pword = *pword & mask;
1326 *pword = *pword | mask;
1360 l_int32 i, w, h, d, wpl, endbits, fullwords;
1362 l_uint32 *data, *pword;
1364 PROCNAME(
"pixSetPadBitsBand");
1367 return ERROR_INT(
"pix not defined", procName, 1);
1376 return ERROR_INT(
"start y not in image", procName, 1);
1381 wpl = pixGetWpl(pix);
1382 endbits = 32 - (((l_int64)w * d) % 32);
1385 fullwords = (l_int64)w * d / 32;
1387 mask = rmask32[endbits];
1391 for (i = by; i < by + bh; i++) {
1392 pword = data + i * wpl + fullwords;
1394 *pword = *pword & mask;
1396 *pword = *pword | mask;
1436 PROCNAME(
"pixSetOrClearBorder");
1439 return ERROR_INT(
"pixs not defined", procName, 1);
1441 return ERROR_INT(
"op must be PIX_SET or PIX_CLR", procName, 1);
1445 pixRasterop(pixs, w - right, 0, right, h, op, NULL, 0, 0);
1447 pixRasterop(pixs, 0, h - bot, w, bot, op, NULL, 0, 0);
1483 l_int32 w, h, d, wpls, i, j, bstart, rstart;
1484 l_uint32 *datas, *lines;
1486 PROCNAME(
"pixSetBorderVal");
1489 return ERROR_INT(
"pixs not defined", procName, 1);
1491 if (d != 8 && d != 16 && d != 32)
1492 return ERROR_INT(
"depth must be 8, 16 or 32 bpp", procName, 1);
1495 wpls = pixGetWpl(pixs);
1498 for (i = 0; i < top; i++) {
1499 lines = datas + i * wpls;
1500 for (j = 0; j < w; j++)
1505 for (i = top; i < bstart; i++) {
1506 lines = datas + i * wpls;
1507 for (j = 0; j < left; j++)
1509 for (j = rstart; j < w; j++)
1512 for (i = bstart; i < h; i++) {
1513 lines = datas + i * wpls;
1514 for (j = 0; j < w; j++)
1517 }
else if (d == 16) {
1519 for (i = 0; i < top; i++) {
1520 lines = datas + i * wpls;
1521 for (j = 0; j < w; j++)
1526 for (i = top; i < bstart; i++) {
1527 lines = datas + i * wpls;
1528 for (j = 0; j < left; j++)
1530 for (j = rstart; j < w; j++)
1533 for (i = bstart; i < h; i++) {
1534 lines = datas + i * wpls;
1535 for (j = 0; j < w; j++)
1539 for (i = 0; i < top; i++) {
1540 lines = datas + i * wpls;
1541 for (j = 0; j < w; j++)
1546 for (i = top; i < bstart; i++) {
1547 lines = datas + i * wpls;
1548 for (j = 0; j < left; j++)
1550 for (j = rstart; j < w; j++)
1553 for (i = bstart; i < h; i++) {
1554 lines = datas + i * wpls;
1555 for (j = 0; j < w; j++)
1584 l_int32 w, h, d, i, j, xend, yend;
1586 PROCNAME(
"pixSetBorderRingVal");
1589 return ERROR_INT(
"pixs not defined", procName, 1);
1591 return ERROR_INT(
"dist must be > 0", procName, 1);
1593 if (w < 2 * dist + 1 || h < 2 * dist + 1)
1594 return ERROR_INT(
"ring doesn't exist", procName, 1);
1595 if (d < 32 && (val >= (1 << d)))
1596 return ERROR_INT(
"invalid pixel value", procName, 1);
1600 for (j = dist - 1; j <= xend; j++)
1602 for (j = dist - 1; j <= xend; j++)
1604 for (i = dist - 1; i <= yend; i++)
1606 for (i = dist - 1; i <= yend; i++)
1639 PROCNAME(
"pixSetMirroredBorder");
1642 return ERROR_INT(
"pixs not defined", procName, 1);
1645 for (j = 0; j < left; j++)
1647 pixs, left + j, top);
1648 for (j = 0; j < right; j++)
1650 pixs, w - right - 1 - j, top);
1651 for (i = 0; i < top; i++)
1654 for (i = 0; i < bot; i++)
1656 pixs, 0, h - bot - 1 - i);
1691 PROCNAME(
"pixCopyBorder");
1694 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
1698 L_WARNING(
"same: nothing to do\n", procName);
1701 return (
PIX *)ERROR_PTR(
"pixs and pixd sizes differ",
1706 return (
PIX *)ERROR_PTR(
"pixd not made", procName, pixd);
1740 PROCNAME(
"pixAddBorder");
1743 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1785 PROCNAME(
"pixAddBlackOrWhiteBorder");
1788 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1790 return (
PIX *)ERROR_PTR(
"invalid op", procName, NULL);
1837 l_int32 ws, hs, wd, hd, d, maxval, op;
1840 PROCNAME(
"pixAddBorderGeneral");
1843 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1844 if (left < 0 || right < 0 || top < 0 || bot < 0)
1845 return (
PIX *)ERROR_PTR(
"negative border added!", procName, NULL);
1848 wd = ws + left + right;
1849 hd = hs + top + bot;
1851 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1852 pixCopyResolution(pixd, pixs);
1856 maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1;
1860 else if (val >= maxval)
1865 pixRasterop(pixd, 0, 0, left, hd, op, NULL, 0, 0);
1866 pixRasterop(pixd, wd - right, 0, right, hd, op, NULL, 0, 0);
1868 pixRasterop(pixd, 0, hd - bot, wd, bot, op, NULL, 0, 0);
1888 PROCNAME(
"pixRemoveBorder");
1891 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1912 l_int32 ws, hs, wd, hd, d;
1915 PROCNAME(
"pixRemoveBorderGeneral");
1918 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1919 if (left < 0 || right < 0 || top < 0 || bot < 0)
1920 return (
PIX *)ERROR_PTR(
"negative border removed!", procName, NULL);
1923 wd = ws - left - right;
1924 hd = hs - top - bot;
1926 return (
PIX *)ERROR_PTR(
"width must be > 0", procName, NULL);
1928 return (
PIX *)ERROR_PTR(
"height must be > 0", procName, NULL);
1930 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1931 pixCopyResolution(pixd, pixs);
1936 if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4)
1963 l_int32 w, h, top, bot, left, right, delta;
1965 PROCNAME(
"pixRemoveBorderToSize");
1968 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1971 if ((wd <= 0 || wd >= w) && (hd <= 0 || hd >= h))
1974 left = right = (w - wd) / 2;
1975 delta = w - 2 * left - wd;
1977 top = bot = (h - hd) / 2;
1978 delta = h - hd - 2 * top;
1980 if (wd <= 0 || wd > w)
1982 else if (hd <= 0 || hd > h)
2023 PROCNAME(
"pixAddMirroredBorder");
2026 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2028 if (left > w || right > w || top > h || bot > h)
2029 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2033 for (j = 0; j < left; j++)
2035 pixd, left + j, top);
2036 for (j = 0; j < right; j++)
2038 pixd, left + w - 1 - j, top);
2039 for (i = 0; i < top; i++)
2042 for (i = 0; i < bot; i++)
2044 pixd, 0, top + h - 1 - i);
2076 PROCNAME(
"pixAddRepeatedBorder");
2079 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2081 if (left > w || right > w || top > h || bot > h)
2082 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2132 PROCNAME(
"pixAddMixedBorder");
2135 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2137 if (left > w || right > w || top > h || bot > h)
2138 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2143 for (j = 0; j < left; j++)
2145 pixd, left + j, top);
2146 for (j = 0; j < right; j++)
2148 pixd, left + w - 1 - j, top);
2179 PROCNAME(
"pixAddContinuedBorder");
2182 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2186 for (j = 0; j < left; j++)
2188 for (j = 0; j < right; j++)
2190 PIX_SRC, pixd, left + w - 1, top);
2191 for (i = 0; i < top; i++)
2193 for (i = 0; i < bot; i++)
2194 pixRasterop(pixd, 0, top + h + i, left + w + right, 1,
2195 PIX_SRC, pixd, 0, top + h - 1);
2221 PROCNAME(
"pixShiftAndTransferAlpha");
2224 return ERROR_INT(
"pixs and pixd not both defined", procName, 1);
2225 if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4)
2226 return ERROR_INT(
"pixs not 32 bpp and 4 spp", procName, 1);
2227 if (pixGetDepth(pixd) != 32)
2228 return ERROR_INT(
"pixd not 32 bpp", procName, 1);
2230 if (shiftx == 0 && shifty == 0) {
2269 l_float32 scalefact;
2270 PIX *pix1, *pix2, *pixd;
2274 PROCNAME(
"pixDisplayLayersRGBA");
2277 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2278 cmap = pixGetColormap(pixs);
2279 if (!cmap && !(pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4))
2280 return (
PIX *)ERROR_PTR(
"pixs not cmap and not 32 bpp rgba",
2282 if ((w = pixGetWidth(pixs)) == 0)
2283 return (
PIX *)ERROR_PTR(
"pixs width 0 !!", procName, NULL);
2291 scalefact = (maxw == 0) ? 1.0 : L_MIN(1.0, (l_float32)(maxw) / w);
2292 width = (l_int32)(scalefact * w);
2340 l_int32 wr, wg, wb, hr, hg, hb, dr, dg, db;
2343 PROCNAME(
"pixCreateRGBImage");
2346 return (
PIX *)ERROR_PTR(
"pixr not defined", procName, NULL);
2348 return (
PIX *)ERROR_PTR(
"pixg not defined", procName, NULL);
2350 return (
PIX *)ERROR_PTR(
"pixb not defined", procName, NULL);
2354 if (dr != 8 || dg != 8 || db != 8)
2355 return (
PIX *)ERROR_PTR(
"input pix not all 8 bpp", procName, NULL);
2356 if (wr != wg || wr != wb)
2357 return (
PIX *)ERROR_PTR(
"widths not the same", procName, NULL);
2358 if (hr != hg || hr != hb)
2359 return (
PIX *)ERROR_PTR(
"heights not the same", procName, NULL);
2361 if ((pixd =
pixCreate(wr, hr, 32)) == NULL)
2362 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2363 pixCopyResolution(pixd, pixr);
2395 l_int32 i, j, w, h, wpls, wpld, val;
2396 l_uint32 *lines, *lined;
2397 l_uint32 *datas, *datad;
2400 PROCNAME(
"pixGetRGBComponent");
2403 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2404 if (pixGetColormap(pixs))
2406 if (pixGetDepth(pixs) != 32)
2407 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
2410 return (
PIX *)ERROR_PTR(
"invalid comp", procName, NULL);
2413 if ((pixd =
pixCreate(w, h, 8)) == NULL)
2414 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2415 pixCopyResolution(pixd, pixs);
2416 wpls = pixGetWpl(pixs);
2417 wpld = pixGetWpl(pixd);
2420 for (i = 0; i < h; i++) {
2421 lines = datas + i * wpls;
2422 lined = datad + i * wpld;
2423 for (j = 0; j < w; j++) {
2456 l_int32 i, j, w, h, ws, hs, wd, hd;
2458 l_uint32 *lines, *lined;
2459 l_uint32 *datas, *datad;
2461 PROCNAME(
"pixSetRGBComponent");
2464 return ERROR_INT(
"pixd not defined", procName, 1);
2466 return ERROR_INT(
"pixs not defined", procName, 1);
2467 if (pixGetDepth(pixd) != 32)
2468 return ERROR_INT(
"pixd not 32 bpp", procName, 1);
2469 if (pixGetDepth(pixs) != 8)
2470 return ERROR_INT(
"pixs not 8 bpp", procName, 1);
2473 return ERROR_INT(
"invalid comp", procName, 1);
2476 if (ws != wd || hs != hd)
2477 L_WARNING(
"images sizes not equal\n", procName);
2484 wpls = pixGetWpl(pixs);
2485 wpld = pixGetWpl(pixd);
2486 for (i = 0; i < h; i++) {
2487 lines = datas + i * wpls;
2488 lined = datad + i * wpld;
2489 for (j = 0; j < w; j++) {
2516 l_int32 i, j, w, h, val, index;
2518 l_uint32 *linec, *lined;
2519 l_uint32 *datac, *datad;
2524 PROCNAME(
"pixGetRGBComponentCmap");
2527 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2528 if ((cmap = pixGetColormap(pixs)) == NULL)
2529 return (
PIX *)ERROR_PTR(
"pixs not cmapped", procName, NULL);
2531 return (
PIX *)ERROR_PTR(
"alpha in cmaps not supported", procName, NULL);
2533 return (
PIX *)ERROR_PTR(
"invalid comp", procName, NULL);
2536 if (pixGetDepth(pixs) == 8)
2544 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2546 pixCopyResolution(pixd, pixs);
2547 wplc = pixGetWpl(pixc);
2548 wpld = pixGetWpl(pixd);
2553 for (i = 0; i < h; i++) {
2554 linec = datac + i * wplc;
2555 lined = datad + i * wpld;
2557 for (j = 0; j < w; j++) {
2559 val = cta[index].
red;
2563 for (j = 0; j < w; j++) {
2565 val = cta[index].
green;
2569 for (j = 0; j < w; j++) {
2571 val = cta[index].
blue;
2602 l_int32 i, j, w, h, ws, hs, wd, hd, val;
2604 l_uint32 *lines, *lined;
2605 l_uint32 *datas, *datad;
2607 PROCNAME(
"pixCopyRGBComponent");
2609 if (!pixd && pixGetDepth(pixd) != 32)
2610 return ERROR_INT(
"pixd not defined or not 32 bpp", procName, 1);
2611 if (!pixs && pixGetDepth(pixs) != 32)
2612 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
2615 return ERROR_INT(
"invalid component", procName, 1);
2618 if (ws != wd || hs != hd)
2619 L_WARNING(
"images sizes not equal\n", procName);
2624 wpls = pixGetWpl(pixs);
2625 wpld = pixGetWpl(pixd);
2628 for (i = 0; i < h; i++) {
2629 lines = datas + i * wpls;
2630 lined = datad + i * wpld;
2631 for (j = 0; j < w; j++) {
2664 PROCNAME(
"composeRGBPixel");
2667 return ERROR_INT(
"&pixel not defined", procName, 1);
2669 *ppixel = (rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) |
2670 (bval << L_BLUE_SHIFT);
2696 PROCNAME(
"composeRGBAPixel");
2699 return ERROR_INT(
"&pixel not defined", procName, 1);
2701 *ppixel = (rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) |
2702 (bval << L_BLUE_SHIFT) | aval;
2730 if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff;
2731 if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff;
2732 if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff;
2754 if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff;
2755 if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff;
2756 if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff;
2757 if (paval) *paval = (pixel >> L_ALPHA_SHIFT) & 0xff;
2773 l_int32 rval, gval, bval, val;
2776 if (type == L_CHOOSE_MIN) {
2777 val = L_MIN(rval, gval);
2778 val = L_MIN(val, bval);
2780 val = L_MAX(rval, gval);
2781 val = L_MAX(val, bval);
2814 PROCNAME(
"pixGetRGBLine");
2817 return ERROR_INT(
"pixs not defined", procName, 1);
2818 if (pixGetDepth(pixs) != 32)
2819 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
2820 if (!bufr || !bufg || !bufb)
2821 return ERROR_INT(
"buffer not defined", procName, 1);
2824 if (row < 0 || row >= h)
2825 return ERROR_INT(
"row out of bounds", procName, 1);
2826 wpls = pixGetWpl(pixs);
2829 for (j = 0; j < w; j++) {
2869 l_uint32 *datas, *datad;
2870 l_int32 i, j, h, wpl;
2874 PROCNAME(
"pixEndianByteSwapNew");
2883 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2886 wpl = pixGetWpl(pixs);
2887 h = pixGetHeight(pixs);
2890 for (i = 0; i < h; i++) {
2891 for (j = 0; j < wpl; j++, datas++, datad++) {
2893 *datad = (word >> 24) |
2894 ((word >> 8) & 0x0000ff00) |
2895 ((word << 8) & 0x00ff0000) |
2933 l_int32 i, j, h, wpl;
2936 PROCNAME(
"pixEndianByteSwap");
2945 return ERROR_INT(
"pixs not defined", procName, 1);
2948 wpl = pixGetWpl(pixs);
2949 h = pixGetHeight(pixs);
2950 for (i = 0; i < h; i++) {
2951 for (j = 0; j < wpl; j++, data++) {
2953 *data = (word >> 24) |
2954 ((word >> 8) & 0x0000ff00) |
2955 ((word << 8) & 0x00ff0000) |
2993 PROCNAME(
"lineEndianByteSwap");
2995 if (!datad || !datas)
2996 return ERROR_INT(
"datad and datas not both defined", procName, 1);
3000 memcpy((
char *)datad, (
char *)datas, 4 * wpl);
3005 for (j = 0; j < wpl; j++, datas++, datad++) {
3007 *datad = (word >> 24) |
3008 ((word >> 8) & 0x0000ff00) |
3009 ((word << 8) & 0x00ff0000) |
3041 l_uint32 *datas, *datad;
3042 l_int32 i, j, h, wpl;
3046 PROCNAME(
"pixEndianTwoByteSwapNew");
3055 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
3058 wpl = pixGetWpl(pixs);
3059 h = pixGetHeight(pixs);
3062 for (i = 0; i < h; i++) {
3063 for (j = 0; j < wpl; j++, datas++, datad++) {
3065 *datad = (word << 16) | (word >> 16);
3095 l_int32 i, j, h, wpl;
3098 PROCNAME(
"pixEndianTwoByteSwap");
3107 return ERROR_INT(
"pixs not defined", procName, 1);
3110 wpl = pixGetWpl(pixs);
3111 h = pixGetHeight(pixs);
3112 for (i = 0; i < h; i++) {
3113 for (j = 0; j < wpl; j++, data++) {
3115 *data = (word << 16) | (word >> 16);
3150 l_int32 w, h, d, wpl, i, j, rval, gval, bval;
3152 l_uint8 *line, *data;
3153 l_uint32 *rline, *rdata;
3155 PROCNAME(
"pixGetRasterData");
3157 if (pdata) *pdata = NULL;
3158 if (pnbytes) *pnbytes = 0;
3159 if (!pdata || !pnbytes)
3160 return ERROR_INT(
"&data and &nbytes not both defined", procName, 1);
3162 return ERROR_INT(
"pixs not defined", procName, 1);
3164 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
3165 return ERROR_INT(
"depth not in {1,2,4,8,16,32}", procName, 1);
3167 wpl = pixGetWpl(pixs);
3169 databpl = (w + 7) / 8;
3171 databpl = (w + 3) / 4;
3173 databpl = (w + 1) / 2;
3174 else if (d == 8 || d == 16)
3175 databpl = w * (d / 8);
3178 if ((data = (l_uint8 *)LEPT_CALLOC(databpl * h,
sizeof(l_uint8))) == NULL)
3179 return ERROR_INT(
"data not allocated", procName, 1);
3181 *pnbytes = databpl * h;
3183 for (i = 0; i < h; i++) {
3184 rline = rdata + i * wpl;
3185 line = data + i * databpl;
3187 for (j = 0; j < databpl; j++)
3189 }
else if (d == 16) {
3190 for (j = 0; j < w; j++)
3193 for (j = 0; j < w; j++) {
3195 *(line + 3 * j) = rval;
3196 *(line + 3 * j + 1) = gval;
3197 *(line + 3 * j + 2) = bval;
3223 l_int32 w, h, wpl, i, j, alpha;
3224 l_uint32 *data, *line;
3226 PROCNAME(
"pixAlphaIsOpaque");
3229 return ERROR_INT(
"&opaque not defined", procName, 1);
3232 return ERROR_INT(
"&pix not defined", procName, 1);
3233 if (pixGetDepth(pix) != 32)
3234 return ERROR_INT(
"&pix not 32 bpp", procName, 1);
3235 if (pixGetSpp(pix) != 4)
3236 return ERROR_INT(
"&pix not 4 spp", procName, 1);
3239 wpl = pixGetWpl(pix);
3241 for (i = 0; i < h; i++) {
3242 line = data + i * wpl;
3243 for (j = 0; j < w; j++) {
3291 PROCNAME(
"pixSetupByteProcessing");
3295 if (!pix || pixGetDepth(pix) != 8)
3296 return (l_uint8 **)ERROR_PTR(
"pix not defined or not 8 bpp",
3301 if (pixGetColormap(pix))
3302 return (l_uint8 **)ERROR_PTR(
"pix has colormap", procName, NULL);
3326 PROCNAME(
"pixCleanupByteProcessing");
3329 return ERROR_INT(
"pix not defined", procName, 1);
3331 return ERROR_INT(
"lineptrs not defined", procName, 1);
3334 LEPT_FREE(lineptrs);
3368 val1 = L_MAX(0.0, L_MIN(1.0, val1));
3369 val2 = L_MAX(0.0, L_MIN(1.0, val2));
3370 AlphaMaskBorderVals[0] = val1;
3371 AlphaMaskBorderVals[1] = val2;
l_int32 lineEndianByteSwap(l_uint32 *datad, l_uint32 *datas, l_int32 wpl)
lineEndianByteSwap()
l_int32 pixCopyColormap(PIX *pixd, PIX *pixs)
pixCopyColormap()
PIX * pixAddMixedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddMixedBorder()
l_int32 pixSetPadBitsBand(PIX *pix, l_int32 by, l_int32 bh, l_int32 val)
pixSetPadBitsBand()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
l_int32 pixEndianByteSwap(PIX *pixs)
pixEndianByteSwap()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_int32 pixClearInRect(PIX *pix, BOX *box)
pixClearInRect()
PIX * pixRemoveBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixRemoveBorderGeneral()
l_int32 pixSetComponentArbitrary(PIX *pix, l_int32 comp, l_int32 val)
pixSetComponentArbitrary()
l_int32 pixEndianTwoByteSwap(PIX *pixs)
pixEndianTwoByteSwap()
void extractRGBAValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval)
extractRGBAValues()
l_int32 pixShiftAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty)
pixShiftAndTransferAlpha()
l_int32 pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_int32 pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixSetRGBComponent()
l_int32 pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
void setPixelLow(l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val)
setPixelLow()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
l_int32 pixGetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixGetRGBPixel()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_int32 pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixSetOrClearBorder()
l_int32 pixAlphaIsOpaque(PIX *pix, l_int32 *popaque)
pixAlphaIsOpaque()
#define SET_DATA_QBIT(pdata, n, val)
l_int32 composeRGBAPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel)
composeRGBAPixel()
PIX * pixAddMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddMirroredBorder()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * pixAddBlackOrWhiteBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixAddBlackOrWhiteBorder()
l_int32 pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
l_int32 pixClearPixel(PIX *pix, l_int32 x, l_int32 y)
pixClearPixel()
l_int32 pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex)
pixcmapAddBlackOrWhite()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
l_int32 pixSetBorderVal(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixSetBorderVal()
#define SET_DATA_DIBIT(pdata, n, val)
l_int32 pixGetBlackOrWhiteVal(PIX *pixs, l_int32 op, l_uint32 *pval)
pixGetBlackOrWhiteVal()
l_int32 pixGetRasterData(PIX *pixs, l_uint8 **pdata, size_t *pnbytes)
pixGetRasterData()
#define CLEAR_DATA_BIT(pdata, n)
l_int32 pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy)
pixRasterop()
PIX * pixEndianTwoByteSwapNew(PIX *pixs)
pixEndianTwoByteSwapNew()
PIX * pixAlphaBlendUniform(PIX *pixs, l_uint32 color)
pixAlphaBlendUniform()
l_int32 pixFlipPixel(PIX *pix, l_int32 x, l_int32 y)
pixFlipPixel()
PIX * pixRemoveBorder(PIX *pixs, l_int32 npix)
pixRemoveBorder()
l_int32 pixCopySpp(PIX *pixd, PIX *pixs)
pixCopySpp()
static const l_int32 L_INSERT
l_uint8 ** pixSetupByteProcessing(PIX *pix, l_int32 *pw, l_int32 *ph)
pixSetupByteProcessing()
l_int32 pixGetRandomPixel(PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py)
pixGetRandomPixel()
#define CLEAR_DATA_DIBIT(pdata, n)
l_int32 pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_int32 pixSetPadBits(PIX *pix, l_int32 val)
pixSetPadBits()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
l_int32 pixClearAll(PIX *pix)
pixClearAll()
l_int32 extractMinMaxComponent(l_uint32 pixel, l_int32 type)
extractMinMaxComponent()
#define SET_DATA_BYTE(pdata, n, val)
l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
#define GET_DATA_QBIT(pdata, n)
l_int32 pixSizesEqual(PIX *pix1, PIX *pix2)
pixSizesEqual()
#define CLEAR_DATA_QBIT(pdata, n)
#define GET_DATA_BYTE(pdata, n)
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
PIX * pixAddContinuedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddContinuedBorder()
PIX * pixCreateNoInit(l_int32 width, l_int32 height, l_int32 depth)
pixCreateNoInit()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
PIX * pixGetRGBComponentCmap(PIX *pixs, l_int32 comp)
pixGetRGBComponentCmap()
l_int32 pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapAddNearestColor()
l_int32 pixCopyRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixCopyRGBComponent()
PIX * pixEndianByteSwapNew(PIX *pixs)
pixEndianByteSwapNew()
PIX * pixAddRepeatedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddRepeatedBorder()
l_int32 pixGetRGBLine(PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb)
pixGetRGBLine()
l_int32 pixSetBlackOrWhite(PIX *pixs, l_int32 op)
pixSetBlackOrWhite()
l_int32 pixSetInRect(PIX *pix, BOX *box)
pixSetInRect()
void l_setAlphaMaskBorder(l_float32 val1, l_float32 val2)
l_setAlphaMaskBorder()
l_int32 pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_int32 pixSetBorderRingVal(PIX *pixs, l_int32 dist, l_uint32 val)
pixSetBorderRingVal()
#define GET_DATA_TWO_BYTES(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
l_int32 pixSetMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixSetMirroredBorder()
l_int32 composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
PIX * pixDisplayLayersRGBA(PIX *pixs, l_uint32 val, l_int32 maxw)
pixDisplayLayersRGBA()
l_int32 pixcmapGetCount(PIXCMAP *cmap)
pixcmapGetCount()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
l_int32 pixCleanupByteProcessing(PIX *pix, l_uint8 **lineptrs)
pixCleanupByteProcessing()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 pixSetAll(PIX *pix)
pixSetAll()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_int32 pixSetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval)
pixSetRGBPixel()
PIX * pixRemoveBorderToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixRemoveBorderToSize()
l_int32 pixSetInRectArbitrary(PIX *pix, BOX *box, l_uint32 val)
pixSetInRectArbitrary()
l_int32 pixSetAllGray(PIX *pix, l_int32 grayval)
pixSetAllGray()
#define SET_DATA_TWO_BYTES(pdata, n, val)
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
PIX * pixCopyBorder(PIX *pixd, PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixCopyBorder()
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
#define SET_DATA_BIT(pdata, n)
PIX * pixAddBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixAddBorderGeneral()
l_int32 pixBlendInRect(PIX *pixs, BOX *box, l_uint32 val, l_float32 fract)
pixBlendInRect()