135 #include <config_auto.h>
139 #include "allheaders.h"
143 static const size_t MaxInitPtrArraySize = 100000;
144 static const size_t MaxPixaPtrArraySize = 5000000;
145 static const size_t MaxPixaaPtrArraySize = 1000000;
171 if (n <= 0 || n > MaxInitPtrArraySize)
174 pixa = (
PIXA *)LEPT_CALLOC(1,
sizeof(
PIXA));
178 pixa->
pix = (
PIX **)LEPT_CALLOC(n,
sizeof(
PIX *));
180 if (!pixa->
pix || !pixa->
boxa) {
182 return (
PIXA *)ERROR_PTR(
"pix or boxa not made", __func__, NULL);
209 l_int32 w, h, d, nw, nh, i, j, index;
214 return (
PIXA *)ERROR_PTR(
"pixs not defined", __func__, NULL);
216 return (
PIXA *)ERROR_PTR(
"n must be > 0", __func__, NULL);
219 return (
PIXA *)ERROR_PTR(
"pixa not made", __func__, NULL);
221 if ((pix1 =
pixCreate(cellw, cellh, d)) == NULL) {
223 return (
PIXA *)ERROR_PTR(
"pix1 not made", __func__, NULL);
226 nw = (w + cellw - 1) / cellw;
227 nh = (h + cellh - 1) / cellh;
228 for (i = 0, index = 0; i < nh; i++) {
229 for (j = 0; j < nw && index < n; j++, index++) {
231 j * cellw, i * cellh);
274 l_int32 i, n, end, w, h, wbox, hbox, cropwarn;
280 return (
PIXA *)ERROR_PTR(
"pixs not defined", __func__, NULL);
282 return (
PIXA *)ERROR_PTR(
"boxa not defined", __func__, NULL);
284 return (
PIXA *)ERROR_PTR(
"num must be >= 0", __func__, NULL);
287 end = (num == 0) ? n - 1 : L_MIN(start + num - 1, n - 1);
288 if ((pixad =
pixaCreate(end - start + 1)) == NULL)
289 return (
PIXA *)ERROR_PTR(
"pixad not made", __func__, NULL);
294 if (wbox > w || hbox > h)
297 *pcropwarn = cropwarn;
299 for (i = start; i <= end; i++) {
348 l_uint32 bordercolor)
350 l_int32 w, h, d, cellw, cellh, i, j;
355 return (
PIXA *)ERROR_PTR(
"pixs not defined", __func__, NULL);
356 if (nx <= 0 || ny <= 0)
357 return (
PIXA *)ERROR_PTR(
"nx and ny must be > 0", __func__, NULL);
358 borderwidth = L_MAX(0, borderwidth);
361 return (
PIXA *)ERROR_PTR(
"pixa not made", __func__, NULL);
363 cellw = (w + nx - 1) / nx;
364 cellh = (h + ny - 1) / ny;
366 for (i = 0; i < ny; i++) {
367 for (j = 0; j < nx; j++) {
368 if ((pix1 =
pixCreate(cellw + 2 * borderwidth,
369 cellh + 2 * borderwidth, d)) == NULL) {
371 return (
PIXA *)ERROR_PTR(
"pix1 not made", __func__, NULL);
374 if (borderwidth == 0) {
382 pixRasterop(pix1, borderwidth, borderwidth, cellw, cellh,
383 PIX_SRC, pixs, j * cellw, i * cellh);
410 L_WARNING(
"ptr address is NULL!\n", __func__);
414 if ((pixa = *ppixa) == NULL)
419 for (i = 0; i < pixa->
n; i++)
421 LEPT_FREE(pixa->
pix);
451 return (
PIXA *)ERROR_PTR(
"pixa not defined", __func__, NULL);
459 return (
PIXA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
462 return (
PIXA *)ERROR_PTR(
"pixac not made", __func__, NULL);
464 for (i = 0; i < pixa->
n; i++) {
501 return ERROR_INT(
"pixa not defined", __func__, 1);
503 return ERROR_INT(
"pix not defined", __func__, 1);
507 else if (copyflag ==
L_COPY)
512 return ERROR_INT(
"invalid copyflag", __func__, 1);
514 return ERROR_INT(
"pixc not made", __func__, 1);
521 return ERROR_INT(
"extension failed", __func__, 1);
545 return ERROR_INT(
"pixa not defined", __func__, 1);
547 return ERROR_INT(
"box not defined", __func__, 1);
549 return ERROR_INT(
"invalid copyflag", __func__, 1);
572 return ERROR_INT(
"pixa not defined", __func__, 1);
596 size_t oldsize, newsize;
599 return ERROR_INT(
"pixa not defined", __func__, 1);
600 if (pixa->
nalloc > MaxPixaPtrArraySize)
601 return ERROR_INT(
"pixa has too many ptrs", __func__, 1);
602 if (size > MaxPixaPtrArraySize)
603 return ERROR_INT(
"size > 5M ptrs; too large", __func__, 1);
604 if (size <= pixa->nalloc) {
605 L_INFO(
"size too small; no extension\n", __func__);
610 newsize = size *
sizeof(
PIX *);
612 oldsize, newsize)) == NULL)
613 return ERROR_INT(
"new ptr array not returned", __func__, 1);
632 return ERROR_INT(
"pixa not defined", __func__, 0);
654 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
655 if (index < 0 || index >= pixa->
n)
656 return (
PIX *)ERROR_PTR(
"index not valid", __func__, NULL);
657 if ((pix = pixa->
pix[index]) == NULL) {
658 L_ERROR(
"no pix at pixa[%d]\n", __func__, index);
659 return (
PIX *)ERROR_PTR(
"pix not found!", __func__, NULL);
664 else if (accesstype ==
L_CLONE)
667 return (
PIX *)ERROR_PTR(
"invalid accesstype", __func__, NULL);
692 return ERROR_INT(
"pixa not defined", __func__, 1);
693 if (index < 0 || index >= pixa->
n)
694 return ERROR_INT(
"index not valid", __func__, 1);
697 return ERROR_INT(
"pix not found!", __func__, 1);
716 return (
BOXA *)ERROR_PTR(
"pixa not defined", __func__, NULL);
718 return (
BOXA *)ERROR_PTR(
"boxa not defined", __func__, NULL);
721 return (
BOXA *)ERROR_PTR(
"invalid accesstype", __func__, NULL);
737 return ERROR_INT(
"pixa not defined", __func__, 0);
771 return (
BOX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
773 return (
BOX *)ERROR_PTR(
"boxa not defined", __func__, NULL);
774 if (index < 0 || index >= pixa->
boxa->
n)
775 return (
BOX *)ERROR_PTR(
"index not valid", __func__, NULL);
777 return (
BOX *)ERROR_PTR(
"invalid accesstype", __func__, NULL);
814 return ERROR_INT(
"pixa not defined", __func__, 1);
815 if (index < 0 || index >= pixa->
n)
816 return ERROR_INT(
"index not valid", __func__, 1);
819 return ERROR_INT(
"box not found!", __func__, 1);
845 return ERROR_INT(
"pixa not defined", __func__, 1);
847 return ERROR_INT(
"boxa not defined", __func__, 1);
850 return ERROR_INT(
"invalid access type", __func__, 1);
880 return (
PIX **)ERROR_PTR(
"pixa not defined", __func__, NULL);
904 l_int32 i, n, d, maxd, same;
906 if (pmaxd) *pmaxd = 0;
908 return ERROR_INT(
"psame not defined", __func__, 1);
910 return ERROR_INT(
"pixa not defined", __func__, 1);
912 return ERROR_INT(
"no pix in pixa", __func__, 1);
916 for (i = 1; i < n; i++) {
918 return ERROR_INT(
"pix depth not found", __func__, 1);
919 maxd = L_MAX(maxd, d);
924 if (pmaxd) *pmaxd = maxd;
949 l_int32 i, n, w, h, maxw, maxh, same;
951 if (pmaxw) *pmaxw = 0;
952 if (pmaxh) *pmaxh = 0;
954 return ERROR_INT(
"psame not defined", __func__, 1);
957 return ERROR_INT(
"pixa not defined", __func__, 1);
959 return ERROR_INT(
"no pix in pixa", __func__, 1);
963 for (i = 1; i < n; i++) {
965 return ERROR_INT(
"pix dimensions not found", __func__, 1);
966 maxw = L_MAX(maxw, w);
967 maxh = L_MAX(maxh, h);
968 if (w != maxw || h != maxh)
972 if (pmaxw) *pmaxw = maxw;
973 if (pmaxh) *pmaxh = maxh;
1001 if (pfullpa) *pfullpa = 0;
1002 if (pfullba) *pfullba = 0;
1004 return ERROR_INT(
"pixa not defined", __func__, 1);
1009 for (i = 0; i < n; i++) {
1049 return ERROR_INT(
"&ntext not defined", __func__, 1);
1052 return ERROR_INT(
"pixa not defined", __func__, 1);
1055 for (i = 0; i < n; i++) {
1059 if (text && strlen(text) > 0)
1096 return ERROR_INT(
"pixa not defined", __func__, 1);
1100 return ERROR_INT(
"pixa and sa sizes differ", __func__, 1);
1103 for (i = 0; i < n; i++) {
1112 for (i = 0; i < n; i++) {
1152 if (psize) *psize = 0;
1154 return (
void ***)ERROR_PTR(
"pixa not defined", __func__, NULL);
1157 return (
void ***)ERROR_PTR(
"pixa not all same depth", __func__, NULL);
1159 if (psize) *psize = n;
1160 if ((lineset = (
void ***)LEPT_CALLOC(n,
sizeof(
void **))) == NULL)
1161 return (
void ***)ERROR_PTR(
"lineset not made", __func__, NULL);
1162 for (i = 0; i < n; i++) {
1165 lineset[i] = lineptrs;
1194 l_int32 i, n, w, h, d, spp, count, hastext;
1199 return ERROR_INT(
"stream not defined", __func__, 1);
1201 return ERROR_INT(
"pixa not defined", __func__, 1);
1204 for (i = 0; i < n; i++) {
1206 fprintf(fp,
"%d: no pix at this index\n", i);
1210 spp = pixGetSpp(pix);
1212 hastext = (text && strlen(text) > 0);
1213 if ((cmap = pixGetColormap(pix)) != NULL)
1215 fprintf(fp,
"Pix %d: w = %d, h = %d, d = %d, spp = %d",
1217 if (cmap) fprintf(fp,
", cmap(%d colors)", count);
1218 if (hastext) fprintf(fp,
", text = %s", text);
1254 return ERROR_INT(
"pixa not defined", __func__, 1);
1255 if (index < 0 || index >= pixa->
n)
1256 return ERROR_INT(
"index not valid", __func__, 1);
1258 return ERROR_INT(
"pix not defined", __func__, 1);
1261 pixa->
pix[index] = pix;
1265 if (index > boxa->
n)
1266 return ERROR_INT(
"boxa index not valid", __func__, 1);
1302 return ERROR_INT(
"pixa not defined", __func__, 1);
1304 if (index < 0 || index > n) {
1305 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n);
1309 return ERROR_INT(
"pixs not defined", __func__, 1);
1313 return ERROR_INT(
"extension failed", __func__, 1);
1315 return ERROR_INT(
"extension failed", __func__, 1);
1318 for (i = n; i > index; i--)
1319 pixa->
pix[i] = pixa->
pix[i - 1];
1320 pixa->
pix[index] = pixs;
1353 return ERROR_INT(
"pixa not defined", __func__, 1);
1355 if (index < 0 || index >= n) {
1356 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n - 1);
1363 for (i = index + 1; i < n; i++)
1364 array[i - 1] = array[i];
1365 array[n - 1] = NULL;
1406 if (ppix) *ppix = NULL;
1407 if (pbox) *pbox = NULL;
1409 return ERROR_INT(
"pixa not defined", __func__, 1);
1411 if (index < 0 || index >= n) {
1412 L_ERROR(
"index %d not in [0,...,%d]\n", __func__, index, n - 1);
1421 for (i = index + 1; i < n; i++)
1422 array[i - 1] = array[i];
1423 array[n - 1] = NULL;
1452 l_int32 i, n, index;
1456 return ERROR_INT(
"pixa not defined", __func__, 1);
1458 return ERROR_INT(
"naindex not defined", __func__, 1);
1460 return ERROR_INT(
"naindex is empty", __func__, 1);
1464 for (i = 0; i < n; i++) {
1517 return ERROR_INT(
"pixa not defined", __func__, 1);
1521 for (i = 0; i < n; i++) {
1554 return ERROR_INT(
"pixa not defined", __func__, 1);
1557 for (i = 0; i < n; i++)
1591 BOXA *boxas, *boxad;
1595 return ERROR_INT(
"pixad not defined", __func__, 1);
1601 if (iend < 0 || iend >= n)
1604 return ERROR_INT(
"istart > iend; nothing to add", __func__, 1);
1606 for (i = istart; i <= iend; i++) {
1614 iend = L_MIN(iend, nb - 1);
1615 boxaJoin(boxad, boxas, istart, iend);
1643 l_int32 i, n1, n2, n, nb1, nb2;
1649 return (
PIXA *)ERROR_PTR(
"pixa1 not defined", __func__, NULL);
1651 return (
PIXA *)ERROR_PTR(
"pixa2 not defined", __func__, NULL);
1653 return (
PIXA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
1658 return (
PIXA *)ERROR_PTR(
"at least one input pixa is empty",
1661 L_WARNING(
"counts differ: %d != %d\n", __func__, n1, n2);
1666 for (i = 0; i < n; i++) {
1711 return ERROR_INT(
"pixaad not defined", __func__, 1);
1718 if (iend < 0 || iend >= n)
1721 return ERROR_INT(
"istart > iend; nothing to add", __func__, 1);
1723 for (i = istart; i <= iend; i++) {
1762 if (n <= 0 || n > MaxInitPtrArraySize)
1765 paa = (
PIXAA *)LEPT_CALLOC(1,
sizeof(
PIXAA));
1768 if ((paa->
pixa = (
PIXA **)LEPT_CALLOC(n,
sizeof(
PIXA *))) == NULL) {
1770 return (
PIXAA *)ERROR_PTR(
"pixa ptrs not made", __func__, NULL);
1804 l_int32 count, i, j, npixa;
1810 return (
PIXAA *)ERROR_PTR(
"pixa not defined", __func__, NULL);
1813 return (
PIXAA *)ERROR_PTR(
"no pix in pixa", __func__, NULL);
1815 return (
PIXAA *)ERROR_PTR(
"n must be > 0", __func__, NULL);
1817 return (
PIXAA *)ERROR_PTR(
"invalid type", __func__, NULL);
1819 return (
PIXAA *)ERROR_PTR(
"invalid copyflag", __func__, NULL);
1822 npixa = (count + n - 1) / n;
1824 npixa = L_MIN(n, count);
1827 for (i = 0; i < count; i++) {
1838 for (i = 0; i < npixa; i++) {
1840 for (j = i; j < count; j += n) {
1865 L_WARNING(
"ptr address is NULL!\n", __func__);
1869 if ((paa = *ppaa) == NULL)
1872 for (i = 0; i < paa->
n; i++)
1874 LEPT_FREE(paa->
pixa);
1906 return ERROR_INT(
"paa not defined", __func__, 1);
1908 return ERROR_INT(
"pixa not defined", __func__, 1);
1911 return ERROR_INT(
"invalid copyflag", __func__, 1);
1916 if ((pixac =
pixaCopy(pixa, copyflag)) == NULL)
1917 return ERROR_INT(
"pixac not made", __func__, 1);
1925 return ERROR_INT(
"extension failed", __func__, 1);
1928 paa->
pixa[n] = pixac;
1948 size_t oldsize, newsize;
1951 return ERROR_INT(
"paa not defined", __func__, 1);
1952 if (paa->
nalloc > MaxPixaaPtrArraySize)
1953 return ERROR_INT(
"paa has too many ptrs", __func__, 1);
1955 newsize = 2 * oldsize;
1956 if (newsize > 8 * MaxPixaaPtrArraySize)
1957 return ERROR_INT(
"newsize > 8 MB; too large", __func__, 1);
1960 oldsize, newsize)) == NULL)
1961 return ERROR_INT(
"new ptr array not returned", __func__, 1);
1988 return ERROR_INT(
"paa not defined", __func__, 1);
1990 return ERROR_INT(
"pix not defined", __func__, 1);
1993 return ERROR_INT(
"pixa not found", __func__, 1);
2021 return ERROR_INT(
"paa not defined", __func__, 1);
2023 return ERROR_INT(
"box not defined", __func__, 1);
2025 return ERROR_INT(
"invalid copyflag", __func__, 1);
2056 if (pna) *pna = NULL;
2058 return ERROR_INT(
"paa not defined", __func__, 0);
2063 return ERROR_INT(
"na not made", __func__, 0);
2065 for (i = 0; i < n; i++) {
2103 return (
PIXA *)ERROR_PTR(
"paa not defined", __func__, NULL);
2104 if (index < 0 || index >= paa->
n)
2105 return (
PIXA *)ERROR_PTR(
"index not valid", __func__, NULL);
2108 return (
PIXA *)ERROR_PTR(
"invalid accesstype", __func__, NULL);
2110 if ((pixa = paa->
pixa[index]) == NULL) {
2111 L_ERROR(
"missing pixa[%d]\n", __func__, index);
2112 return (
PIXA *)ERROR_PTR(
"pixa not found at index", __func__, NULL);
2136 return (
BOXA *)ERROR_PTR(
"paa not defined", __func__, NULL);
2138 return (
BOXA *)ERROR_PTR(
"invalid access type", __func__, NULL);
2163 return (
PIX *)ERROR_PTR(
"pixa not retrieved", __func__, NULL);
2164 if ((pix =
pixaGetPix(pixa, ipix, accessflag)) == NULL)
2165 L_ERROR(
"pix not retrieved\n", __func__);
2189 l_int32 i, n, d, maxd, same, samed;
2192 if (pmaxd) *pmaxd = 0;
2194 return ERROR_INT(
"psame not defined", __func__, 1);
2197 return ERROR_INT(
"paa not defined", __func__, 1);
2199 return ERROR_INT(
"no pixa in paa", __func__, 1);
2204 for (i = 1; i < n; i++) {
2208 maxd = L_MAX(maxd, d);
2209 if (!samed || maxd != d)
2213 if (pmaxd) *pmaxd = maxd;
2238 l_int32 i, n, w, h, maxw, maxh, same, same2;
2241 if (pmaxw) *pmaxw = 0;
2242 if (pmaxh) *pmaxh = 0;
2244 return ERROR_INT(
"psame not defined", __func__, 1);
2247 return ERROR_INT(
"paa not defined", __func__, 1);
2249 return ERROR_INT(
"no pixa in paa", __func__, 1);
2256 for (i = 1; i < n; i++) {
2260 maxw = L_MAX(maxw, w);
2261 maxh = L_MAX(maxh, h);
2262 if (!same2 || maxw != w || maxh != h)
2266 if (pmaxw) *pmaxw = maxw;
2267 if (pmaxh) *pmaxh = maxh;
2292 return ERROR_INT(
"&full not defined", __func__, 0);
2295 return ERROR_INT(
"paa not defined", __func__, 0);
2299 for (i = 0; i < n; i++) {
2342 return ERROR_INT(
"paa not defined", __func__, 1);
2344 return ERROR_INT(
"pixa not defined", __func__, 1);
2348 for (i = 0; i < n; i++) {
2381 return ERROR_INT(
"paa not defined", __func__, 1);
2382 if (index < 0 || index >= paa->
n)
2383 return ERROR_INT(
"index not valid", __func__, 1);
2385 return ERROR_INT(
"pixa not defined", __func__, 1);
2388 paa->
pixa[index] = pixa;
2411 return ERROR_INT(
"paa not defined", __func__, 1);
2414 for (i = 0; i < n; i++)
2441 return ERROR_INT(
"paa not defined", __func__, 1);
2444 for (i = n - 1; i >= 0; i--) {
2486 return (
PIXA *)ERROR_PTR(
"no libpng: can't read data", __func__, NULL);
2490 return (
PIXA *)ERROR_PTR(
"filename not defined", __func__, NULL);
2493 return (
PIXA *)ERROR_PTR(
"stream not opened", __func__, NULL);
2497 return (
PIXA *)ERROR_PTR(
"pixa not read", __func__, NULL);
2518 l_int32 n, i, xres, yres, version;
2525 return (
PIXA *)ERROR_PTR(
"no libpng: can't read data", __func__, NULL);
2529 return (
PIXA *)ERROR_PTR(
"stream not defined", __func__, NULL);
2531 if (fscanf(fp,
"\nPixa Version %d\n", &version) != 1)
2532 return (
PIXA *)ERROR_PTR(
"not a pixa file", __func__, NULL);
2534 return (
PIXA *)ERROR_PTR(
"invalid pixa version", __func__, NULL);
2535 if (fscanf(fp,
"Number of pix = %d\n", &n) != 1)
2536 return (
PIXA *)ERROR_PTR(
"not a pixa file", __func__, NULL);
2538 return (
PIXA *)ERROR_PTR(
"num pix ptrs < 0", __func__, NULL);
2539 if (n > MaxPixaPtrArraySize)
2540 return (
PIXA *)ERROR_PTR(
"too many pix ptrs", __func__, NULL);
2541 if (n == 0) L_INFO(
"the pixa is empty\n", __func__);
2544 return (
PIXA *)ERROR_PTR(
"boxa not made", __func__, NULL);
2547 return (
PIXA *)ERROR_PTR(
"pixa not made", __func__, NULL);
2552 for (i = 0; i < n; i++) {
2553 if ((fscanf(fp,
" pix[%d]: xres = %d, yres = %d\n",
2554 &ignore, &xres, &yres)) != 3) {
2556 return (
PIXA *)ERROR_PTR(
"res reading error", __func__, NULL);
2560 return (
PIXA *)ERROR_PTR(
"pix not read", __func__, NULL);
2562 pixSetXRes(pix, xres);
2563 pixSetYRes(pix, yres);
2585 return (
PIXA *)ERROR_PTR(
"data not defined", __func__, NULL);
2587 return (
PIXA *)ERROR_PTR(
"stream not opened", __func__, NULL);
2591 if (!pixa) L_ERROR(
"pixa not read\n", __func__);
2619 L_INFO(
"write to named temp file %s is disabled\n", __func__, fname);
2646 return ERROR_INT(
"no libpng: can't write data", __func__, 1);
2650 return ERROR_INT(
"filename not defined", __func__, 1);
2652 return ERROR_INT(
"pixa not defined", __func__, 1);
2655 return ERROR_INT(
"stream not opened", __func__, 1);
2659 return ERROR_INT(
"pixa not written to stream", __func__, 1);
2685 return ERROR_INT(
"no libpng: can't write data", __func__, 1);
2689 return ERROR_INT(
"stream not defined", __func__, 1);
2691 return ERROR_INT(
"pixa not defined", __func__, 1);
2695 fprintf(fp,
"Number of pix = %d\n", n);
2697 for (i = 0; i < n; i++) {
2699 return ERROR_INT(
"pix not found", __func__, 1);
2700 fprintf(fp,
" pix[%d]: xres = %d, yres = %d\n",
2730 if (pdata) *pdata = NULL;
2731 if (psize) *psize = 0;
2733 return ERROR_INT(
"&data not defined", __func__, 1);
2735 return ERROR_INT(
"&size not defined", __func__, 1);
2737 return ERROR_INT(
"pixa not defined", __func__, 1);
2740 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
2741 return ERROR_INT(
"stream not opened", __func__, 1);
2745 *psize = *psize - 1;
2747 L_INFO(
"work-around: writing to a temp file\n", __func__);
2750 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
2752 if ((fp = tmpfile()) == NULL)
2753 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
2785 return (
PIXA *)ERROR_PTR(
"filename not defined", __func__, NULL);
2789 return (
PIXA *)ERROR_PTR(
"struct name not found", __func__, NULL);
2790 snprintf(buf,
sizeof(buf),
"%s", sname);
2793 if (strcmp(buf,
"Pixacomp") == 0) {
2795 return (
PIXA *)ERROR_PTR(
"pac not made", __func__, NULL);
2798 }
else if (strcmp(buf,
"Pixa") == 0) {
2799 if ((pixa =
pixaRead(filename)) == NULL)
2800 return (
PIXA *)ERROR_PTR(
"pixa not made", __func__, NULL);
2802 return (
PIXA *)ERROR_PTR(
"invalid file type", __func__, NULL);
2844 return (
PIXAA *)ERROR_PTR(
"dirname not defined", __func__, NULL);
2849 return (
PIXAA *)ERROR_PTR(
"no pixa files found", __func__, NULL);
2853 for (i = 0; i < n; i++) {
2855 if ((pixa =
pixaRead(fname)) == NULL) {
2856 L_ERROR(
"pixa not read for %d-th file", __func__, i);
2886 return (
PIXAA *)ERROR_PTR(
"no libpng: can't read data", __func__, NULL);
2890 return (
PIXAA *)ERROR_PTR(
"filename not defined", __func__, NULL);
2893 return (
PIXAA *)ERROR_PTR(
"stream not opened", __func__, NULL);
2897 return (
PIXAA *)ERROR_PTR(
"paa not read", __func__, NULL);
2918 l_int32 n, i, version;
2925 return (
PIXAA *)ERROR_PTR(
"no libpng: can't read data", __func__, NULL);
2929 return (
PIXAA *)ERROR_PTR(
"stream not defined", __func__, NULL);
2931 if (fscanf(fp,
"\nPixaa Version %d\n", &version) != 1)
2932 return (
PIXAA *)ERROR_PTR(
"not a pixaa file", __func__, NULL);
2934 return (
PIXAA *)ERROR_PTR(
"invalid pixaa version", __func__, NULL);
2935 if (fscanf(fp,
"Number of pixa = %d\n", &n) != 1)
2936 return (
PIXAA *)ERROR_PTR(
"not a pixaa file", __func__, NULL);
2938 return (
PIXAA *)ERROR_PTR(
"num pixa ptrs < 0", __func__, NULL);
2939 if (n > MaxPixaaPtrArraySize)
2940 return (
PIXAA *)ERROR_PTR(
"too many pixa ptrs", __func__, NULL);
2941 if (n == 0) L_INFO(
"the pixaa is empty\n", __func__);
2944 return (
PIXAA *)ERROR_PTR(
"paa not made", __func__, NULL);
2947 return (
PIXAA *)ERROR_PTR(
"boxa not made", __func__, NULL);
2952 for (i = 0; i < n; i++) {
2953 if ((fscanf(fp,
"\n\n --------------- pixa[%d] ---------------\n",
2956 return (
PIXAA *)ERROR_PTR(
"text reading", __func__, NULL);
2960 return (
PIXAA *)ERROR_PTR(
"pixa not read", __func__, NULL);
2984 return (
PIXAA *)ERROR_PTR(
"data not defined", __func__, NULL);
2986 return (
PIXAA *)ERROR_PTR(
"stream not opened", __func__, NULL);
2990 if (!paa) L_ERROR(
"paa not read\n", __func__);
3016 return ERROR_INT(
"no libpng: can't read data", __func__, 1);
3020 return ERROR_INT(
"filename not defined", __func__, 1);
3022 return ERROR_INT(
"paa not defined", __func__, 1);
3025 return ERROR_INT(
"stream not opened", __func__, 1);
3029 return ERROR_INT(
"paa not written to stream", __func__, 1);
3055 return ERROR_INT(
"no libpng: can't read data", __func__, 1);
3059 return ERROR_INT(
"stream not defined", __func__, 1);
3061 return ERROR_INT(
"paa not defined", __func__, 1);
3065 fprintf(fp,
"Number of pixa = %d\n", n);
3067 for (i = 0; i < n; i++) {
3069 return ERROR_INT(
"pixa not found", __func__, 1);
3070 fprintf(fp,
"\n\n --------------- pixa[%d] ---------------\n", i);
3099 if (pdata) *pdata = NULL;
3100 if (psize) *psize = 0;
3102 return ERROR_INT(
"&data not defined", __func__, 1);
3104 return ERROR_INT(
"&size not defined", __func__, 1);
3106 return ERROR_INT(
"paa not defined", __func__, 1);
3109 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
3110 return ERROR_INT(
"stream not opened", __func__, 1);
3114 *psize = *psize - 1;
3116 L_INFO(
"work-around: writing to a temp file\n", __func__);
3119 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
3121 if ((fp = tmpfile()) == NULL)
3122 return ERROR_INT(
"tmpfile stream not opened", __func__, 1);
l_ok boxGetGeometry(const BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
l_ok boxaClear(BOXA *boxa)
boxaClear()
BOXA * boxaReadStream(FILE *fp)
boxaReadStream()
l_ok boxaInitFull(BOXA *boxa, BOX *box)
boxaInitFull()
l_ok boxaIsFull(BOXA *boxa, l_int32 *pfull)
boxaIsFull()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
l_ok boxaInsertBox(BOXA *boxa, l_int32 index, BOX *box)
boxaInsertBox()
void boxDestroy(BOX **pbox)
boxDestroy()
l_ok boxaRemoveBoxAndSave(BOXA *boxa, l_int32 index, BOX **pbox)
boxaRemoveBoxAndSave()
l_ok boxaRemoveBox(BOXA *boxa, l_int32 index)
boxaRemoveBox()
BOX * boxClone(BOX *box)
boxClone()
l_ok boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box)
boxaReplaceBox()
l_ok boxaExtendArrayToSize(BOXA *boxa, size_t size)
boxaExtendArrayToSize()
l_ok boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
l_ok boxaExtendArray(BOXA *boxa)
boxaExtendArray()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
l_int32 boxaGetCount(const BOXA *boxa)
boxaGetCount()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
BOX * boxCopy(BOX *box)
boxCopy()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
l_ok boxaWriteStream(FILE *fp, BOXA *boxa)
boxaWriteStream()
l_ok boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend)
boxaJoin()
l_ok boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox)
boxaGetExtent()
l_int32 pixcmapGetCount(const PIXCMAP *cmap)
pixcmapGetCount()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
NUMA * numaCreate(l_int32 n)
numaCreate()
void numaDestroy(NUMA **pna)
numaDestroy()
l_int32 numaGetCount(NUMA *na)
numaGetCount()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
NUMA * numaSort(NUMA *naout, NUMA *nain, l_int32 sortorder)
numaSort()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
char * pixGetText(PIX *pix)
pixGetText()
l_ok pixSetText(PIX *pix, const char *textstring)
pixSetText()
PIX * pixCopy(PIX *pixd, const PIX *pixs)
pixCopy()
l_ok pixCopyColormap(PIX *pixd, const PIX *pixs)
pixCopyColormap()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixClone(PIX *pixs)
pixClone()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
l_ok pixClearAll(PIX *pix)
pixClearAll()
l_ok pixSetAll(PIX *pix)
pixSetAll()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
l_ok pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
#define PIXA_VERSION_NUMBER
#define PIXAA_VERSION_NUMBER
PIXAA * pixaaCreate(l_int32 n)
pixaaCreate()
l_ok pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_ok pixaaReplacePixa(PIXAA *paa, l_int32 index, PIXA *pixa)
pixaaReplacePixa()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
static l_int32 pixaExtendArray(PIXA *pixa)
pixaExtendArray()
l_ok pixaaWriteMem(l_uint8 **pdata, size_t *psize, PIXAA *paa)
pixaaWriteMem()
l_ok pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
l_ok pixaaInitFull(PIXAA *paa, PIXA *pixa)
pixaaInitFull()
l_ok pixaCountText(PIXA *pixa, l_int32 *pntext)
pixaCountText()
l_int32 pixaaIsFull(PIXAA *paa, l_int32 *pfull)
pixaaIsFull()
l_ok pixaExtendArrayToSize(PIXA *pixa, size_t size)
pixaExtendArrayToSize()
PIXAA * pixaaReadStream(FILE *fp)
pixaaReadStream()
l_ok pixaRemovePix(PIXA *pixa, l_int32 index)
pixaRemovePix()
l_ok pixaaAddBox(PIXAA *paa, BOX *box, l_int32 copyflag)
pixaaAddBox()
l_ok pixaWriteStream(FILE *fp, PIXA *pixa)
pixaWriteStream()
PIXA * pixaReadBoth(const char *filename)
pixaReadBoth()
l_ok pixaaTruncate(PIXAA *paa)
pixaaTruncate()
l_ok pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag)
pixaaAddPix()
BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetBox()
static l_int32 pixaaExtendArray(PIXAA *paa)
pixaaExtendArray()
l_int32 pixaGetBoxaCount(PIXA *pixa)
pixaGetBoxaCount()
PIXA * pixaInterleave(PIXA *pixa1, PIXA *pixa2, l_int32 copyflag)
pixaInterleave()
l_ok pixaSetText(PIXA *pixa, const char *text, SARRAY *sa)
pixaSetText()
l_ok pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag)
pixaaAddPixa()
void *** pixaGetLinePtrs(PIXA *pixa, l_int32 *psize)
pixaGetLinePtrs()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_ok pixaRemovePixAndSave(PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox)
pixaRemovePixAndSave()
PIXA * pixaSplitPix(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor)
pixaSplitPix()
l_ok pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixaGetPixDimensions()
PIX ** pixaGetPixArray(PIXA *pixa)
pixaGetPixArray()
PIXA * pixaRead(const char *filename)
pixaRead()
l_ok pixaaJoin(PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend)
pixaaJoin()
l_ok pixaRemoveSelected(PIXA *pixa, NUMA *naindex)
pixaRemoveSelected()
PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag)
pixaCopy()
l_ok pixaReplacePix(PIXA *pixa, l_int32 index, PIX *pix, BOX *box)
pixaReplacePix()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_ok pixaWrite(const char *filename, PIXA *pixa)
pixaWrite()
l_ok pixaaVerifyDimensions(PIXAA *paa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh)
pixaaVerifyDimensions()
l_ok pixaAddBox(PIXA *pixa, BOX *box, l_int32 copyflag)
pixaAddBox()
l_ok pixaWriteMem(l_uint8 **pdata, size_t *psize, PIXA *pixa)
pixaWriteMem()
static const size_t InitialPtrArraySize
PIXA * pixaReadMem(const l_uint8 *data, size_t size)
pixaReadMem()
l_ok pixaWriteStreamInfo(FILE *fp, PIXA *pixa)
pixaWriteStreamInfo()
l_ok pixaIsFull(PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba)
pixaIsFull()
PIXAA * pixaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
pixaaReadFromFiles()
PIXAA * pixaaCreateFromPixa(PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag)
pixaaCreateFromPixa()
PIXAA * pixaaReadMem(const l_uint8 *data, size_t size)
pixaaReadMem()
l_ok pixaInitFull(PIXA *pixa, PIX *pix, BOX *box)
pixaInitFull()
PIXA * pixaReadStream(FILE *fp)
pixaReadStream()
l_ok pixaVerifyDimensions(PIXA *pixa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh)
pixaVerifyDimensions()
l_ok pixaaWriteStream(FILE *fp, PIXAA *paa)
pixaaWriteStream()
BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype)
pixaGetBoxa()
BOXA * pixaaGetBoxa(PIXAA *paa, l_int32 accesstype)
pixaaGetBoxa()
l_ok pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
l_ok pixaWriteDebug(const char *fname, PIXA *pixa)
pixaWriteDebug()
PIXA * pixaCreateFromBoxa(PIX *pixs, BOXA *boxa, l_int32 start, l_int32 num, l_int32 *pcropwarn)
pixaCreateFromBoxa()
void pixaaDestroy(PIXAA **ppaa)
pixaaDestroy()
l_ok pixaaClear(PIXAA *paa)
pixaaClear()
l_ok pixaaVerifyDepth(PIXAA *paa, l_int32 *psame, l_int32 *pmaxd)
pixaaVerifyDepth()
l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna)
pixaaGetCount()
l_ok pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend)
pixaJoin()
PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag)
pixaaGetPix()
PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype)
pixaaGetPixa()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_ok pixaInsertPix(PIXA *pixa, l_int32 index, PIX *pixs, BOX *box)
pixaInsertPix()
PIXAA * pixaaRead(const char *filename)
pixaaRead()
l_ok pixaSetBoxa(PIXA *pixa, BOXA *boxa, l_int32 accesstype)
pixaSetBoxa()
l_ok pixaClear(PIXA *pixa)
pixaClear()
l_ok pixaaWrite(const char *filename, PIXAA *paa)
pixaaWrite()
PIXA * pixaCreateFromPix(PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh)
pixaCreateFromPix()
void pixacompDestroy(PIXAC **ppixac)
pixacompDestroy()
PIXA * pixaCreateFromPixacomp(PIXAC *pixac, l_int32 accesstype)
pixaCreateFromPixacomp()
PIXAC * pixacompRead(const char *filename)
pixacompRead()
l_ok pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma)
pixWriteStreamPng()
PIX * pixReadStreamPng(FILE *fp)
pixReadStreamPng()
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()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
l_int32 l_getStructStrFromFile(const char *filename, l_int32 field, char **pstr)
l_getStructStrFromFile()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
void * reallocNew(void **pindata, size_t oldsize, size_t newsize)
reallocNew()
FILE * fopenWriteWinTempfile(void)
fopenWriteWinTempfile()
FILE * fopenReadStream(const char *filename)
fopenReadStream()