118 #include <config_auto.h>
123 #include "allheaders.h"
146 l_int32 npts, diff, getyofx, sign, i, x, y;
150 PROCNAME(
"generatePtaLine");
153 if (x1 == x2 && y1 == y2) {
156 }
else if (L_ABS(x2 - x1) >= L_ABS(y2 - y1)) {
158 npts = L_ABS(x2 - x1) + 1;
160 sign = L_SIGN(x2 - x1);
161 slope = (l_float32)(sign * (y2 - y1)) / (l_float32)diff;
164 npts = L_ABS(y2 - y1) + 1;
166 sign = L_SIGN(y2 - y1);
167 slope = (l_float32)(sign * (x2 - x1)) / (l_float32)diff;
171 return (
PTA *)ERROR_PTR(
"pta not made", procName, NULL);
180 for (i = 0; i < npts; i++) {
182 y = (l_int32)(y1 + (l_float32)i * slope + 0.5);
186 for (i = 0; i < npts; i++) {
187 x = (l_int32)(x1 + (l_float32)i * slope + 0.5);
212 l_int32 i, x1a, x2a, y1a, y2a;
215 PROCNAME(
"generatePtaWideLine");
218 L_WARNING(
"width < 1; setting to 1\n", procName);
223 return (
PTA *)ERROR_PTR(
"ptaj not made", procName, NULL);
228 if (L_ABS(x1 - x2) > L_ABS(y1 - y2)) {
229 for (i = 1; i < width; i++) {
231 y1a = y1 - (i + 1) / 2;
232 y2a = y2 - (i + 1) / 2;
234 y1a = y1 + (i + 1) / 2;
235 y2a = y2 + (i + 1) / 2;
243 for (i = 1; i < width; i++) {
245 x1a = x1 - (i + 1) / 2;
246 x2a = x2 - (i + 1) / 2;
248 x1a = x1 + (i + 1) / 2;
249 x2a = x2 + (i + 1) / 2;
282 PROCNAME(
"generatePtaBox");
285 return (
PTA *)ERROR_PTR(
"box not defined", procName, NULL);
287 L_WARNING(
"width < 1; setting to 1\n", procName);
293 if (w == 0 || h == 0)
294 return (
PTA *)ERROR_PTR(
"box has w = 0 or h = 0", procName, NULL);
296 if ((width & 1) == 1) {
298 x + w - 1 + width / 2, y, width);
302 x + w - 1, y + h - 2 - width / 2, width);
306 x - width / 2, y + h - 1, width);
310 x, y + 1 + width / 2, width);
315 x + w - 2 + width / 2, y, width);
319 x + w - 1, y + h - 2 - width / 2, width);
323 x - width / 2, y + h - 1, width);
327 x, y + 0 + width / 2, width);
359 PTA *ptad, *ptat, *pta;
361 PROCNAME(
"generatePtaBoxa");
364 return (
PTA *)ERROR_PTR(
"boxa not defined", procName, NULL);
366 L_WARNING(
"width < 1; setting to 1\n", procName);
372 for (i = 0; i < n; i++) {
416 l_int32 bx, by, bh, bw, x, y, x1, y1, x2, y2, i, n, npts;
419 PROCNAME(
"generatePtaHashBox");
422 return (
PTA *)ERROR_PTR(
"box not defined", procName, NULL);
424 return (
PTA *)ERROR_PTR(
"spacing not > 1", procName, NULL);
427 return (
PTA *)ERROR_PTR(
"invalid line orientation", procName, NULL);
429 if (bw == 0 || bh == 0)
430 return (
PTA *)ERROR_PTR(
"box has bw = 0 or bh = 0", procName, NULL);
432 L_WARNING(
"width < 1; setting to 1\n", procName);
444 n = 1 + bh / spacing;
445 for (i = 0; i < n; i++) {
446 y = by + (i * (bh - 1)) / (n - 1);
452 n = 1 + bw / spacing;
453 for (i = 0; i < n; i++) {
454 x = bx + (i * (bw - 1)) / (n - 1);
460 n = 2 + (l_int32)((bw + bh) / (1.4 * spacing));
461 for (i = 0; i < n; i++) {
462 x = (l_int32)(bx + (i + 0.5) * 1.4 * spacing);
471 n = 2 + (l_int32)((bw + bh) / (1.4 * spacing));
472 for (i = 0; i < n; i++) {
473 x = (l_int32)(bx - bh + (i + 0.5) * 1.4 * spacing);
522 PTA *ptad, *ptat, *pta;
524 PROCNAME(
"generatePtaHashBoxa");
527 return (
PTA *)ERROR_PTR(
"boxa not defined", procName, NULL);
529 return (
PTA *)ERROR_PTR(
"spacing not > 1", procName, NULL);
531 L_WARNING(
"width < 1; setting to 1\n", procName);
536 return (
PTA *)ERROR_PTR(
"invalid line orientation", procName, NULL);
540 for (i = 0; i < n; i++) {
575 l_int32 i, n, x, y, w, h;
580 PROCNAME(
"generatePtaaBoxa");
583 return (
PTAA *)ERROR_PTR(
"boxa not defined", procName, NULL);
587 for (i = 0; i < n; i++) {
593 ptaAddPt(pta, x + w - 1, y + h - 1);
637 PROCNAME(
"generatePtaaHashBoxa");
640 return (
PTAA *)ERROR_PTR(
"boxa not defined", procName, NULL);
642 return (
PTAA *)ERROR_PTR(
"spacing not > 1", procName, NULL);
644 L_WARNING(
"width < 1; setting to 1\n", procName);
649 return (
PTAA *)ERROR_PTR(
"invalid line orientation", procName, NULL);
653 for (i = 0; i < n; i++) {
679 l_int32 i, n, x1, y1, x2, y2;
680 PTA *ptad, *ptat, *pta;
682 PROCNAME(
"generatePtaPolyline");
685 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
687 L_WARNING(
"width < 1; setting to 1\n", procName);
697 for (i = 1; i < n; i++) {
738 l_int32 i, j, bx, by, x1, x2, y1, y2;
743 PROCNAME(
"generatePtaGrid");
745 if (nx < 1 || ny < 1)
746 return (
PTA *)ERROR_PTR(
"nx and ny must be > 0", procName, NULL);
747 if (w < 2 * nx || h < 2 * ny)
748 return (
PTA *)ERROR_PTR(
"w and/or h too small", procName, NULL);
750 L_WARNING(
"width < 1; setting to 1\n", procName);
755 bx = (w + nx - 1) / nx;
756 by = (h + ny - 1) / ny;
757 for (i = 0; i < ny; i++) {
759 y2 = L_MIN(y1 + by, h - 1);
760 for (j = 0; j < nx; j++) {
762 x2 = L_MIN(x1 + bx, w - 1);
763 box =
boxCreate(x1, y1, x2 - x1 + 1, y2 - y1 + 1);
792 l_int32 i, n, x, y, xp, yp;
795 PROCNAME(
"convertPtaLineTo4cc");
798 return (
PTA *)ERROR_PTR(
"ptas not defined", procName, NULL);
804 for (i = 1; i < n; i++) {
806 if (x != xp && y != yp)
836 l_float32 radthresh, sqdist;
839 PROCNAME(
"generatePtaFilledCircle");
842 return (
PTA *)ERROR_PTR(
"radius must be >= 1", procName, NULL);
845 radthresh = (radius + 0.5) * (radius + 0.5);
846 for (y = 0; y <= 2 * radius; y++) {
847 for (x = 0; x <= 2 * radius; x++) {
848 sqdist = (l_float32)((y - radius) * (y - radius) +
849 (x - radius) * (x - radius));
850 if (sqdist <= radthresh)
878 PROCNAME(
"generatePtaFilledSquare");
880 return (
PTA *)ERROR_PTR(
"side must be > 0", procName, NULL);
883 for (y = 0; y < side; y++)
884 for (x = 0; x < side; x++)
914 x2 = x + (l_int32)((length - 1.0) * cos(radang));
915 y2 = y + (l_int32)((length - 1.0) * sin(radang));
938 PROCNAME(
"locatePtRadially");
941 return ERROR_INT(
"&x and &y not both defined", procName, 1);
943 *px = xr + dist * cos(radang);
944 *py = yr + dist * sin(radang);
980 l_int32 w, h, size, rval, gval, bval;
984 PROCNAME(
"pixRenderPlotFromNuma");
987 return ERROR_INT(
"&pix not defined", procName, 1);
989 return ERROR_INT(
"pix not defined", procName, 1);
996 return ERROR_INT(
"pta not made", procName, 1);
998 if (pixGetDepth(*ppix) != 32) {
1038 l_int32 orient, refpos;
1040 PROCNAME(
"makePlotPtaFromNuma");
1043 return (
PTA *)ERROR_PTR(
"na not defined", procName, NULL);
1051 return (
PTA *)ERROR_PTR(
"invalid plotloc", procName, NULL);
1059 refpos = size - max - 1;
1098 l_int32 rval, gval, bval;
1102 PROCNAME(
"pixRenderPlotFromNumaGen");
1105 return ERROR_INT(
"&pix not defined", procName, 1);
1107 return ERROR_INT(
"pix not defined", procName, 1);
1111 return ERROR_INT(
"pta not made", procName, 1);
1113 if (pixGetDepth(*ppix) != 32) {
1162 l_int32 i, n, maxw, maxh;
1163 l_float32 minval, maxval, absval, val, scale, start, del;
1164 PTA *pta1, *pta2, *ptad;
1166 PROCNAME(
"makePlotPtaFromNumaGen");
1169 return (
PTA *)ERROR_PTR(
"na not defined", procName, NULL);
1171 return (
PTA *)ERROR_PTR(
"invalid orient", procName, NULL);
1172 if (linewidth < 1) {
1173 L_WARNING(
"linewidth < 1; setting to 1\n", procName);
1176 if (linewidth > 7) {
1177 L_WARNING(
"linewidth > 7; setting to 7\n", procName);
1183 absval = L_MAX(L_ABS(minval), L_ABS(maxval));
1184 scale = (l_float32)max / (l_float32)absval;
1190 for (i = 0; i < n; i++) {
1193 ptaAddPt(pta1, start + i * del, refpos + scale * val);
1194 maxw = (del >= 0) ? start + n * del + linewidth
1195 : start + linewidth;
1196 maxh = refpos + max + linewidth;
1198 ptaAddPt(pta1, refpos + scale * val, start + i * del);
1199 maxw = refpos + max + linewidth;
1200 maxh = (del >= 0) ? start + n * del + linewidth
1201 : start + linewidth;
1206 if (linewidth > 1) {
1207 if (linewidth % 2 == 0)
1212 linewidth / 2, maxw, maxh);
1226 start, refpos + max);
1233 refpos + max, start);
1271 l_int32 i, n, x, y, w, h, d, maxval;
1273 PROCNAME(
"pixRenderPta");
1276 return ERROR_INT(
"pix not defined", procName, 1);
1277 if (pixGetColormap(pix))
1278 return ERROR_INT(
"pix is colormapped", procName, 1);
1280 return ERROR_INT(
"pta not defined", procName, 1);
1282 return ERROR_INT(
"invalid op", procName, 1);
1302 maxval = 0xffffffff;
1308 for (i = 0; i < n; i++) {
1310 if (x < 0 || x >= w)
1312 if (y < 0 || y >= h)
1362 l_int32 i, n, x, y, w, h, d, index;
1367 PROCNAME(
"pixRenderPtaArb");
1370 return ERROR_INT(
"pix not defined", procName, 1);
1372 return ERROR_INT(
"pta not defined", procName, 1);
1373 d = pixGetDepth(pix);
1374 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32)
1375 return ERROR_INT(
"depth not in {1,2,4,8,32}", procName, 1);
1382 cmap = pixGetColormap(pix);
1388 val = (rval + gval + bval) / (3 * 64);
1390 val = (rval + gval + bval) / (3 * 16);
1392 val = (rval + gval + bval) / 3;
1398 for (i = 0; i < n; i++) {
1400 if (x < 0 || x >= w)
1402 if (y < 0 || y >= h)
1438 l_int32 i, n, x, y, w, h;
1439 l_uint8 nrval, ngval, nbval;
1441 l_float32 frval, fgval, fbval;
1443 PROCNAME(
"pixRenderPtaBlend");
1446 return ERROR_INT(
"pix not defined", procName, 1);
1448 return ERROR_INT(
"pta not defined", procName, 1);
1449 if (pixGetDepth(pix) != 32)
1450 return ERROR_INT(
"depth not 32 bpp", procName, 1);
1451 if (fract < 0.0 || fract > 1.0) {
1452 L_WARNING(
"fract must be in [0.0, 1.0]; setting to 0.5\n", procName);
1458 frval = fract * rval;
1459 fgval = fract * gval;
1460 fbval = fract * bval;
1461 for (i = 0; i < n; i++) {
1463 if (x < 0 || x >= w)
1465 if (y < 0 || y >= h)
1469 nrval = (l_uint8)((1. - fract) * nrval + frval);
1471 ngval = (l_uint8)((1. - fract) * ngval + fgval);
1473 nbval = (l_uint8)((1. - fract) * nbval + fbval);
1506 PROCNAME(
"pixRenderLine");
1509 return ERROR_INT(
"pix not defined", procName, 1);
1511 L_WARNING(
"width must be > 0; setting to 1\n", procName);
1515 return ERROR_INT(
"invalid op", procName, 1);
1518 return ERROR_INT(
"pta not made", procName, 1);
1548 PROCNAME(
"pixRenderLineArb");
1551 return ERROR_INT(
"pix not defined", procName, 1);
1553 L_WARNING(
"width must be > 0; setting to 1\n", procName);
1558 return ERROR_INT(
"pta not made", procName, 1);
1590 PROCNAME(
"pixRenderLineBlend");
1593 return ERROR_INT(
"pix not defined", procName, 1);
1595 L_WARNING(
"width must be > 0; setting to 1\n", procName);
1600 return ERROR_INT(
"pta not made", procName, 1);
1624 PROCNAME(
"pixRenderBox");
1627 return ERROR_INT(
"pix not defined", procName, 1);
1629 return ERROR_INT(
"box not defined", procName, 1);
1631 L_WARNING(
"width < 1; setting to 1\n", procName);
1635 return ERROR_INT(
"invalid op", procName, 1);
1638 return ERROR_INT(
"pta not made", procName, 1);
1664 PROCNAME(
"pixRenderBoxArb");
1667 return ERROR_INT(
"pix not defined", procName, 1);
1669 return ERROR_INT(
"box not defined", procName, 1);
1671 L_WARNING(
"width < 1; setting to 1\n", procName);
1676 return ERROR_INT(
"pta not made", procName, 1);
1705 PROCNAME(
"pixRenderBoxBlend");
1708 return ERROR_INT(
"pix not defined", procName, 1);
1710 return ERROR_INT(
"box not defined", procName, 1);
1712 L_WARNING(
"width < 1; setting to 1\n", procName);
1717 return ERROR_INT(
"pta not made", procName, 1);
1741 PROCNAME(
"pixRenderBoxa");
1744 return ERROR_INT(
"pix not defined", procName, 1);
1746 return ERROR_INT(
"boxa not defined", procName, 1);
1748 L_WARNING(
"width < 1; setting to 1\n", procName);
1752 return ERROR_INT(
"invalid op", procName, 1);
1755 return ERROR_INT(
"pta not made", procName, 1);
1781 PROCNAME(
"pixRenderBoxaArb");
1784 return ERROR_INT(
"pix not defined", procName, 1);
1786 return ERROR_INT(
"boxa not defined", procName, 1);
1788 L_WARNING(
"width < 1; setting to 1\n", procName);
1793 return ERROR_INT(
"pta not made", procName, 1);
1824 PROCNAME(
"pixRenderBoxaBlend");
1827 return ERROR_INT(
"pix not defined", procName, 1);
1829 return ERROR_INT(
"boxa not defined", procName, 1);
1831 L_WARNING(
"width < 1; setting to 1\n", procName);
1836 return ERROR_INT(
"pta not made", procName, 1);
1866 PROCNAME(
"pixRenderHashBox");
1869 return ERROR_INT(
"pix not defined", procName, 1);
1871 return ERROR_INT(
"box not defined", procName, 1);
1873 return ERROR_INT(
"spacing not > 1", procName, 1);
1875 L_WARNING(
"width < 1; setting to 1\n", procName);
1880 return ERROR_INT(
"invalid line orientation", procName, 1);
1882 return ERROR_INT(
"invalid op", procName, 1);
1886 return ERROR_INT(
"pta not made", procName, 1);
1918 PROCNAME(
"pixRenderHashBoxArb");
1921 return ERROR_INT(
"pix not defined", procName, 1);
1923 return ERROR_INT(
"box not defined", procName, 1);
1925 return ERROR_INT(
"spacing not > 1", procName, 1);
1927 L_WARNING(
"width < 1; setting to 1\n", procName);
1932 return ERROR_INT(
"invalid line orientation", procName, 1);
1936 return ERROR_INT(
"pta not made", procName, 1);
1971 PROCNAME(
"pixRenderHashBoxBlend");
1974 return ERROR_INT(
"pix not defined", procName, 1);
1976 return ERROR_INT(
"box not defined", procName, 1);
1978 return ERROR_INT(
"spacing not > 1", procName, 1);
1980 L_WARNING(
"width < 1; setting to 1\n", procName);
1985 return ERROR_INT(
"invalid line orientation", procName, 1);
1989 return ERROR_INT(
"pta not made", procName, 1);
2035 PROCNAME(
"pixRenderHashMaskArb");
2038 return ERROR_INT(
"pix not defined", procName, 1);
2039 if (!pixm || pixGetDepth(pixm) != 1)
2040 return ERROR_INT(
"pixm not defined or not 1 bpp", procName, 1);
2042 return ERROR_INT(
"spacing not > 1", procName, 1);
2044 L_WARNING(
"width < 1; setting to 1\n", procName);
2049 return ERROR_INT(
"invalid line orientation", procName, 1);
2098 PROCNAME(
"pixRenderHashBoxa");
2101 return ERROR_INT(
"pix not defined", procName, 1);
2103 return ERROR_INT(
"boxa not defined", procName, 1);
2105 return ERROR_INT(
"spacing not > 1", procName, 1);
2107 L_WARNING(
"width < 1; setting to 1\n", procName);
2112 return ERROR_INT(
"invalid line orientation", procName, 1);
2114 return ERROR_INT(
"invalid op", procName, 1);
2118 return ERROR_INT(
"pta not made", procName, 1);
2152 PROCNAME(
"pixRenderHashBoxArb");
2155 return ERROR_INT(
"pix not defined", procName, 1);
2157 return ERROR_INT(
"boxa not defined", procName, 1);
2159 return ERROR_INT(
"spacing not > 1", procName, 1);
2161 L_WARNING(
"width < 1; setting to 1\n", procName);
2166 return ERROR_INT(
"invalid line orientation", procName, 1);
2170 return ERROR_INT(
"pta not made", procName, 1);
2207 PROCNAME(
"pixRenderHashBoxaBlend");
2210 return ERROR_INT(
"pix not defined", procName, 1);
2212 return ERROR_INT(
"boxa not defined", procName, 1);
2214 return ERROR_INT(
"spacing not > 1", procName, 1);
2216 L_WARNING(
"width < 1; setting to 1\n", procName);
2221 return ERROR_INT(
"invalid line orientation", procName, 1);
2225 return ERROR_INT(
"pta not made", procName, 1);
2256 PROCNAME(
"pixRenderPolyline");
2259 return ERROR_INT(
"pix not defined", procName, 1);
2261 return ERROR_INT(
"ptas not defined", procName, 1);
2263 L_WARNING(
"width < 1; setting to 1\n", procName);
2267 return ERROR_INT(
"invalid op", procName, 1);
2270 return ERROR_INT(
"pta not made", procName, 1);
2303 PROCNAME(
"pixRenderPolylineArb");
2306 return ERROR_INT(
"pix not defined", procName, 1);
2308 return ERROR_INT(
"ptas not defined", procName, 1);
2310 L_WARNING(
"width < 1; setting to 1\n", procName);
2315 return ERROR_INT(
"pta not made", procName, 1);
2348 PROCNAME(
"pixRenderPolylineBlend");
2351 return ERROR_INT(
"pix not defined", procName, 1);
2353 return ERROR_INT(
"ptas not defined", procName, 1);
2355 L_WARNING(
"width < 1; setting to 1\n", procName);
2360 return ERROR_INT(
"pta not made", procName, 1);
2388 PROCNAME(
"pixRenderGridArb");
2391 return ERROR_INT(
"pix not defined", procName, 1);
2392 if (nx < 1 || ny < 1)
2393 return ERROR_INT(
"nx, ny must be > 0", procName, 1);
2395 L_WARNING(
"width < 1; setting to 1\n", procName);
2401 return ERROR_INT(
"pta not made", procName, 1);
2443 l_int32 i, n, index, rval, gval, bval;
2448 PROCNAME(
"pixRenderRandomCmapPtaa");
2451 return (
PIX *)ERROR_PTR(
"pix not defined", procName, NULL);
2453 return (
PIX *)ERROR_PTR(
"ptaa not defined", procName, NULL);
2454 if (polyflag != 0 && width < 1) {
2455 L_WARNING(
"width < 1; setting to 1\n", procName);
2466 for (i = 0; i < n; i++) {
2467 index = 1 + (i % 254);
2511 l_float32 fxmin, fxmax, fymin, fymax;
2515 PROCNAME(
"pixRenderPolygon");
2517 if (pxmin) *pxmin = 0;
2518 if (pymin) *pymin = 0;
2520 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
2524 return (
PIX *)ERROR_PTR(
"pta1 not made", procName, NULL);
2531 ptaGetRange(pta2, &fxmin, &fxmax, &fymin, &fymax);
2532 if (pxmin) *pxmin = (l_int32)(fxmin + 0.5);
2533 if (pymin) *pymin = (l_int32)(fymin + 0.5);
2534 pixd =
pixCreate((l_int32)(fxmax + 0.5) + 1, (l_int32)(fymax + 0.5) + 1, 1);
2566 l_int32 w, h, i, n, inside, found;
2567 l_int32 *xstart, *xend;
2570 PROCNAME(
"pixFillPolygon");
2572 if (!pixs || (pixGetDepth(pixs) != 1))
2573 return (
PIX *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2575 return (
PIX *)ERROR_PTR(
"pta not defined", procName, NULL);
2577 return (
PIX *)ERROR_PTR(
"pta has < 2 pts", procName, NULL);
2580 xstart = (l_int32 *)LEPT_CALLOC(L_MAX(1, w / 2),
sizeof(l_int32));
2581 xend = (l_int32 *)LEPT_CALLOC(L_MAX(1, w / 2),
sizeof(l_int32));
2582 if (!xstart || !xend) {
2585 return (
PIX *)ERROR_PTR(
"xstart and xend not made", procName, NULL);
2592 for (i = ymin + 1; i < h; i++) {
2603 L_WARNING(
"nothing found to fill\n", procName);
2618 pixOr(pixd, pixd, pixs);
2652 l_int32 w, h, d, maxval, wpls, wpld, i, j, val, test;
2653 l_uint32 *datas, *datad, *lines, *lined;
2656 PROCNAME(
"pixRenderContours");
2659 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2660 if (pixGetColormap(pixs))
2661 return (
PIX *)ERROR_PTR(
"pixs has colormap", procName, NULL);
2663 if (d != 8 && d != 16)
2664 return (
PIX *)ERROR_PTR(
"pixs not 8 or 16 bpp", procName, NULL);
2665 if (outdepth != 1 && outdepth != d) {
2666 L_WARNING(
"invalid outdepth; setting to 1\n", procName);
2669 maxval = (1 << d) - 1;
2670 if (startval < 0 || startval > maxval)
2671 return (
PIX *)ERROR_PTR(
"startval not in [0 ... maxval]",
2674 return (
PIX *)ERROR_PTR(
"incr < 1", procName, NULL);
2681 pixCopyResolution(pixd, pixs);
2683 wpld = pixGetWpl(pixd);
2685 wpls = pixGetWpl(pixs);
2690 if (outdepth == 1) {
2691 for (i = 0; i < h; i++) {
2692 lines = datas + i * wpls;
2693 lined = datad + i * wpld;
2694 for (j = 0; j < w; j++) {
2698 test = (val - startval) % incr;
2704 for (i = 0; i < h; i++) {
2705 lines = datas + i * wpls;
2706 lined = datad + i * wpld;
2707 for (j = 0; j < w; j++) {
2711 test = (val - startval) % incr;
2720 if (outdepth == 1) {
2721 for (i = 0; i < h; i++) {
2722 lines = datas + i * wpls;
2723 lined = datad + i * wpld;
2724 for (j = 0; j < w; j++) {
2728 test = (val - startval) % incr;
2734 for (i = 0; i < h; i++) {
2735 lines = datas + i * wpls;
2736 lined = datad + i * wpld;
2737 for (j = 0; j < w; j++) {
2741 test = (val - startval) % incr;
2750 return (
PIX *)ERROR_PTR(
"pixs not 8 or 16 bpp", procName, NULL);
2776 l_float32 minval, maxval, incr;
2778 PROCNAME(
"fpixAutoRenderContours");
2781 return (
PIX *)ERROR_PTR(
"fpix not defined", procName, NULL);
2782 if (ncontours < 2 || ncontours > 500)
2783 return (
PIX *)ERROR_PTR(
"ncontours < 2 or > 500", procName, NULL);
2787 if (minval == maxval)
2788 return (
PIX *)ERROR_PTR(
"all values in fpix are equal", procName, NULL);
2789 incr = (maxval - minval) / ((l_float32)ncontours - 1);
2815 l_int32 i, j, w, h, wpls, wpld;
2816 l_float32 val, invincr, finter, above, below, diff;
2817 l_uint32 *datad, *lined;
2818 l_float32 *datas, *lines;
2822 PROCNAME(
"fpixRenderContours");
2825 return (
PIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2827 return (
PIX *)ERROR_PTR(
"incr <= 0.0", procName, NULL);
2832 if ((pixd =
pixCreate(w, h, 8)) == NULL)
2833 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2843 wpld = pixGetWpl(pixd);
2844 invincr = 1.0 / incr;
2845 for (i = 0; i < h; i++) {
2846 lines = datas + i * wpls;
2847 lined = datad + i * wpld;
2848 for (j = 0; j < w; j++) {
2850 finter = invincr * val;
2851 above = finter - floorf(finter);
2852 below = ceilf(finter) - finter;
2853 diff = L_MIN(above, below);
2854 if (diff <= proxim) {
2896 PROCNAME(
"pixGeneratePtaBoundary");
2898 if (!pixs || pixGetDepth(pixs) != 1)
2899 return (
PTA *)ERROR_PTR(
"pixs undefined or not 1 bpp", procName, NULL);
2901 L_WARNING(
"width < 1; setting to 1\n", procName);
2905 pix1 =
pixErodeBrick(NULL, pixs, 2 * width + 1, 2 * width + 1);
2906 pixXor(pix1, pix1, pixs);
#define GET_DATA_TWO_BYTES(pdata, n)
#define SET_DATA_BIT(pdata, n)
#define SET_DATA_TWO_BYTES(pdata, n, val)
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
l_ok boxIntersectByLine(BOX *box, l_int32 x, l_int32 y, l_float32 slope, l_int32 *px1, l_int32 *py1, l_int32 *px2, l_int32 *py2, l_int32 *pn)
boxIntersectByLine()
PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite)
pixcmapCreateRandom()
PIXCMAP * pixcmapCreate(l_int32 depth)
pixcmapCreate()
l_ok pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapAddNearestColor()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
l_ok pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapAddColor()
l_ok fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph)
fpixGetDimensions()
l_int32 fpixGetWpl(FPIX *fpix)
fpixGetWpl()
l_float32 * fpixGetData(FPIX *fpix)
fpixGetData()
l_ok fpixGetMax(FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc)
fpixGetMax()
l_ok fpixGetMin(FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc)
fpixGetMin()
l_ok pixRenderPolyline(PIX *pix, PTA *ptas, l_int32 width, l_int32 op, l_int32 closeflag)
pixRenderPolyline()
l_ok pixRenderHashBoxaBlend(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract)
pixRenderHashBoxaBlend()
l_ok pixRenderGridArb(PIX *pix, l_int32 nx, l_int32 ny, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderGridArb()
l_ok pixRenderHashBoxBlend(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval, l_float32 fract)
pixRenderHashBoxBlend()
l_ok pixRenderHashBox(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op)
pixRenderHashBox()
l_ok pixRenderPtaArb(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderPtaArb()
l_ok locatePtRadially(l_int32 xr, l_int32 yr, l_float64 dist, l_float64 radang, l_float64 *px, l_float64 *py)
locatePtRadially()
l_ok pixRenderBoxBlend(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract)
pixRenderBoxBlend()
l_ok pixRenderPtaBlend(PIX *pix, PTA *pta, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract)
pixRenderPtaBlend()
l_ok pixRenderLine(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_int32 op)
pixRenderLine()
l_ok pixRenderHashBoxa(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 op)
pixRenderHashBoxa()
PTA * convertPtaLineTo4cc(PTA *ptas)
convertPtaLineTo4cc()
l_ok pixRenderHashBoxaArb(PIX *pix, BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval)
pixRenderHashBoxaArb()
PTA * generatePtaBox(BOX *box, l_int32 width)
generatePtaBox()
PIX * pixRenderRandomCmapPtaa(PIX *pix, PTAA *ptaa, l_int32 polyflag, l_int32 width, l_int32 closeflag)
pixRenderRandomCmapPtaa()
l_ok pixRenderBox(PIX *pix, BOX *box, l_int32 width, l_int32 op)
pixRenderBox()
l_ok pixRenderPolylineArb(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_int32 closeflag)
pixRenderPolylineArb()
PTAA * generatePtaaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline)
generatePtaaHashBoxa()
PTA * generatePtaGrid(l_int32 w, l_int32 h, l_int32 nx, l_int32 ny, l_int32 width)
generatePtaGrid()
PTA * generatePtaPolyline(PTA *ptas, l_int32 width, l_int32 closeflag, l_int32 removedups)
generatePtaPolyline()
l_ok pixRenderPolylineBlend(PIX *pix, PTA *ptas, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 closeflag, l_int32 removedups)
pixRenderPolylineBlend()
l_ok pixRenderPlotFromNuma(PIX **ppix, NUMA *na, l_int32 plotloc, l_int32 linewidth, l_int32 max, l_uint32 color)
pixRenderPlotFromNuma()
PTA * pixGeneratePtaBoundary(PIX *pixs, l_int32 width)
pixGeneratePtaBoundary()
l_ok pixRenderPlotFromNumaGen(PIX **ppix, NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref, l_uint32 color)
pixRenderPlotFromNumaGen()
l_ok pixRenderHashBoxArb(PIX *pix, BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval)
pixRenderHashBoxArb()
l_ok pixRenderHashMaskArb(PIX *pix, PIX *pixm, l_int32 x, l_int32 y, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 rval, l_int32 gval, l_int32 bval)
pixRenderHashMaskArb()
PTA * makePlotPtaFromNuma(NUMA *na, l_int32 size, l_int32 plotloc, l_int32 linewidth, l_int32 max)
makePlotPtaFromNuma()
l_ok pixRenderLineArb(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderLineArb()
PTAA * generatePtaaBoxa(BOXA *boxa)
generatePtaaBoxa()
PTA * generatePtaLineFromPt(l_int32 x, l_int32 y, l_float64 length, l_float64 radang)
generatePtaLineFromPt()
PIX * pixFillPolygon(PIX *pixs, PTA *pta, l_int32 xmin, l_int32 ymin)
pixFillPolygon()
l_ok pixRenderLineBlend(PIX *pix, l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract)
pixRenderLineBlend()
PTA * generatePtaLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2)
generatePtaLine()
PIX * fpixAutoRenderContours(FPIX *fpix, l_int32 ncontours)
fpixAutoRenderContours()
l_ok pixRenderBoxaBlend(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval, l_float32 fract, l_int32 removedups)
pixRenderBoxaBlend()
PTA * generatePtaHashBox(BOX *box, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline)
generatePtaHashBox()
l_ok pixRenderBoxArb(PIX *pix, BOX *box, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxArb()
l_ok pixRenderBoxa(PIX *pix, BOXA *boxa, l_int32 width, l_int32 op)
pixRenderBoxa()
PIX * pixRenderPolygon(PTA *ptas, l_int32 width, l_int32 *pxmin, l_int32 *pymin)
pixRenderPolygon()
PTA * makePlotPtaFromNumaGen(NUMA *na, l_int32 orient, l_int32 linewidth, l_int32 refpos, l_int32 max, l_int32 drawref)
makePlotPtaFromNumaGen()
PTA * generatePtaHashBoxa(BOXA *boxa, l_int32 spacing, l_int32 width, l_int32 orient, l_int32 outline, l_int32 removedups)
generatePtaHashBoxa()
PTA * generatePtaWideLine(l_int32 x1, l_int32 y1, l_int32 x2, l_int32 y2, l_int32 width)
generatePtaWideLine()
l_ok pixRenderBoxaArb(PIX *pix, BOXA *boxa, l_int32 width, l_uint8 rval, l_uint8 gval, l_uint8 bval)
pixRenderBoxaArb()
PTA * generatePtaBoxa(BOXA *boxa, l_int32 width, l_int32 removedups)
generatePtaBoxa()
l_ok pixRenderPta(PIX *pix, PTA *pta, l_int32 op)
pixRenderPta()
PIX * pixRenderContours(PIX *pixs, l_int32 startval, l_int32 incr, l_int32 outdepth)
pixRenderContours()
PTA * generatePtaFilledCircle(l_int32 radius)
generatePtaFilledCircle()
PIX * fpixRenderContours(FPIX *fpixs, l_float32 incr, l_float32 proxim)
fpixRenderContours()
PTA * generatePtaFilledSquare(l_int32 side)
generatePtaFilledSquare()
PIX * pixErodeBrick(PIX *pixd, PIX *pixs, l_int32 hsize, l_int32 vsize)
pixErodeBrick()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok numaGetParameters(NUMA *na, l_float32 *pstartx, l_float32 *pdelx)
numaGetParameters()
l_ok numaGetMin(NUMA *na, l_float32 *pminval, l_int32 *piminloc)
numaGetMin()
l_ok numaGetMax(NUMA *na, l_float32 *pmaxval, l_int32 *pimaxloc)
numaGetMax()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
l_ok pixSetColormap(PIX *pix, PIXCMAP *colormap)
pixSetColormap()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok pixClearPixel(PIX *pix, l_int32 x, l_int32 y)
pixClearPixel()
l_ok pixFlipPixel(PIX *pix, l_int32 x, l_int32 y)
pixFlipPixel()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
PIX * pixOr(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixOr()
PIX * pixXor(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixXor()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
PTA * ptaClone(PTA *pta)
ptaClone()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
PTA * ptaCreate(l_int32 n)
ptaCreate()
void ptaDestroy(PTA **ppta)
ptaDestroy()
PTA * ptaGetPixelsFromPix(PIX *pixs, BOX *box)
ptaGetPixelsFromPix()
l_int32 ptaPtInsidePolygon(PTA *pta, l_float32 x, l_float32 y, l_int32 *pinside)
ptaPtInsidePolygon()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
l_ok ptaGetRange(PTA *pta, l_float32 *pminx, l_float32 *pmaxx, l_float32 *pminy, l_float32 *pmaxy)
ptaGetRange()
PTA * ptaReplicatePattern(PTA *ptas, PIX *pixp, PTA *ptap, l_int32 cx, l_int32 cy, l_int32 w, l_int32 h)
ptaReplicatePattern()
PTA * ptaCropToMask(PTA *ptas, PIX *pixm)
ptaCropToMask()
l_ok ptaRemoveDupsByAset(PTA *ptas, PTA **pptad)
ptaRemoveDupsByAset()
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 pixFindHorizontalRuns(PIX *pix, l_int32 y, l_int32 *xstart, l_int32 *xend, l_int32 *pn)
pixFindHorizontalRuns()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()