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};
285 l_int32 xs, l_int32 ys);
287 l_int32 wpl, l_int32 px, l_int32 py,
288 l_int32 *pqpos, l_int32 *pnpx,
291 l_int32 spy, l_int32 *pxs, l_int32 *pys);
293 #ifndef NO_CONSOLE_IO 294 #define DEBUG_PRINT 0 314 PROCNAME(
"ccbaCreate");
317 n = INITIAL_PTR_ARRAYSIZE;
322 ccba->
w = pixGetWidth(pixs);
323 ccba->
h = pixGetHeight(pixs);
327 if ((ccba->
ccb = (
CCBORD **)LEPT_CALLOC(n,
sizeof(
CCBORD *))) == NULL) {
329 return (
CCBORDA *)ERROR_PTR(
"ccba ptrs not made", procName, NULL);
347 PROCNAME(
"ccbaDestroy");
350 L_WARNING(
"ptr address is NULL!\n", procName);
354 if ((ccba = *pccba) == NULL)
358 for (i = 0; i < ccba->
n; i++)
360 LEPT_FREE(ccba->
ccb);
380 PROCNAME(
"ccbCreate");
382 if (pixs && pixGetDepth(pixs) != 1)
383 return (
CCBORD *)ERROR_PTR(
"pixs defined and not 1bpp", procName, NULL);
410 PROCNAME(
"ccbDestroy");
413 L_WARNING(
"ptr address is NULL!\n", procName);
417 if ((ccb = *pccb) == NULL)
460 PROCNAME(
"ccbaAddCcb");
463 return ERROR_INT(
"ccba not defined", procName, 1);
465 return ERROR_INT(
"ccb not defined", procName, 1);
470 return ERROR_INT(
"extension failed", procName, 1);
487 PROCNAME(
"ccbaExtendArray");
490 return ERROR_INT(
"ccba not defined", procName, 1);
495 return ERROR_INT(
"new ptr array not returned", procName, 1);
516 PROCNAME(
"ccbaGetCount");
519 return ERROR_INT(
"ccba not defined", procName, 0);
543 PROCNAME(
"ccbaGetCcb");
546 return (
CCBORD *)ERROR_PTR(
"ccba not defined", procName, NULL);
547 if (index < 0 || index >= ccba->
n)
548 return (
CCBORD *)ERROR_PTR(
"index out of bounds", procName, NULL);
550 ccb = ccba->
ccb[index];
577 PROCNAME(
"pixGetAllCCBorders");
580 return (
CCBORDA *)ERROR_PTR(
"pixs not defined", procName, NULL);
581 if (pixGetDepth(pixs) != 1)
582 return (
CCBORDA *)ERROR_PTR(
"pixs not binary", procName, NULL);
585 return (
CCBORDA *)ERROR_PTR(
"boxa not made", procName, NULL);
591 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
593 for (i = 0; i < n; i++) {
598 return (
CCBORDA *)ERROR_PTR(
"pix not found", procName, NULL);
605 return (
CCBORDA *)ERROR_PTR(
"box not found", procName, NULL);
614 return (
CCBORDA *)ERROR_PTR(
"ccb not made", procName, NULL);
656 l_int32 allzero, i, x, xh, w, nh;
666 PROCNAME(
"pixGetCCBorders");
669 return (
CCBORD *)ERROR_PTR(
"pixs not defined", procName, NULL);
671 return (
CCBORD *)ERROR_PTR(
"box not defined", procName, NULL);
672 if (pixGetDepth(pixs) != 1)
673 return (
CCBORD *)ERROR_PTR(
"pixs not binary", procName, NULL);
677 return (
CCBORD *)ERROR_PTR(
"pixs all 0", procName, NULL);
680 return (
CCBORD *)ERROR_PTR(
"ccb not made", procName, NULL);
688 return (
CCBORD *)ERROR_PTR(
"pixh not made", procName, NULL);
697 if ((boxa =
pixConnComp(pixh, &pixa, 4)) == NULL) {
700 return (
CCBORD *)ERROR_PTR(
"boxa not made", procName, NULL);
715 w = pixGetWidth(pixs);
716 for (i = 0; i < nh; i++) {
720 for (x = 0; x < boxt->
w; x++) {
728 L_WARNING(
"no hole pixel found!\n", procName);
731 for (x = xh + boxt->
x; x < w; x++) {
738 boxe =
boxCreate(boxt->
x - 1, boxt->
y - 1, boxt->
w + 2, boxt->
h + 2);
774 PROCNAME(
"pixGetOuterBordersPtaa");
777 return (
PTAA *)ERROR_PTR(
"pixs not defined", procName, NULL);
778 if (pixGetDepth(pixs) != 1)
779 return (
PTAA *)ERROR_PTR(
"pixs not binary", procName, NULL);
786 return (
PTAA *)ERROR_PTR(
"pixs empty", procName, NULL);
790 for (i = 0; i < n; i++) {
827 l_int32 allzero, x, y;
832 PROCNAME(
"pixGetOuterBorderPta");
835 return (
PTA *)ERROR_PTR(
"pixs not defined", procName, NULL);
836 if (pixGetDepth(pixs) != 1)
837 return (
PTA *)ERROR_PTR(
"pixs not binary", procName, NULL);
841 return (
PTA *)ERROR_PTR(
"pixs all 0", procName, NULL);
844 return (
PTA *)ERROR_PTR(
"ccb not made", procName, NULL);
846 boxt =
boxCreate(0, 0, pixGetWidth(pixs), pixGetHeight(pixs));
855 return (
PTA *)ERROR_PTR(
"ptaloc not made", procName, NULL);
901 l_int32 fpx, fpy, spx, spy, qpos;
902 l_int32 px, py, npx, npy;
908 PROCNAME(
"pixGetOuterBorder");
911 return ERROR_INT(
"ccb not defined", procName, 1);
913 return ERROR_INT(
"pixs not defined", procName, 1);
915 return ERROR_INT(
"box not defined", procName, 1);
919 return ERROR_INT(
"pixs not made", procName, 1);
922 return ERROR_INT(
"no start pixel found", procName, 1);
937 wpl = pixGetWpl(pixb);
953 if (px == fpx && py == fpy && npx == spx && npy == spy)
991 l_int32 fpx, fpy, spx, spy, qpos;
992 l_int32 px, py, npx, npy;
997 PROCNAME(
"pixGetHoleBorder");
1000 return ERROR_INT(
"ccb not defined", procName, 1);
1002 return ERROR_INT(
"pixs not defined", procName, 1);
1004 return ERROR_INT(
"box not defined", procName, 1);
1019 w = pixGetWidth(pixs);
1020 h = pixGetHeight(pixs);
1022 wpl = pixGetWpl(pixs);
1027 return ERROR_INT(
"isolated hole border point!", procName, 1);
1037 if (px == fpx && py == fpy && npx == spx && npy == spy)
1077 l_int32 qpos, i, pos, npx, npy, val;
1081 for (i = 1; i < 8; i++) {
1082 pos = (qpos + i) % 8;
1083 npx = px + xpostab[pos];
1084 npy = py + ypostab[pos];
1085 if (npx < 0 || npx >= w || npy < 0 || npy >= h)
1087 line = data + npy * wpl;
1092 *pqpos = qpostab[pos];
1135 }
else if (dx * dy == -1) {
1138 }
else if (dx == 0) {
1170 l_int32 ncc, nb, n, i, j, k, xul, yul, x, y;
1172 PTAA *ptaal, *ptaag;
1175 PROCNAME(
"ccbaGenerateGlobalLocs");
1178 return ERROR_INT(
"ccba not defined", procName, 1);
1181 for (i = 0; i < ncc; i++) {
1194 return ERROR_INT(
"ptaag not made", procName, 1);
1199 for (j = 0; j < nb; j++) {
1204 for (k = 0; k < n; k++) {
1242 l_int32 ncc, nb, n, i, j, k;
1243 l_int32 px, py, cx, cy, stepdir;
1244 l_int32 dirtab[][3] = {{1, 2, 3}, {0, -1, 4}, {7, 6, 5}};
1251 PROCNAME(
"ccbaGenerateStepChains");
1254 return ERROR_INT(
"ccba not defined", procName, 1);
1257 for (i = 0; i < ncc; i++) {
1267 return ERROR_INT(
"naa not made", procName, 1);
1272 for (j = 0; j < nb; j++) {
1280 for (k = 1; k < n; k++) {
1282 stepdir = dirtab[1 + cy - py][1 + cx - px];
1318 l_int32 ncc, nb, n, i, j, k;
1319 l_int32 xul, yul, xstart, ystart, x, y, stepdir;
1327 PROCNAME(
"ccbaStepChainsToPixCoords");
1330 return ERROR_INT(
"ccba not defined", procName, 1);
1331 if (coordtype != CCB_GLOBAL_COORDS && coordtype != CCB_LOCAL_COORDS)
1332 return ERROR_INT(
"coordtype not valid", procName, 1);
1335 for (i = 0; i < ncc; i++) {
1337 if ((naa = ccb->
step) == NULL) {
1339 return ERROR_INT(
"step numaa not found", procName, 1);
1340 }
if ((boxa = ccb->
boxa) == NULL) {
1342 return ERROR_INT(
"boxa not found", procName, 1);
1343 }
if ((ptas = ccb->
start) == NULL) {
1345 return ERROR_INT(
"start pta not found", procName, 1);
1350 if (coordtype == CCB_LOCAL_COORDS) {
1357 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1365 return ERROR_INT(
"ptaan not made", procName, 1);
1367 if (coordtype == CCB_LOCAL_COORDS) {
1378 for (j = 0; j < nb; j++) {
1381 if ((ptan =
ptaCreate(n + 1)) == NULL) {
1384 return ERROR_INT(
"ptan not made", procName, 1);
1391 for (k = 0; k < n; k++) {
1393 x += xpostab[stepdir];
1394 y += ypostab[stepdir];
1429 l_int32 ncc, npt, i, j, xul, yul, x, y, delx, dely;
1430 l_int32 xp, yp, delxp, delyp;
1434 PROCNAME(
"ccbaGenerateSPGlobalLocs");
1437 return ERROR_INT(
"ccba not defined", procName, 1);
1441 return ERROR_INT(
"no ccb", procName, 1);
1447 for (i = 0; i < ncc; i++) {
1453 return ERROR_INT(
"bounding rectangle not found", procName, 1);
1463 return ERROR_INT(
"ptag not made", procName, 1);
1468 if (ptsflag == CCB_SAVE_ALL_PTS) {
1469 for (j = 0; j < npt; j++) {
1475 ptaAddPt(ptag, xp + xul, yp + yul);
1479 }
else if (npt > 2) {
1485 for (j = 2; j < npt; j++) {
1489 if (delx != delxp || dely != delyp)
1490 ptaAddPt(ptag, xp + xul, yp + yul);
1496 ptaAddPt(ptag, xp + xul, yp + yul);
1549 l_int32 i, j, k, ncc, nb, ncut, npt, dir, len, state, lostholes;
1550 l_int32 x, y, xl, yl, xf, yf;
1554 PTA *pta, *ptac, *ptah;
1563 PROCNAME(
"ccbaGenerateSinglePath");
1566 return ERROR_INT(
"ccba not defined", procName, 1);
1570 for (i = 0; i < ncc; i++) {
1572 if ((ptaa = ccb->
local) == NULL) {
1573 L_WARNING(
"local pixel loc array not found\n", procName);
1586 if (nb == 1 || nb > NMAX_HOLES + 1) {
1599 for (j = 1; j < nb; j++) {
1630 for (k = 0; k < npt; k++) {
1637 state = L_NOT_FOUND;
1638 for (j = 0; j < nb - 1; j++) {
1640 if (x == xl && y == yl) {
1660 if (state == L_NOT_FOUND)
1673 L_INFO(
"***** %d lost holes *****\n", procName, lostholes);
1711 l_int32 w, h, nc, x, y, xl, yl, xmid, ymid;
1715 PROCNAME(
"getCutPathForHole");
1718 return (
PTA *)ERROR_PTR(
"pix not defined", procName, NULL);
1720 return (
PTA *)ERROR_PTR(
"pta not defined", procName, NULL);
1722 return (
PTA *)ERROR_PTR(
"boxinner not defined", procName, NULL);
1726 xmid = boxinner->
x + boxinner->
w / 2;
1727 ymid = boxinner->
y + boxinner->
h / 2;
1730 for (y = ymid; y >= 0; y--) {
1737 for (y = y - 1; y >= 0; y--) {
1754 for (y = ymid; y < h; y++) {
1761 for (y = y + 1; y < h; y++) {
1778 for (x = xmid; x >= 0; x--) {
1785 for (x = x - 1; x >= 0; x--) {
1802 for (x = xmid; x < w; x++) {
1809 for (x = x + 1; x < w; x++) {
1851 l_int32 ncc, nb, n, i, j, k, x, y;
1857 PROCNAME(
"ccbaDisplayBorder");
1860 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1862 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1863 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1865 for (i = 0; i < ncc; i++) {
1867 if ((ptaa = ccb->
global) == NULL) {
1868 L_WARNING(
"global pixel loc array not found", procName);
1873 for (j = 0; j < nb; j++) {
1876 for (k = 0; k < n; k++) {
1905 l_int32 ncc, npt, i, j, x, y;
1910 PROCNAME(
"ccbaDisplaySPBorder");
1913 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
1915 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
1916 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1918 for (i = 0; i < ncc; i++) {
1920 if ((ptag = ccb->
spglobal) == NULL) {
1921 L_WARNING(
"spglobal pixel loc array not found\n", procName);
1926 for (j = 0; j < npt; j++) {
1996 l_int32 ncc, i, nb, n, j, k, x, y, xul, yul, xoff, yoff, w, h;
1997 l_int32 fpx, fpy, spx, spy, xs, ys;
2001 PIX *pixd, *pixt, *pixh;
2005 PROCNAME(
"ccbaDisplayImage1");
2008 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
2010 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
2011 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2013 for (i = 0; i < ncc; i++) {
2015 if ((boxa = ccb->
boxa) == NULL) {
2018 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
2022 if ((ptaa = ccb->
local) == NULL) {
2023 L_WARNING(
"local chain array not found\n", procName);
2029 for (j = 0; j < nb; j++) {
2033 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2047 if ((pixt =
pixCreate(w, h, 1)) == NULL) {
2050 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
2054 for (k = 0; k < n; k++) {
2076 return (
PIX *)ERROR_PTR(
"pixh not made", procName, NULL);
2127 l_int32 ncc, nb, n, i, j, k, x, y, xul, yul, w, h;
2128 l_int32 fpx, fpy, spx, spy, xs, ys;
2131 PIX *pixd, *pixc, *pixs;
2135 PROCNAME(
"ccbaDisplayImage2");
2138 return (
PIX *)ERROR_PTR(
"ccba not defined", procName, NULL);
2140 if ((pixd =
pixCreate(ccba->
w, ccba->
h, 1)) == NULL)
2141 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2143 for (i = 0; i < ncc; i++) {
2147 if ((boxa = ccb->
boxa) == NULL) {
2150 return (
PIX *)ERROR_PTR(
"boxa not found", procName, NULL);
2155 return (
PIX *)ERROR_PTR(
"b. box not found", procName, NULL);
2160 if ((ptaa = ccb->
local) == NULL) {
2164 L_WARNING(
"local chain array not found\n", procName);
2168 for (j = 0; j < nb; j++) {
2173 for (k = 0; k < n; k++) {
2179 }
else if (k == 1) {
2227 PROCNAME(
"ccbaWrite");
2230 return ERROR_INT(
"filename not defined", procName, 1);
2232 return ERROR_INT(
"ccba not defined", procName, 1);
2235 return ERROR_INT(
"stream not opened", procName, 1);
2238 return ERROR_INT(
"ccba not written to stream", procName, 1);
2279 l_uint8 *datain, *dataout;
2280 l_int32 i, j, k, bx, by, bw, bh, val, startx, starty;
2283 size_t inbytes, outbytes;
2290 PROCNAME(
"ccbaWriteStream");
2293 return ERROR_INT(
"no libz: can't write data", procName, 1);
2297 return ERROR_INT(
"stream not open", procName, 1);
2299 return ERROR_INT(
"ccba not defined", procName, 1);
2302 return ERROR_INT(
"bbuf not made", procName, 1);
2305 snprintf(strbuf,
sizeof(strbuf),
"ccba: %7d cc\n", ncc);
2307 w = pixGetWidth(ccba->
pix);
2308 h = pixGetHeight(ccba->
pix);
2311 for (i = 0; i < ncc; i++) {
2316 return ERROR_INT(
"bounding box not found", procName, 1);
2322 if ((naa = ccb->
step) == NULL) {
2329 for (j = 0; j < nb; j++) {
2335 for (k = 0; k < n; k++) {
2338 bval = (l_uint8)val << 4;
2340 bval |= (l_uint8)val;
2359 fwrite(dataout, 1, outbytes, fp);
2381 PROCNAME(
"ccbaRead");
2384 return (
CCBORDA *)ERROR_PTR(
"filename not defined", procName, NULL);
2387 return (
CCBORDA *)ERROR_PTR(
"stream not opened", procName, NULL);
2392 return (
CCBORDA *)ERROR_PTR(
"ccba not returned", procName, NULL);
2426 l_uint8 *datain, *dataout;
2427 l_int32 i, j, startx, starty;
2428 l_int32 offset, nib1, nib2;
2430 l_uint32 width, height, w, h, xoff, yoff;
2431 size_t inbytes, outbytes;
2438 PROCNAME(
"ccbaReadStream");
2441 return (
CCBORDA *)ERROR_PTR(
"no libz: can't read data", procName, NULL);
2445 return (
CCBORDA *)ERROR_PTR(
"stream not open", procName, NULL);
2448 return (
CCBORDA *)ERROR_PTR(
"data not read from file", procName, NULL);
2452 return (
CCBORDA *)ERROR_PTR(
"dataout not made", procName, NULL);
2455 memcpy(strbuf, dataout, offset);
2457 if (memcmp(strbuf,
"ccba:", 5) != 0) {
2459 return (
CCBORDA *)ERROR_PTR(
"file not type ccba", procName, NULL);
2461 sscanf(strbuf,
"ccba: %7d cc\n", &ncc);
2463 if ((ccba =
ccbaCreate(NULL, ncc)) == NULL) {
2465 return (
CCBORDA *)ERROR_PTR(
"ccba not made", procName, NULL);
2468 memcpy(&width, dataout + offset, 4);
2470 memcpy(&height, dataout + offset, 4);
2476 for (i = 0; i < ncc; i++) {
2480 memcpy(&xoff, dataout + offset, 4);
2482 memcpy(&yoff, dataout + offset, 4);
2484 memcpy(&w, dataout + offset, 4);
2486 memcpy(&h, dataout + offset, 4);
2493 memcpy(&nb, dataout + offset, 4);
2499 for (j = 0; j < nb; j++) {
2500 memcpy(&startx, dataout + offset, 4);
2502 memcpy(&starty, dataout + offset, 4);
2510 bval = *(dataout + offset);
2548 PROCNAME(
"ccbaWriteSVG");
2551 return ERROR_INT(
"filename not defined", procName, 1);
2553 return ERROR_INT(
"ccba not defined", procName, 1);
2556 return ERROR_INT(
"svgstr not made", procName, 1);
2577 char line0[] =
"<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>";
2578 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\">";
2579 char line2[] =
"<svg>";
2580 char line3[] =
"<polygon style=\"stroke-width:1;stroke:black;\" points=\"";
2581 char line4[] =
"\" />";
2582 char line5[] =
"</svg>";
2584 l_int32 i, j, ncc, npt, x, y;
2589 PROCNAME(
"ccbaWriteSVGString");
2592 return (
char *)ERROR_PTR(
"ccba not defined", procName, NULL);
2599 for (i = 0; i < ncc; i++) {
2602 return (
char *)ERROR_PTR(
"ccb not found", procName, NULL);
2604 if ((pta = ccb->
spglobal) == NULL) {
2607 return (
char *)ERROR_PTR(
"spglobal not made", procName, NULL);
2611 for (j = 0; j < npt; j++) {
2613 snprintf(smallbuf,
sizeof(smallbuf),
"%0d,%0d", x, y);
l_int32 ccbaGetCount(CCBORDA *ccba)
ccbaGetCount()
l_ok ccbaGenerateStepChains(CCBORDA *ccba)
ccbaGenerateStepChains()
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 * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
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()
static 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()
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()
void lept_stderr(const char *fmt,...)
lept_stderr()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
static CCBORD * pixGetCCBorders(PIX *pixs, BOX *box)
pixGetCCBorders()
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()
l_uint8 * zlibUncompress(const l_uint8 *datain, size_t nin, size_t *pnout)
zlibUncompress()
l_ok ccbaWriteSVG(const char *filename, CCBORDA *ccba)
ccbaWriteSVG()
#define GET_DATA_BIT(pdata, n)
NUMAA * numaaCreate(l_int32 n)
numaaCreate()
PIX * ccbaDisplayImage2(CCBORDA *ccba)
ccbaDisplayImage2()
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()
static void locateOutsideSeedPixel(l_int32 fpx, l_int32 fpy, l_int32 spx, l_int32 spy, l_int32 *pxs, l_int32 *pys)
locateOutsideSeedPixel()
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()
char * ccbaWriteSVGString(CCBORDA *ccba)
ccbaWriteSVGString()
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()
CCBORD * ccbaGetCcb(CCBORDA *ccba, l_int32 index)
ccbaGetCcb()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
l_ok ccbaGenerateGlobalLocs(CCBORDA *ccba)
ccbaGenerateGlobalLocs()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
PIX * pixFillClosedBorders(PIX *pixs, l_int32 connectivity)
pixFillClosedBorders()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
static l_ok pixGetHoleBorder(CCBORD *ccb, PIX *pixs, BOX *box, l_int32 xs, l_int32 ys)
pixGetHoleBorder()
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()
void ccbDestroy(CCBORD **pccb)
ccbDestroy()
static PTA * pixGetOuterBorderPta(PIX *pixs, BOX *box)
pixGetOuterBorderPta()
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_uint8 * zlibCompress(const l_uint8 *datain, size_t nin, size_t *pnout)
zlibCompress()
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 * 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()