251 #include "config_auto.h" 255 #include "allheaders.h" 257 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
261 static const l_int32 NMAX_HOLES = 150;
276 static const l_int32 xpostab[] = {-1, -1, 0, 1, 1, 1, 0, -1};
277 static const l_int32 ypostab[] = {0, -1, -1, -1, 0, 1, 1, 1};
278 static const l_int32 qpostab[] = {6, 6, 0, 0, 2, 2, 4, 4};
283 #ifndef NO_CONSOLE_IO 284 #define DEBUG_PRINT 0 304 PROCNAME(
"ccbaCreate");
307 n = INITIAL_PTR_ARRAYSIZE;
312 ccba->
w = pixGetWidth(pixs);
313 ccba->
h = pixGetHeight(pixs);
317 if ((ccba->
ccb = (
CCBORD **)LEPT_CALLOC(n,
sizeof(
CCBORD *))) == NULL) {
319 return (
CCBORDA *)ERROR_PTR(
"ccba ptrs not made", procName, NULL);
337 PROCNAME(
"ccbaDestroy");
340 L_WARNING(
"ptr address is NULL!\n", procName);
344 if ((ccba = *pccba) == NULL)
348 for (i = 0; i < ccba->
n; i++)
350 LEPT_FREE(ccba->
ccb);
371 PROCNAME(
"ccbCreate");
374 if (pixGetDepth(pixs) != 1)
375 return (
CCBORD *)ERROR_PTR(
"pixs not binary", procName, NULL);
378 if ((ccb = (
CCBORD *)LEPT_CALLOC(1,
sizeof(
CCBORD))) == NULL)
379 return (
CCBORD *)ERROR_PTR(
"ccb not made", procName, NULL);
384 return (
CCBORD *)ERROR_PTR(
"boxa not made", procName, NULL);
387 return (
CCBORD *)ERROR_PTR(
"start pta not made", procName, NULL);
390 return (
CCBORD *)ERROR_PTR(
"local ptaa not made", procName, NULL);
408 PROCNAME(
"ccbDestroy");
411 L_WARNING(
"ptr address is NULL!\n", procName);
415 if ((ccb = *pccb) == NULL)
459 PROCNAME(
"ccbaAddCcb");
462 return ERROR_INT(
"ccba not defined", procName, 1);
464 return ERROR_INT(
"ccb not defined", procName, 1);
484 PROCNAME(
"ccbaExtendArray");
487 return ERROR_INT(
"ccba not defined", procName, 1);
492 return ERROR_INT(
"new ptr array not returned", procName, 1);
513 PROCNAME(
"ccbaGetCount");
516 return ERROR_INT(
"ccba not defined", procName, 0);
540 PROCNAME(
"ccbaGetCcb");
543 return (
CCBORD *)ERROR_PTR(
"ccba not defined", procName, NULL);
544 if (index < 0 || index >= ccba->
n)
545 return (
CCBORD *)ERROR_PTR(
"index out of bounds", procName, NULL);
547 ccb = ccba->
ccb[index];
574 PROCNAME(
"pixGetAllCCBorders");
577 return (
CCBORDA *)ERROR_PTR(
"pixs not defined", procName, NULL);
578 if (pixGetDepth(pixs) != 1)
579 return (
CCBORDA *)ERROR_PTR(
"pixs not binary", procName, NULL);
582 return (
CCBORDA *)ERROR_PTR(
"boxa not made", procName, NULL);
588 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
590 for (i = 0; i < n; i++) {
595 return (
CCBORDA *)ERROR_PTR(
"pix not found", procName, NULL);
602 return (
CCBORDA *)ERROR_PTR(
"box not found", procName, NULL);
611 return (
CCBORDA *)ERROR_PTR(
"ccb not made", procName, NULL);
653 l_int32 allzero, i, x, xh, w, nh;
663 PROCNAME(
"pixGetCCBorders");
666 return (
CCBORD *)ERROR_PTR(
"pixs not defined", procName, NULL);
668 return (
CCBORD *)ERROR_PTR(
"box not defined", procName, NULL);
669 if (pixGetDepth(pixs) != 1)
670 return (
CCBORD *)ERROR_PTR(
"pixs not binary", procName, NULL);
674 return (
CCBORD *)ERROR_PTR(
"pixs all 0", procName, NULL);
677 return (
CCBORD *)ERROR_PTR(
"ccb not made", procName, NULL);
685 return (
CCBORD *)ERROR_PTR(
"pixh not made", procName, NULL);
694 if ((boxa =
pixConnComp(pixh, &pixa, 4)) == NULL) {
697 return (
CCBORD *)ERROR_PTR(
"boxa not made", procName, NULL);
712 w = pixGetWidth(pixs);
713 for (i = 0; i < nh; i++) {
717 for (x = 0; x < boxt->
w; x++) {
725 L_WARNING(
"no hole pixel found!\n", procName);
728 for (x = xh + boxt->
x; x < w; x++) {
735 boxe =
boxCreate(boxt->
x - 1, boxt->
y - 1, boxt->
w + 2, boxt->
h + 2);
739 fprintf(stderr,
"xs = %d, ys = %d\n", xs, ys);
771 PROCNAME(
"pixGetOuterBordersPtaa");
774 return (
PTAA *)ERROR_PTR(
"pixs not defined", procName, NULL);
775 if (pixGetDepth(pixs) != 1)
776 return (
PTAA *)ERROR_PTR(
"pixs not binary", procName, NULL);
783 return (
PTAA *)ERROR_PTR(
"pixs empty", procName, NULL);
787 for (i = 0; i < n; i++) {
824 l_int32 allzero, x, y;
829 PROCNAME(
"pixGetOuterBorderPta");
832 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
833 if (pixGetDepth(pixs) != 1)
834 return (
PTA *)ERROR_PTR(
"pixs not binary", procName, NULL);
838 return (
PTA *)ERROR_PTR(
"pixs all 0", procName, NULL);
841 return (
PTA *)ERROR_PTR(
"ccb not made", procName, NULL);
843 boxt =
boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs));
852 return (
PTA *)ERROR_PTR(
"ptaloc not made", procName, NULL);
898 l_int32 fpx, fpy, spx, spy, qpos;
899 l_int32 px, py, npx, npy;
905 PROCNAME(
"pixGetOuterBorder");
908 return ERROR_INT(
"ccb not defined", procName, 1);
910 return ERROR_INT(
"pixs not defined", procName, 1);
912 return ERROR_INT(
"box not defined", procName, 1);
916 return ERROR_INT(
"pixs not made", procName, 1);
919 return ERROR_INT(
"no start pixel found", procName, 1);
934 wpl = pixGetWpl(pixb);
950 if (px == fpx && py == fpy && npx == spx && npy == spy)
988 l_int32 fpx, fpy, spx, spy, qpos;
989 l_int32 px, py, npx, npy;
994 PROCNAME(
"pixGetHoleBorder");
997 return ERROR_INT(
"ccb not defined", procName, 1);
999 return ERROR_INT(
"pixs not defined", procName, 1);
1001 return ERROR_INT(
"box not defined", procName, 1);
1013 return ERROR_INT(
"pta not made", procName, 1);
1017 w = pixGetWidth(pixs);
1018 h = pixGetHeight(pixs);
1020 wpl = pixGetWpl(pixs);
1025 return ERROR_INT(
"isolated hole border point!", procName, 1);
1035 if (px == fpx && py == fpy && npx == spx && npy == spy)
1074 l_int32 qpos, i, pos, npx, npy, val;
1078 for (i = 1; i < 8; i++) {
1079 pos = (qpos + i) % 8;
1080 npx = px + xpostab[pos];
1081 npy = py + ypostab[pos];
1082 line = data + npy * wpl;
1087 *pqpos = qpostab[pos];
1130 }
else if (dx * dy == -1) {
1133 }
else if (dx == 0) {
1162 l_int32 ncc, nb, n, i, j, k, xul, yul, x, y;
1164 PTAA *ptaal, *ptaag;
1167 PROCNAME(
"ccbaGenerateGlobalLocs");
1170 return ERROR_INT(
"ccba not defined", procName, 1);
1173 for (i = 0; i < ncc; i++) {
1185 return ERROR_INT(
"ptaag not made", procName, 1);
1189 for (j = 0; j < nb; j++) {
1193 return ERROR_INT(
"ptag not made", procName, 1);
1195 for (k = 0; k < n; k++) {
1233 l_int32 ncc, nb, n, i, j, k;
1234 l_int32 px, py, cx, cy, stepdir;
1235 l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}};
1242 PROCNAME(
"ccbaGenerateStepChains");
1245 return ERROR_INT(
"ccba not defined", procName, 1);
1248 for (i = 0; i < ncc; i++) {
1257 return ERROR_INT(
"naa not made", procName, 1);
1261 for (j = 0; j < nb; j++) {
1268 return ERROR_INT(
"na not made", procName, 1);
1270 for (k = 1; k < n; k++) {
1272 stepdir = dirtab[1 + cy - py][1 + cx - px];
1308 l_int32 ncc, nb, n, i, j, k;
1309 l_int32 xul, yul, xstart, ystart, x, y, stepdir;
1317 PROCNAME(
"ccbaStepChainsToPixCoords");
1320 return ERROR_INT(
"ccba not defined", procName, 1);
1321 if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS)
1322 return ERROR_INT(
"coordtype not valid", procName, 1);
1325 for (i = 0; i < ncc; i++) {
1327 if ((naa = ccb->
step) == NULL)
1328 return ERROR_INT(
"step numaa not found", procName, 1);
1329 if ((boxa = ccb->
boxa) == NULL)
1330 return ERROR_INT(
"boxa not found", procName, 1);
1331 if ((ptas = ccb->
start) == NULL)
1332 return ERROR_INT(
"start pta not found", procName, 1);
1336 if (coordtype == CCB_LOCAL_COORDS) {
1342 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1348 return ERROR_INT(
"ptaan not made", procName, 1);
1349 if (coordtype == CCB_LOCAL_COORDS) {
1360 for (j = 0; j < nb; j++) {
1364 return ERROR_INT(
"ptan not made", procName, 1);
1370 for (k = 0; k < n; k++) {
1372 x += xpostab[stepdir];
1373 y += ypostab[stepdir];
1408 l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely;
1409 l_int32 xp, yp, delxp, delyp;
1413 PROCNAME(
"ccbaGenerateSPGlobalLocs");
1416 return ERROR_INT(
"ccba not defined", procName, 1);
1420 return ERROR_INT(
"no ccb", procName, 1);
1426 for (i = 0; i < ncc; i++) {
1431 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1439 return ERROR_INT(
"ptag not made", procName, 1);
1443 if (ptsflag == CCB_SAVE_ALL_PTS) {
1444 for (j = 0; j < npt; j++) {
1450 ptaAddPt(ptag, xp + xul, yp + yul);
1454 }
else if (npt > 2) {
1460 for (j = 2; j < npt; j++) {
1464 if (delx != delxp || dely != delyp)
1465 ptaAddPt(ptag, xp + xul, yp + yul);
1471 ptaAddPt(ptag, xp + xul, yp + yul);
1524 l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes;
1525 l_int32 x, y, xl, yl, xf, yf;
1529 PTA *pta, *ptac, *ptah;
1538 PROCNAME(
"ccbaGenerateSinglePath");
1541 return ERROR_INT(
"ccba not defined", procName, 1);
1545 for (i = 0; i < ncc; i++) {
1547 if ((ptaa = ccb->
local) == NULL) {
1548 L_WARNING(
"local pixel loc array not found\n", procName);
1561 if (nb == 1 || nb > NMAX_HOLES + 1) {
1574 for (j = 1; j < nb; j++) {
1605 for (k = 0; k < npt; k++) {
1612 state = L_NOT_FOUND;
1613 for (j = 0; j < nb - 1; j++) {
1615 if (x == xl && y == yl) {
1635 if (state == L_NOT_FOUND)
1648 L_WARNING(
"***** %d lost holes *****\n", procName, lostholes);
1686 l_int32 w, h, nc, x, y, xl, yl, xmid, ymid;
1690 PROCNAME(
"getCutPathForHole");
1693 return (
PTA *)ERROR_PTR(
"pix not defined", procName, NULL);
1695 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
1697 return (
PTA *)ERROR_PTR(
"boxinner not defined", procName, NULL);
1699 w = pixGetWidth(pix);
1700 h = pixGetHeight(pix);
1703 return (
PTA *)ERROR_PTR(
"ptac not made", procName, NULL);
1704 xmid = boxinner->
x + boxinner->
w / 2;
1705 ymid = boxinner->
y + boxinner->
h / 2;
1708 for (y = ymid; y >= 0; y--) {
1715 for (y = y - 1; y >= 0; y--) {
1732 for (y = ymid; y < h; y++) {
1739 for (y = y + 1; y < h; y++) {
1756 for (x = xmid; x >= 0; x--) {
1763 for (x = x - 1; x >= 0; x--) {
1780 for (x = xmid; x < w; x++) {
1787 for (x = x + 1; x < w; x++) {
1804 L_WARNING(
"no path found\n", procName);
1830 l_int32 ncc, nb, n, i, j, k, x, y;
1836 PROCNAME(
"ccbaDisplayBorder");
1839 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1841 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1842 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1844 for (i = 0; i < ncc; i++) {
1846 if ((ptaa = ccb->
global) == NULL) {
1847 L_WARNING(
"global pixel loc array not found", procName);
1851 for (j = 0; j < nb; j++) {
1854 for (k = 0; k < n; k++) {
1883 l_int32 ncc, npt, i, j, x, y;
1888 PROCNAME(
"ccbaDisplaySPBorder");
1891 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1893 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1894 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1896 for (i = 0; i < ncc; i++) {
1898 if ((ptag = ccb->
spglobal) == NULL) {
1899 L_WARNING(
"spglobal pixel loc array not found\n", procName);
1903 for (j = 0; j < npt; j++) {
1973 l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h;
1974 l_int32 fpx, fpy, spx, spy, xs, ys;
1978 PIX *pixd, *pixt, *pixh;
1982 PROCNAME(
"ccbaDisplayImage1");
1985 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1987 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1988 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1990 for (i = 0; i < ncc; i++) {
1992 if ((boxa = ccb->
boxa) == NULL) {
1994 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
1998 if ((ptaa = ccb->
local) == NULL) {
1999 L_WARNING(
"local chain array not found\n", procName);
2004 for (j = 0; j < nb; j++) {
2007 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2021 if ((pixt =
pixCreate(w, h, 1)) == NULL) {
2023 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
2027 for (k = 0; k < n; k++) {
2048 return (
PIX *)ERROR_PTR(
"pixh not made", procName, NULL);
2099 l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h;
2100 l_int32 fpx, fpy, spx, spy, xs, ys;
2103 PIX *pixd, *pixc, *pixs;
2107 PROCNAME(
"ccbaDisplayImage2");
2110 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
2112 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
2113 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2115 for (i = 0; i < ncc; i++) {
2119 if ((boxa = ccb->
boxa) == NULL) {
2122 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
2127 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2132 if ((ptaa = ccb->
local) == NULL) {
2136 L_WARNING(
"local chain array not found\n", procName);
2140 for (j = 0; j < nb; j++) {
2145 for (k = 0; k < n; k++) {
2151 }
else if (k == 1) {
2200 PROCNAME(
"ccbaWrite");
2203 return ERROR_INT(
"filename not defined", procName, 1);
2205 return ERROR_INT(
"ccba not defined", procName, 1);
2208 return ERROR_INT(
"stream not opened", procName, 1);
2211 return ERROR_INT(
"ccba not written to stream", procName, 1);
2252 l_uint8 *datain, *dataout;
2253 l_int32 i, j, k, bx, by, bw, bh, val, startx, starty;
2256 size_t inbytes, outbytes;
2263 PROCNAME(
"ccbaWriteStream");
2266 return ERROR_INT(
"no libz: can't write data", procName, 1);
2270 return ERROR_INT(
"stream not open", procName, 1);
2272 return ERROR_INT(
"ccba not defined", procName, 1);
2275 return ERROR_INT(
"bbuf not made", procName, 1);
2278 snprintf(strbuf,
sizeof(strbuf),
"ccba: %7d cc\n", ncc);
2280 w = pixGetWidth(ccba->
pix);
2281 h = pixGetHeight(ccba->
pix);
2284 for (i = 0; i < ncc; i++) {
2288 return ERROR_INT(
"bounding box not found", procName, 1);
2294 if ((naa = ccb->
step) == NULL) {
2301 for (j = 0; j < nb; j++) {
2307 for (k = 0; k < n; k++) {
2310 bval = (l_uint8)val << 4;
2312 bval |= (l_uint8)val;
2331 fwrite(dataout, 1, outbytes, fp);
2353 PROCNAME(
"ccbaRead");
2356 return (
CCBORDA *)ERROR_PTR(
"filename not defined", procName, NULL);
2359 return (
CCBORDA *)ERROR_PTR(
"stream not opened", procName, NULL);
2364 return (
CCBORDA *)ERROR_PTR(
"ccba not returned", procName, NULL);
2398 l_uint8 *datain, *dataout;
2399 l_int32 i, j, startx, starty;
2400 l_int32 offset, nib1, nib2;
2402 l_uint32 width, height, w, h, xoff, yoff;
2403 size_t inbytes, outbytes;
2410 PROCNAME(
"ccbaReadStream");
2413 return (
CCBORDA *)ERROR_PTR(
"no libz: can't read data", procName, NULL);
2417 return (
CCBORDA *)ERROR_PTR(
"stream not open", procName, NULL);
2420 return (
CCBORDA *)ERROR_PTR(
"data not read from file", procName, NULL);
2424 return (
CCBORDA *)ERROR_PTR(
"dataout not made", procName, NULL);
2427 memcpy(strbuf, dataout, offset);
2429 if (memcmp(strbuf,
"ccba:", 5) != 0) {
2431 return (
CCBORDA *)ERROR_PTR(
"file not type ccba", procName, NULL);
2433 sscanf(strbuf,
"ccba: %7d cc\n", &ncc);
2435 if ((ccba =
ccbaCreate(NULL, ncc)) == NULL) {
2437 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
2440 memcpy(&width, dataout + offset, 4);
2442 memcpy(&height, dataout + offset, 4);
2448 for (i = 0; i < ncc; i++) {
2452 memcpy(&xoff, dataout + offset, 4);
2454 memcpy(&yoff, dataout + offset, 4);
2456 memcpy(&w, dataout + offset, 4);
2458 memcpy(&h, dataout + offset, 4);
2465 memcpy(&nb, dataout + offset, 4);
2471 for (j = 0; j < nb; j++) {
2472 memcpy(&startx, dataout + offset, 4);
2474 memcpy(&starty, dataout + offset, 4);
2482 bval = *(dataout + offset);
2520 PROCNAME(
"ccbaWriteSVG");
2523 return ERROR_INT(
"filename not defined", procName, 1);
2525 return ERROR_INT(
"ccba not defined", procName, 1);
2528 return ERROR_INT(
"svgstr not made", procName, 1);
2551 char line0[] =
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
2552 char line1[] =
"<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 20000303 Stylable//EN\" \"http://www.w3.org/TR/2000/03/WD-SVG-20000303/DTD/svg-20000303-stylable.dtd\">";
2553 char line2[] =
"<svg>";
2554 char line3[] =
"<polygon style=\"stroke-width:1;stroke:black;\" points=\"";
2555 char line4[] =
"\" />";
2556 char line5[] =
"</svg>";
2558 l_int32 i, j, ncc, npt, x, y;
2563 PROCNAME(
"ccbaWriteSVGString");
2566 return (
char *)ERROR_PTR(
"filename not defined", procName, NULL);
2568 return (
char *)ERROR_PTR(
"ccba not defined", procName, NULL);
2575 for (i = 0; i < ncc; i++) {
2578 return (
char *)ERROR_PTR(
"ccb not found", procName, NULL);
2580 if ((pta = ccb->
spglobal) == NULL) {
2583 return (
char *)ERROR_PTR(
"spglobal not made", procName, NULL);
2587 for (j = 0; j < npt; j++) {
2589 snprintf(smallbuf,
sizeof(smallbuf),
"%0d,%0d", x, y);
l_int32 ccbaGetCount(CCBORDA *ccba)
ccbaGetCount()
l_ok ccbaGenerateStepChains(CCBORDA *ccba)
ccbaGenerateStepChains()
l_uint8 * zlibCompress(l_uint8 *datain, size_t nin, size_t *pnout)
zlibCompress()
char * sarrayToString(SARRAY *sa, l_int32 addnlflag)
sarrayToString()
PIX * pixHolesByFilling(PIX *pixs, l_int32 connectivity)
pixHolesByFilling()
CCBORDA * ccbaCreate(PIX *pixs, l_int32 n)
ccbaCreate()
L_BBUFFER * bbufferCreate(const l_uint8 *indata, l_int32 nalloc)
bbufferCreate()
l_ok ccbaGenerateSPGlobalLocs(CCBORDA *ccba, l_int32 ptsflag)
ccbaGenerateSPGlobalLocs()
PIX * ccbaDisplaySPBorder(CCBORDA *ccba)
ccbaDisplaySPBorder()
CCBORD * ccbCreate(PIX *pixs)
ccbCreate()
l_ok ptaAddPt(PTA *pta, l_float32 x, l_float32 y)
ptaAddPt()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
void ccbaDestroy(CCBORDA **pccba)
ccbaDestroy()
l_int32 nextOnPixelInRaster(PIX *pixs, l_int32 xstart, l_int32 ystart, l_int32 *px, l_int32 *py)
nextOnPixelInRaster()
PIX * ccbaDisplayImage1(CCBORDA *ccba)
ccbaDisplayImage1()
CCBORD * pixGetCCBorders(PIX *pixs, BOX *box)
pixGetCCBorders()
PIX * ccbaDisplayBorder(CCBORDA *ccba)
ccbaDisplayBorder()
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()
PTA * ptaCreate(l_int32 n)
ptaCreate()
CCBORDA * ccbaRead(const char *filename)
ccbaRead()
CCBORDA * ccbaReadStream(FILE *fp)
ccbaReadStream()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
SARRAY * sarrayCreate(l_int32 n)
sarrayCreate()
PIX * pixInvert(PIX *pixd, PIX *pixs)
pixInvert()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetBox()
l_ok ccbaWriteStream(FILE *fp, CCBORDA *ccba)
ccbaWriteStream()
void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys)
locateOutsideSeedPixel()
l_ok ccbaWriteSVG(const char *filename, CCBORDA *ccba)
ccbaWriteSVG()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
PIX * ccbaDisplayImage2(CCBORDA *ccba)
ccbaDisplayImage2()
char * ccbaWriteSVGString(const char *filename, CCBORDA *ccba)
ccbaWriteSVGString()
void numaaDestroy(NUMAA **pnaa)
numaaDestroy()
l_ok ptaJoin(PTA *ptad, PTA *ptas, l_int32 istart, l_int32 iend)
ptaJoin()
l_uint8 * bbufferDestroyAndSaveData(L_BBUFFER **pbb, size_t *pnbytes)
bbufferDestroyAndSaveData()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
static l_int32 ccbaExtendArray(CCBORDA *ccba)
ccbaExtendArray()
BOX * boxClone(BOX *box)
boxClone()
l_ok l_binaryWrite(const char *filename, const char *operation, const void *data, size_t nbytes)
l_binaryWrite()
BOXA * pixConnComp(PIX *pixs, PIXA **ppixa, l_int32 connectivity)
pixConnComp()
NUMA * numaaGetNuma(NUMAA *naa, l_int32 index, l_int32 accessflag)
numaaGetNuma()
PTA * ptaaGetPta(PTAA *ptaa, l_int32 index, l_int32 accessflag)
ptaaGetPta()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok sarrayAddString(SARRAY *sa, const char *string, l_int32 copyflag)
sarrayAddString()
PTA * ptaClone(PTA *pta)
ptaClone()
CCBORDA * pixGetAllCCBorders(PIX *pixs)
pixGetAllCCBorders()
l_ok boxaGetBoxGeometry(BOXA *boxa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxaGetBoxGeometry()
l_ok pixSetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 val)
pixSetPixel()
PTA * getCutPathForHole(PIX *pix, PTA *pta, BOX *boxinner, l_int32 *pdir, l_int32 *plen)
getCutPathForHole()
void ptaaDestroy(PTAA **pptaa)
ptaaDestroy()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
PTA * ptaCyclicPerm(PTA *ptas, l_int32 xs, l_int32 ys)
ptaCyclicPerm()
l_int32 ptaContainsPt(PTA *pta, l_int32 x, l_int32 y)
ptaContainsPt()
l_int32 findNextBorderPixel(l_int32 w, l_int32 h, l_uint32 *data, l_int32 wpl, l_int32 px, l_int32 py, l_int32 *pqpos, l_int32 *pnpx, l_int32 *pnpy)
findNextBorderPixel()
CCBORD * ccbaGetCcb(CCBORDA *ccba, l_int32 index)
ccbaGetCcb()
l_ok ccbaGenerateGlobalLocs(CCBORDA *ccba)
ccbaGenerateGlobalLocs()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
l_uint8 * zlibUncompress(l_uint8 *datain, size_t nin, size_t *pnout)
zlibUncompress()
PIX * pixFillClosedBorders(PIX *pixs, l_int32 connectivity)
pixFillClosedBorders()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
l_ok ccbaWrite(const char *filename, CCBORDA *ccba)
ccbaWrite()
void numaDestroy(NUMA **pna)
numaDestroy()
void bbufferDestroy(L_BBUFFER **pbb)
bbufferDestroy()
l_ok pixGetPixel(PIX *pix, l_int32 x, l_int32 y, l_uint32 *pval)
pixGetPixel()
l_ok bbufferRead(L_BBUFFER *bb, l_uint8 *src, l_int32 nbytes)
bbufferRead()
PIX * pixSeedfillBinary(PIX *pixd, PIX *pixs, PIX *pixm, l_int32 connectivity)
pixSeedfillBinary()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 ptaaGetCount(PTAA *ptaa)
ptaaGetCount()
l_ok ptaEmpty(PTA *pta)
ptaEmpty()
l_int32 numaaGetCount(NUMAA *naa)
numaaGetCount()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_ok pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys)
pixGetHoleBorder()
void ccbDestroy(CCBORD **pccb)
ccbDestroy()
void ptaDestroy(PTA **ppta)
ptaDestroy()
l_ok pixZero(PIX *pix, l_int32 *pempty)
pixZero()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
l_ok ccbaStepChainsToPixCoords(CCBORDA *ccba, l_int32 coordtype)
ccbaStepChainsToPixCoords()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
ptaTransform()
l_ok ptaGetIPt(PTA *pta, l_int32 index, l_int32 *px, l_int32 *py)
ptaGetIPt()
l_ok boxPrintStreamInfo(FILE *fp, BOX *box)
boxPrintStreamInfo()
l_ok ptaaAddPta(PTAA *ptaa, PTA *pta, l_int32 copyflag)
ptaaAddPta()
l_ok ccbaGenerateSinglePath(CCBORDA *ccba)
ccbaGenerateSinglePath()
PTA * pixGetOuterBorderPta(PIX *pixs, BOX *box)
pixGetOuterBorderPta()
PTA * ptaReverse(PTA *ptas, l_int32 type)
ptaReverse()
l_ok ccbaAddCcb(CCBORDA *ccba, CCBORD *ccb)
ccbaAddCcb()
l_ok pixGetOuterBorder(CCBORD *ccb, PIX *pixs, BOX *box)
pixGetOuterBorder()
l_ok boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
PTAA * pixGetOuterBordersPtaa(PIX *pixs)
pixGetOuterBordersPtaa()
PTAA * ptaaCreate(l_int32 n)
ptaaCreate()
l_ok numaaAddNuma(NUMAA *naa, NUMA *na, l_int32 copyflag)
numaaAddNuma()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()