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);
258 l_int32 w, h, d, wpl;
259 l_uint32 *line, *data;
261 PROCNAME(
"pixSetPixel");
264 return ERROR_INT(
"pix not defined", procName, 1);
266 if (x < 0 || x >= w || y < 0 || y >= h)
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);
325 l_int32 w, h, d, wpl;
326 l_uint32 *data, *ppixel;
328 PROCNAME(
"pixGetRGBPixel");
330 if (prval) *prval = 0;
331 if (pgval) *pgval = 0;
332 if (pbval) *pbval = 0;
333 if (!prval && !pgval && !pbval)
334 return ERROR_INT(
"no output requested", procName, 1);
336 return ERROR_INT(
"pix not defined", procName, 1);
339 return ERROR_INT(
"pix not 32 bpp", procName, 1);
340 if (x < 0 || x >= w || y < 0 || y >= h)
343 wpl = pixGetWpl(pix);
345 ppixel = data + y * wpl + x;
375 l_int32 w, h, d, wpl;
377 l_uint32 *data, *line;
379 PROCNAME(
"pixSetRGBPixel");
382 return ERROR_INT(
"pix not defined", procName, 1);
385 return ERROR_INT(
"pix not 32 bpp", procName, 1);
386 if (x < 0 || x >= w || y < 0 || y >= h)
389 wpl = pixGetWpl(pix);
391 line = data + y * wpl;
418 l_int32 w, h, x, y, rval, gval, bval;
422 PROCNAME(
"pixGetRandomPixel");
427 if (!pval && !px && !py)
428 return ERROR_INT(
"no output requested", procName, 1);
430 return ERROR_INT(
"pix not defined", procName, 1);
439 if ((cmap = pixGetColormap(pix)) != NULL) {
467 l_int32 w, h, d, wpl;
468 l_uint32 *line, *data;
470 PROCNAME(
"pixClearPixel");
473 return ERROR_INT(
"pix not defined", procName, 1);
474 if (pixGetColormap(pix))
475 L_WARNING(
"cmapped: setting to 0 may not be intended\n", procName);
477 if (x < 0 || x >= w || y < 0 || y >= h)
480 wpl = pixGetWpl(pix);
482 line = data + y * wpl;
504 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
527 l_int32 w, h, d, wpl;
529 l_uint32 *line, *data;
531 PROCNAME(
"pixFlipPixel");
534 return ERROR_INT(
"pix not defined", procName, 1);
535 if (pixGetColormap(pix))
536 L_WARNING(
"cmapped: setting to 0 may not be intended\n", procName);
538 if (x < 0 || x >= w || y < 0 || y >= h)
542 wpl = pixGetWpl(pix);
543 line = data + y * wpl;
574 val = line[x] ^ 0xffffffff;
578 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
629 fprintf(stderr,
"illegal depth in setPixelLow()\n");
663 PROCNAME(
"pixGetBlackOrWhiteVal");
666 return ERROR_INT(
"&val not defined", procName, 1);
669 return ERROR_INT(
"pixs not defined", procName, 1);
671 return ERROR_INT(
"invalid op", procName, 1);
673 cmap = pixGetColormap(pixs);
674 d = pixGetDepth(pixs);
680 val = (d == 32) ? 0xffffff00 : (1 << d) - 1;
714 PROCNAME(
"pixClearAll");
717 return ERROR_INT(
"pix not defined", procName, 1);
719 pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix),
746 PROCNAME(
"pixSetAll");
749 return ERROR_INT(
"pix not defined", procName, 1);
750 if ((cmap = pixGetColormap(pix)) != NULL) {
752 if (n < cmap->nalloc)
753 return ERROR_INT(
"cmap entry does not exist", procName, 1);
756 pixRasterop(pix, 0, 0, pixGetWidth(pix), pixGetHeight(pix),
787 l_int32 d, spp, index;
792 PROCNAME(
"pixSetAllGray");
795 return ERROR_INT(
"pix not defined", procName, 1);
797 L_WARNING(
"grayval < 0; setting to 0\n", procName);
799 }
else if (grayval > 255) {
800 L_WARNING(
"grayval > 255; setting to 255\n", procName);
805 cmap = pixGetColormap(pix);
813 d = pixGetDepth(pix);
814 spp = pixGetSpp(pix);
825 }
else if (d == 16) {
826 grayval |= (grayval << 8);
828 }
else if (d == 32 && spp == 3) {
831 }
else if (d == 32 && spp == 4) {
838 L_ERROR(
"invalid depth: %d\n", procName, d);
879 l_int32 n, i, j, w, h, d, wpl, npix;
880 l_uint32 maxval, wordval;
881 l_uint32 *data, *line;
884 PROCNAME(
"pixSetAllArbitrary");
887 return ERROR_INT(
"pix not defined", procName, 1);
891 if ((cmap = pixGetColormap(pix)) != NULL) {
894 L_WARNING(
"index not in colormap; using last color\n", procName);
903 maxval = (1 << d) - 1;
905 L_WARNING(
"val = %d too large for depth; using maxval = %d\n",
906 procName, val, maxval);
914 for (j = 0; j < npix; j++)
915 wordval |= (val << (j * d));
916 wpl = pixGetWpl(pix);
918 for (i = 0; i < h; i++) {
919 line = data + i * wpl;
920 for (j = 0; j < wpl; j++) {
921 *(line + j) = wordval;
952 PROCNAME(
"pixSetBlackOrWhite");
955 return ERROR_INT(
"pix not defined", procName, 1);
957 return ERROR_INT(
"invalid op", procName, 1);
959 cmap = pixGetColormap(pixs);
960 d = pixGetDepth(pixs);
998 l_uint32 mask1, mask2;
1001 PROCNAME(
"pixSetComponentArbitrary");
1003 if (!pix || pixGetDepth(pix) != 32)
1004 return ERROR_INT(
"pix not defined or not 32 bpp", procName, 1);
1007 return ERROR_INT(
"invalid component", procName, 1);
1008 if (val < 0 || val > 255)
1009 return ERROR_INT(
"val not in [0 ... 255]", procName, 1);
1011 mask1 = ~(255 << (8 * (3 - comp)));
1012 mask2 = val << (8 * (3 - comp));
1013 nwords = pixGetHeight(pix) * pixGetWpl(pix);
1015 for (i = 0; i < nwords; i++) {
1048 PROCNAME(
"pixClearInRect");
1051 return ERROR_INT(
"pix not defined", procName, 1);
1053 return ERROR_INT(
"box not defined", procName, 1);
1081 l_int32 n, x, y, w, h;
1084 PROCNAME(
"pixSetInRect");
1087 return ERROR_INT(
"pix not defined", procName, 1);
1089 return ERROR_INT(
"box not defined", procName, 1);
1090 if ((cmap = pixGetColormap(pix)) != NULL) {
1092 if (n < cmap->nalloc)
1093 return ERROR_INT(
"cmap entry does not exist", procName, 1);
1124 l_int32 n, x, y, xstart, xend, ystart, yend, bw, bh, w, h, d, wpl, maxval;
1125 l_uint32 *data, *line;
1129 PROCNAME(
"pixSetInRectArbitrary");
1132 return ERROR_INT(
"pix not defined", procName, 1);
1134 return ERROR_INT(
"box not defined", procName, 1);
1136 if (d != 1 && d != 2 && d != 4 && d !=8 && d != 16 && d != 32)
1137 return ERROR_INT(
"depth must be in {1,2,4,8,16,32} bpp", procName, 1);
1138 if ((cmap = pixGetColormap(pix)) != NULL) {
1141 L_WARNING(
"index not in colormap; using last color\n", procName);
1146 maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1;
1147 if (val > maxval) val = maxval;
1155 (d == 2 && val == 3) ||
1156 (d == 4 && val == 0xf) ||
1157 (d == 8 && val == 0xff) ||
1158 (d == 16 && val == 0xffff) ||
1159 (d == 32 && ((val ^ 0xffffff00) >> 8 == 0))) {
1166 return ERROR_INT(
"no overlap of box with image", procName, 1);
1168 xend = xstart + bw - 1;
1169 yend = ystart + bh - 1;
1172 wpl = pixGetWpl(pix);
1174 for (y = ystart; y <= yend; y++) {
1175 line = data + y * wpl;
1176 for (x = xstart; x <= xend; x++) {
1195 return ERROR_INT(
"depth not 2|4|8|16|32 bpp", procName, 1);
1226 l_int32 i, j, bx, by, bw, bh, w, h, wpls;
1227 l_int32 prval, pgval, pbval, rval, gval, bval;
1229 l_uint32 *datas, *lines;
1231 PROCNAME(
"pixBlendInRect");
1233 if (!pixs || pixGetDepth(pixs) != 32)
1234 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
1239 wpls = pixGetWpl(pixs);
1241 for (i = 0; i < h; i++) {
1242 lines = datas + i * wpls;
1243 for (j = 0; j < w; j++) {
1244 val32 = *(lines + j);
1246 prval = (l_int32)((1. - fract) * prval + fract * rval);
1247 pgval = (l_int32)((1. - fract) * pgval + fract * gval);
1248 pbval = (l_int32)((1. - fract) * pbval + fract * bval);
1250 *(lines + j) = val32;
1257 for (i = 0; i < bh; i++) {
1258 if (by + i < 0 || by + i >= h)
continue;
1259 lines = datas + (by + i) * wpls;
1260 for (j = 0; j < bw; j++) {
1261 if (bx + j < 0 || bx + j >= w)
continue;
1262 val32 = *(lines + bx + j);
1264 prval = (l_int32)((1. - fract) * prval + fract * rval);
1265 pgval = (l_int32)((1. - fract) * pgval + fract * gval);
1266 pbval = (l_int32)((1. - fract) * pbval + fract * bval);
1268 *(lines + bx + j) = val32;
1310 l_int32 i, w, h, d, wpl, endbits, fullwords;
1312 l_uint32 *data, *pword;
1314 PROCNAME(
"pixSetPadBits");
1317 return ERROR_INT(
"pix not defined", procName, 1);
1324 wpl = pixGetWpl(pix);
1325 endbits = 32 - (((l_int64)w * d) % 32);
1328 fullwords = (1LL * w * d) / 32;
1329 mask = rmask32[endbits];
1333 for (i = 0; i < h; i++) {
1334 pword = data + i * wpl + fullwords;
1336 *pword = *pword & mask;
1338 *pword = *pword | mask;
1372 l_int32 i, w, h, d, wpl, endbits, fullwords;
1374 l_uint32 *data, *pword;
1376 PROCNAME(
"pixSetPadBitsBand");
1379 return ERROR_INT(
"pix not defined", procName, 1);
1388 return ERROR_INT(
"start y not in image", procName, 1);
1393 wpl = pixGetWpl(pix);
1394 endbits = 32 - (((l_int64)w * d) % 32);
1397 fullwords = (l_int64)w * d / 32;
1399 mask = rmask32[endbits];
1403 for (i = by; i < by + bh; i++) {
1404 pword = data + i * wpl + fullwords;
1406 *pword = *pword & mask;
1408 *pword = *pword | mask;
1448 PROCNAME(
"pixSetOrClearBorder");
1451 return ERROR_INT(
"pixs not defined", procName, 1);
1453 return ERROR_INT(
"op must be PIX_SET or PIX_CLR", procName, 1);
1457 pixRasterop(pixs, w - right, 0, right, h, op, NULL, 0, 0);
1459 pixRasterop(pixs, 0, h - bot, w, bot, op, NULL, 0, 0);
1495 l_int32 w, h, d, wpls, i, j, bstart, rstart;
1496 l_uint32 *datas, *lines;
1498 PROCNAME(
"pixSetBorderVal");
1501 return ERROR_INT(
"pixs not defined", procName, 1);
1503 if (d != 8 && d != 16 && d != 32)
1504 return ERROR_INT(
"depth must be 8, 16 or 32 bpp", procName, 1);
1507 wpls = pixGetWpl(pixs);
1510 for (i = 0; i < top; i++) {
1511 lines = datas + i * wpls;
1512 for (j = 0; j < w; j++)
1517 for (i = top; i < bstart; i++) {
1518 lines = datas + i * wpls;
1519 for (j = 0; j < left; j++)
1521 for (j = rstart; j < w; j++)
1524 for (i = bstart; i < h; i++) {
1525 lines = datas + i * wpls;
1526 for (j = 0; j < w; j++)
1529 }
else if (d == 16) {
1531 for (i = 0; i < top; i++) {
1532 lines = datas + i * wpls;
1533 for (j = 0; j < w; j++)
1538 for (i = top; i < bstart; i++) {
1539 lines = datas + i * wpls;
1540 for (j = 0; j < left; j++)
1542 for (j = rstart; j < w; j++)
1545 for (i = bstart; i < h; i++) {
1546 lines = datas + i * wpls;
1547 for (j = 0; j < w; j++)
1551 for (i = 0; i < top; i++) {
1552 lines = datas + i * wpls;
1553 for (j = 0; j < w; j++)
1558 for (i = top; i < bstart; i++) {
1559 lines = datas + i * wpls;
1560 for (j = 0; j < left; j++)
1562 for (j = rstart; j < w; j++)
1565 for (i = bstart; i < h; i++) {
1566 lines = datas + i * wpls;
1567 for (j = 0; j < w; j++)
1596 l_int32 w, h, d, i, j, xend, yend;
1598 PROCNAME(
"pixSetBorderRingVal");
1601 return ERROR_INT(
"pixs not defined", procName, 1);
1603 return ERROR_INT(
"dist must be > 0", procName, 1);
1605 if (w < 2 * dist + 1 || h < 2 * dist + 1)
1606 return ERROR_INT(
"ring doesn't exist", procName, 1);
1607 if (d < 32 && (val >= (1 << d)))
1608 return ERROR_INT(
"invalid pixel value", procName, 1);
1612 for (j = dist - 1; j <= xend; j++)
1614 for (j = dist - 1; j <= xend; j++)
1616 for (i = dist - 1; i <= yend; i++)
1618 for (i = dist - 1; i <= yend; i++)
1651 PROCNAME(
"pixSetMirroredBorder");
1654 return ERROR_INT(
"pixs not defined", procName, 1);
1657 for (j = 0; j < left; j++)
1659 pixs, left + j, top);
1660 for (j = 0; j < right; j++)
1662 pixs, w - right - 1 - j, top);
1663 for (i = 0; i < top; i++)
1666 for (i = 0; i < bot; i++)
1668 pixs, 0, h - bot - 1 - i);
1703 PROCNAME(
"pixCopyBorder");
1706 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
1710 L_WARNING(
"same: nothing to do\n", procName);
1713 return (
PIX *)ERROR_PTR(
"pixs and pixd sizes differ",
1718 return (
PIX *)ERROR_PTR(
"pixd not made", procName, pixd);
1752 PROCNAME(
"pixAddBorder");
1755 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1797 PROCNAME(
"pixAddBlackOrWhiteBorder");
1800 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1802 return (
PIX *)ERROR_PTR(
"invalid op", procName, NULL);
1849 l_int32 ws, hs, wd, hd, d, maxval, op;
1852 PROCNAME(
"pixAddBorderGeneral");
1855 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1856 if (left < 0 || right < 0 || top < 0 || bot < 0)
1857 return (
PIX *)ERROR_PTR(
"negative border added!", procName, NULL);
1860 wd = ws + left + right;
1861 hd = hs + top + bot;
1863 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1864 pixCopyResolution(pixd, pixs);
1868 maxval = (d == 32) ? 0xffffff00 : (1 << d) - 1;
1872 else if (val >= maxval)
1877 pixRasterop(pixd, 0, 0, left, hd, op, NULL, 0, 0);
1878 pixRasterop(pixd, wd - right, 0, right, hd, op, NULL, 0, 0);
1880 pixRasterop(pixd, 0, hd - bot, wd, bot, op, NULL, 0, 0);
1900 PROCNAME(
"pixRemoveBorder");
1903 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1924 l_int32 ws, hs, wd, hd, d;
1927 PROCNAME(
"pixRemoveBorderGeneral");
1930 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1931 if (left < 0 || right < 0 || top < 0 || bot < 0)
1932 return (
PIX *)ERROR_PTR(
"negative border removed!", procName, NULL);
1935 wd = ws - left - right;
1936 hd = hs - top - bot;
1938 return (
PIX *)ERROR_PTR(
"width must be > 0", procName, NULL);
1940 return (
PIX *)ERROR_PTR(
"height must be > 0", procName, NULL);
1942 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1943 pixCopyResolution(pixd, pixs);
1948 if (pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4)
1975 l_int32 w, h, top, bot, left, right, delta;
1977 PROCNAME(
"pixRemoveBorderToSize");
1980 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1983 if ((wd <= 0 || wd >= w) && (hd <= 0 || hd >= h))
1986 left = right = (w - wd) / 2;
1987 delta = w - 2 * left - wd;
1989 top = bot = (h - hd) / 2;
1990 delta = h - hd - 2 * top;
1992 if (wd <= 0 || wd > w)
1994 else if (hd <= 0 || hd > h)
2035 PROCNAME(
"pixAddMirroredBorder");
2038 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2040 if (left > w || right > w || top > h || bot > h)
2041 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2045 for (j = 0; j < left; j++)
2047 pixd, left + j, top);
2048 for (j = 0; j < right; j++)
2050 pixd, left + w - 1 - j, top);
2051 for (i = 0; i < top; i++)
2054 for (i = 0; i < bot; i++)
2056 pixd, 0, top + h - 1 - i);
2088 PROCNAME(
"pixAddRepeatedBorder");
2091 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2093 if (left > w || right > w || top > h || bot > h)
2094 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2144 PROCNAME(
"pixAddMixedBorder");
2147 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2149 if (left > w || right > w || top > h || bot > h)
2150 return (
PIX *)ERROR_PTR(
"border too large", procName, NULL);
2155 for (j = 0; j < left; j++)
2157 pixd, left + j, top);
2158 for (j = 0; j < right; j++)
2160 pixd, left + w - 1 - j, top);
2191 PROCNAME(
"pixAddContinuedBorder");
2194 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2198 for (j = 0; j < left; j++)
2200 for (j = 0; j < right; j++)
2202 PIX_SRC, pixd, left + w - 1, top);
2203 for (i = 0; i < top; i++)
2205 for (i = 0; i < bot; i++)
2206 pixRasterop(pixd, 0, top + h + i, left + w + right, 1,
2207 PIX_SRC, pixd, 0, top + h - 1);
2233 PROCNAME(
"pixShiftAndTransferAlpha");
2236 return ERROR_INT(
"pixs and pixd not both defined", procName, 1);
2237 if (pixGetDepth(pixs) != 32 || pixGetSpp(pixs) != 4)
2238 return ERROR_INT(
"pixs not 32 bpp and 4 spp", procName, 1);
2239 if (pixGetDepth(pixd) != 32)
2240 return ERROR_INT(
"pixd not 32 bpp", procName, 1);
2242 if (shiftx == 0 && shifty == 0) {
2281 l_float32 scalefact;
2282 PIX *pix1, *pix2, *pixd;
2286 PROCNAME(
"pixDisplayLayersRGBA");
2289 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2290 cmap = pixGetColormap(pixs);
2291 if (!cmap && !(pixGetDepth(pixs) == 32 && pixGetSpp(pixs) == 4))
2292 return (
PIX *)ERROR_PTR(
"pixs not cmap and not 32 bpp rgba",
2294 if ((w = pixGetWidth(pixs)) == 0)
2295 return (
PIX *)ERROR_PTR(
"pixs width 0 !!", procName, NULL);
2303 scalefact = (maxw == 0) ? 1.0 : L_MIN(1.0, (l_float32)(maxw) / w);
2304 width = (l_int32)(scalefact * w);
2352 l_int32 wr, wg, wb, hr, hg, hb, dr, dg, db;
2355 PROCNAME(
"pixCreateRGBImage");
2358 return (
PIX *)ERROR_PTR(
"pixr not defined", procName, NULL);
2360 return (
PIX *)ERROR_PTR(
"pixg not defined", procName, NULL);
2362 return (
PIX *)ERROR_PTR(
"pixb not defined", procName, NULL);
2366 if (dr != 8 || dg != 8 || db != 8)
2367 return (
PIX *)ERROR_PTR(
"input pix not all 8 bpp", procName, NULL);
2368 if (wr != wg || wr != wb)
2369 return (
PIX *)ERROR_PTR(
"widths not the same", procName, NULL);
2370 if (hr != hg || hr != hb)
2371 return (
PIX *)ERROR_PTR(
"heights not the same", procName, NULL);
2373 if ((pixd =
pixCreate(wr, hr, 32)) == NULL)
2374 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2375 pixCopyResolution(pixd, pixr);
2407 l_int32 i, j, w, h, wpls, wpld, val;
2408 l_uint32 *lines, *lined;
2409 l_uint32 *datas, *datad;
2412 PROCNAME(
"pixGetRGBComponent");
2415 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2416 if (pixGetColormap(pixs))
2418 if (pixGetDepth(pixs) != 32)
2419 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
2422 return (
PIX *)ERROR_PTR(
"invalid comp", procName, NULL);
2425 if ((pixd =
pixCreate(w, h, 8)) == NULL)
2426 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2427 pixCopyResolution(pixd, pixs);
2428 wpls = pixGetWpl(pixs);
2429 wpld = pixGetWpl(pixd);
2432 for (i = 0; i < h; i++) {
2433 lines = datas + i * wpls;
2434 lined = datad + i * wpld;
2435 for (j = 0; j < w; j++) {
2468 l_int32 i, j, w, h, ws, hs, wd, hd;
2470 l_uint32 *lines, *lined;
2471 l_uint32 *datas, *datad;
2473 PROCNAME(
"pixSetRGBComponent");
2476 return ERROR_INT(
"pixd not defined", procName, 1);
2478 return ERROR_INT(
"pixs not defined", procName, 1);
2479 if (pixGetDepth(pixd) != 32)
2480 return ERROR_INT(
"pixd not 32 bpp", procName, 1);
2481 if (pixGetDepth(pixs) != 8)
2482 return ERROR_INT(
"pixs not 8 bpp", procName, 1);
2485 return ERROR_INT(
"invalid comp", procName, 1);
2488 if (ws != wd || hs != hd)
2489 L_WARNING(
"images sizes not equal\n", procName);
2496 wpls = pixGetWpl(pixs);
2497 wpld = pixGetWpl(pixd);
2498 for (i = 0; i < h; i++) {
2499 lines = datas + i * wpls;
2500 lined = datad + i * wpld;
2501 for (j = 0; j < w; j++) {
2528 l_int32 i, j, w, h, val, index;
2530 l_uint32 *linec, *lined;
2531 l_uint32 *datac, *datad;
2536 PROCNAME(
"pixGetRGBComponentCmap");
2539 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2540 if ((cmap = pixGetColormap(pixs)) == NULL)
2541 return (
PIX *)ERROR_PTR(
"pixs not cmapped", procName, NULL);
2543 return (
PIX *)ERROR_PTR(
"alpha in cmaps not supported", procName, NULL);
2545 return (
PIX *)ERROR_PTR(
"invalid comp", procName, NULL);
2548 if (pixGetDepth(pixs) == 8)
2556 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2558 pixCopyResolution(pixd, pixs);
2559 wplc = pixGetWpl(pixc);
2560 wpld = pixGetWpl(pixd);
2565 for (i = 0; i < h; i++) {
2566 linec = datac + i * wplc;
2567 lined = datad + i * wpld;
2569 for (j = 0; j < w; j++) {
2571 val = cta[index].
red;
2575 for (j = 0; j < w; j++) {
2577 val = cta[index].
green;
2581 for (j = 0; j < w; j++) {
2583 val = cta[index].
blue;
2614 l_int32 i, j, w, h, ws, hs, wd, hd, val;
2616 l_uint32 *lines, *lined;
2617 l_uint32 *datas, *datad;
2619 PROCNAME(
"pixCopyRGBComponent");
2621 if (!pixd && pixGetDepth(pixd) != 32)
2622 return ERROR_INT(
"pixd not defined or not 32 bpp", procName, 1);
2623 if (!pixs && pixGetDepth(pixs) != 32)
2624 return ERROR_INT(
"pixs not defined or not 32 bpp", procName, 1);
2627 return ERROR_INT(
"invalid component", procName, 1);
2630 if (ws != wd || hs != hd)
2631 L_WARNING(
"images sizes not equal\n", procName);
2636 wpls = pixGetWpl(pixs);
2637 wpld = pixGetWpl(pixd);
2640 for (i = 0; i < h; i++) {
2641 lines = datas + i * wpls;
2642 lined = datad + i * wpld;
2643 for (j = 0; j < w; j++) {
2676 PROCNAME(
"composeRGBPixel");
2679 return ERROR_INT(
"&pixel not defined", procName, 1);
2681 *ppixel = ((l_uint32)rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) |
2682 (bval << L_BLUE_SHIFT);
2708 PROCNAME(
"composeRGBAPixel");
2711 return ERROR_INT(
"&pixel not defined", procName, 1);
2713 *ppixel = ((l_uint32)rval << L_RED_SHIFT) | (gval << L_GREEN_SHIFT) |
2714 (bval << L_BLUE_SHIFT) | aval;
2742 if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff;
2743 if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff;
2744 if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff;
2766 if (prval) *prval = (pixel >> L_RED_SHIFT) & 0xff;
2767 if (pgval) *pgval = (pixel >> L_GREEN_SHIFT) & 0xff;
2768 if (pbval) *pbval = (pixel >> L_BLUE_SHIFT) & 0xff;
2769 if (paval) *paval = (pixel >> L_ALPHA_SHIFT) & 0xff;
2785 l_int32 rval, gval, bval, val;
2788 if (type == L_CHOOSE_MIN) {
2789 val = L_MIN(rval, gval);
2790 val = L_MIN(val, bval);
2792 val = L_MAX(rval, gval);
2793 val = L_MAX(val, bval);
2826 PROCNAME(
"pixGetRGBLine");
2829 return ERROR_INT(
"pixs not defined", procName, 1);
2830 if (pixGetDepth(pixs) != 32)
2831 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
2832 if (!bufr || !bufg || !bufb)
2833 return ERROR_INT(
"buffer not defined", procName, 1);
2836 if (row < 0 || row >= h)
2837 return ERROR_INT(
"row out of bounds", procName, 1);
2838 wpls = pixGetWpl(pixs);
2841 for (j = 0; j < w; j++) {
2881 l_uint32 *datas, *datad;
2882 l_int32 i, j, h, wpl;
2886 PROCNAME(
"pixEndianByteSwapNew");
2895 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2898 wpl = pixGetWpl(pixs);
2899 h = pixGetHeight(pixs);
2902 for (i = 0; i < h; i++) {
2903 for (j = 0; j < wpl; j++, datas++, datad++) {
2905 *datad = (word >> 24) |
2906 ((word >> 8) & 0x0000ff00) |
2907 ((word << 8) & 0x00ff0000) |
2945 l_int32 i, j, h, wpl;
2948 PROCNAME(
"pixEndianByteSwap");
2957 return ERROR_INT(
"pixs not defined", procName, 1);
2960 wpl = pixGetWpl(pixs);
2961 h = pixGetHeight(pixs);
2962 for (i = 0; i < h; i++) {
2963 for (j = 0; j < wpl; j++, data++) {
2965 *data = (word >> 24) |
2966 ((word >> 8) & 0x0000ff00) |
2967 ((word << 8) & 0x00ff0000) |
3007 PROCNAME(
"lineEndianByteSwap");
3009 if (!datad || !datas)
3010 return ERROR_INT(
"datad and datas not both defined", procName, 1);
3014 memcpy(datad, datas, 4 * wpl);
3019 for (j = 0; j < wpl; j++, datas++, datad++) {
3021 *datad = (word >> 24) |
3022 ((word >> 8) & 0x0000ff00) |
3023 ((word << 8) & 0x00ff0000) |
3055 l_uint32 *datas, *datad;
3056 l_int32 i, j, h, wpl;
3060 PROCNAME(
"pixEndianTwoByteSwapNew");
3069 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
3072 wpl = pixGetWpl(pixs);
3073 h = pixGetHeight(pixs);
3076 for (i = 0; i < h; i++) {
3077 for (j = 0; j < wpl; j++, datas++, datad++) {
3079 *datad = (word << 16) | (word >> 16);
3109 l_int32 i, j, h, wpl;
3112 PROCNAME(
"pixEndianTwoByteSwap");
3121 return ERROR_INT(
"pixs not defined", procName, 1);
3124 wpl = pixGetWpl(pixs);
3125 h = pixGetHeight(pixs);
3126 for (i = 0; i < h; i++) {
3127 for (j = 0; j < wpl; j++, data++) {
3129 *data = (word << 16) | (word >> 16);
3164 l_int32 w, h, d, wpl, i, j, rval, gval, bval;
3166 l_uint8 *line, *data;
3167 l_uint32 *rline, *rdata;
3169 PROCNAME(
"pixGetRasterData");
3171 if (pdata) *pdata = NULL;
3172 if (pnbytes) *pnbytes = 0;
3173 if (!pdata || !pnbytes)
3174 return ERROR_INT(
"&data and &nbytes not both defined", procName, 1);
3176 return ERROR_INT(
"pixs not defined", procName, 1);
3178 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
3179 return ERROR_INT(
"depth not in {1,2,4,8,16,32}", procName, 1);
3181 wpl = pixGetWpl(pixs);
3183 databpl = (w + 7) / 8;
3185 databpl = (w + 3) / 4;
3187 databpl = (w + 1) / 2;
3188 else if (d == 8 || d == 16)
3189 databpl = w * (d / 8);
3192 if ((data = (l_uint8 *)LEPT_CALLOC((
size_t)databpl * h,
sizeof(l_uint8)))
3194 return ERROR_INT(
"data not allocated", procName, 1);
3196 *pnbytes = (size_t)databpl * h;
3198 for (i = 0; i < h; i++) {
3199 rline = rdata + i * wpl;
3200 line = data + i * databpl;
3202 for (j = 0; j < databpl; j++)
3204 }
else if (d == 16) {
3205 for (j = 0; j < w; j++)
3208 for (j = 0; j < w; j++) {
3210 *(line + 3 * j) = rval;
3211 *(line + 3 * j + 1) = gval;
3212 *(line + 3 * j + 2) = bval;
3238 l_int32 w, h, wpl, i, j, alpha;
3239 l_uint32 *data, *line;
3241 PROCNAME(
"pixAlphaIsOpaque");
3244 return ERROR_INT(
"&opaque not defined", procName, 1);
3247 return ERROR_INT(
"&pix not defined", procName, 1);
3248 if (pixGetDepth(pix) != 32)
3249 return ERROR_INT(
"&pix not 32 bpp", procName, 1);
3250 if (pixGetSpp(pix) != 4)
3251 return ERROR_INT(
"&pix not 4 spp", procName, 1);
3254 wpl = pixGetWpl(pix);
3256 for (i = 0; i < h; i++) {
3257 line = data + i * wpl;
3258 for (j = 0; j < w; j++) {
3306 PROCNAME(
"pixSetupByteProcessing");
3310 if (!pix || pixGetDepth(pix) != 8)
3311 return (l_uint8 **)ERROR_PTR(
"pix not defined or not 8 bpp",
3316 if (pixGetColormap(pix))
3317 return (l_uint8 **)ERROR_PTR(
"pix has colormap", procName, NULL);
3341 PROCNAME(
"pixCleanupByteProcessing");
3344 return ERROR_INT(
"pix not defined", procName, 1);
3346 return ERROR_INT(
"lineptrs not defined", procName, 1);
3349 LEPT_FREE(lineptrs);
3383 val1 = L_MAX(0.0, L_MIN(1.0, val1));
3384 val2 = L_MAX(0.0, L_MIN(1.0, val2));
3385 AlphaMaskBorderVals[0] = val1;
3386 AlphaMaskBorderVals[1] = val2;
l_ok pixSetPadBitsBand(PIX *pix, l_int32 by, l_int32 bh, l_int32 val)
pixSetPadBitsBand()
l_ok pixCopyRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixCopyRGBComponent()
l_int32 lineEndianByteSwap(l_uint32 *datad, l_uint32 *datas, l_int32 wpl)
lineEndianByteSwap()
l_ok pixSetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 rval, l_int32 gval, l_int32 bval)
pixSetRGBPixel()
PIX * pixAddMixedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddMixedBorder()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
l_ok pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixSetRGBComponent()
l_ok pixCleanupByteProcessing(PIX *pix, l_uint8 **lineptrs)
pixCleanupByteProcessing()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
PIX * pixRemoveBorderGeneral(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixRemoveBorderGeneral()
l_ok pixSetComponentArbitrary(PIX *pix, l_int32 comp, l_int32 val)
pixSetComponentArbitrary()
void extractRGBAValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval)
extractRGBAValues()
l_ok pixSetInRectArbitrary(PIX *pix, BOX *box, l_uint32 val)
pixSetInRectArbitrary()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
void setPixelLow(l_uint32 *line, l_int32 x, l_int32 depth, l_uint32 val)
setPixelLow()
l_ok 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()
l_ok pixGetRasterData(PIX *pixs, l_uint8 **pdata, size_t *pnbytes)
pixGetRasterData()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
l_ok pixShiftAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 shiftx, l_float32 shifty)
pixShiftAndTransferAlpha()
BOX * boxClipToRectangle(BOX *box, l_int32 wi, l_int32 hi)
boxClipToRectangle()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok pixSetAll(PIX *pix)
pixSetAll()
#define SET_DATA_QBIT(pdata, n, val)
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()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
l_ok pixClearInRect(PIX *pix, BOX *box)
pixClearInRect()
l_ok pixSetAllGray(PIX *pix, l_int32 grayval)
pixSetAllGray()
l_ok pixSetOrClearBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_int32 op)
pixSetOrClearBorder()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
l_ok pixGetRandomPixel(PIX *pix, l_uint32 *pval, l_int32 *px, l_int32 *py)
pixGetRandomPixel()
#define SET_DATA_DIBIT(pdata, n, val)
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
l_ok pixSetBorderVal(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot, l_uint32 val)
pixSetBorderVal()
#define CLEAR_DATA_BIT(pdata, n)
PIX * pixEndianTwoByteSwapNew(PIX *pixs)
pixEndianTwoByteSwapNew()
PIX * pixAlphaBlendUniform(PIX *pixs, l_uint32 color)
pixAlphaBlendUniform()
PIX * pixRemoveBorder(PIX *pixs, l_int32 npix)
pixRemoveBorder()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_uint8 ** pixSetupByteProcessing(PIX *pix, l_int32 *pw, l_int32 *ph)
pixSetupByteProcessing()
l_ok pixFlipPixel(PIX *pix, l_int32 x, l_int32 y)
pixFlipPixel()
l_ok pixClearPixel(PIX *pix, l_int32 x, l_int32 y)
pixClearPixel()
#define CLEAR_DATA_DIBIT(pdata, n)
l_ok pixClearAll(PIX *pix)
pixClearAll()
l_ok pixSetBorderRingVal(PIX *pixs, l_int32 dist, l_uint32 val)
pixSetBorderRingVal()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
l_int32 extractMinMaxComponent(l_uint32 pixel, l_int32 type)
extractMinMaxComponent()
l_ok pixEndianByteSwap(PIX *pixs)
pixEndianByteSwap()
l_ok composeRGBAPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel)
composeRGBAPixel()
#define SET_DATA_BYTE(pdata, n, val)
l_ok pixSetPadBits(PIX *pix, l_int32 val)
pixSetPadBits()
#define GET_DATA_QBIT(pdata, n)
l_ok pixSetBlackOrWhite(PIX *pixs, l_int32 op)
pixSetBlackOrWhite()
l_ok pixEndianTwoByteSwap(PIX *pixs)
pixEndianTwoByteSwap()
#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()
l_ok pixCopyColormap(PIX *pixd, PIX *pixs)
pixCopyColormap()
l_ok pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapAddNearestColor()
l_ok pixGetRGBLine(PIX *pixs, l_int32 row, l_uint8 *bufr, l_uint8 *bufg, l_uint8 *bufb)
pixGetRGBLine()
PIX * pixGetRGBComponentCmap(PIX *pixs, l_int32 comp)
pixGetRGBComponentCmap()
l_ok pixGetBlackOrWhiteVal(PIX *pixs, l_int32 op, l_uint32 *pval)
pixGetBlackOrWhiteVal()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
PIX * pixEndianByteSwapNew(PIX *pixs)
pixEndianByteSwapNew()
l_ok pixGetRGBPixel(PIX *pix, l_int32 x, l_int32 y, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixGetRGBPixel()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixAddRepeatedBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixAddRepeatedBorder()
l_ok pixSetMirroredBorder(PIX *pixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
pixSetMirroredBorder()
void l_setAlphaMaskBorder(l_float32 val1, l_float32 val2)
l_setAlphaMaskBorder()
l_ok pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex)
pixcmapAddBlackOrWhite()
#define GET_DATA_TWO_BYTES(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
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_ok pixAlphaIsOpaque(PIX *pix, l_int32 *popaque)
pixAlphaIsOpaque()
void boxDestroy(BOX **pbox)
boxDestroy()
PIX * pixRemoveBorderToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixRemoveBorderToSize()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_ok pixCopySpp(PIX *pixd, const PIX *pixs)
pixCopySpp()
l_int32 pixSizesEqual(const PIX *pix1, const PIX *pix2)
pixSizesEqual()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
#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()
l_ok pixSetInRect(PIX *pix, BOX *box)
pixSetInRect()
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
l_ok pixBlendInRect(PIX *pixs, BOX *box, l_uint32 val, l_float32 fract)
pixBlendInRect()
#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()