134 #include "config_auto.h" 138 #include "allheaders.h" 140 static const l_int32 INITIAL_PTR_ARRAYSIZE = 20;
165 PROCNAME(
"pixaCreate");
168 n = INITIAL_PTR_ARRAYSIZE;
170 pixa = (
PIXA *)LEPT_CALLOC(1,
sizeof(
PIXA));
174 pixa->
pix = (
PIX **)LEPT_CALLOC(n,
sizeof(
PIX *));
176 if (!pixa->
pix || !pixa->
boxa) {
178 return (
PIXA *)ERROR_PTR(
"pix or boxa not made", procName, NULL);
205 l_int32 w, h, d, nw, nh, i, j, index;
209 PROCNAME(
"pixaCreateFromPix");
212 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
214 return (
PIXA *)ERROR_PTR(
"n must be > 0", procName, NULL);
217 return (
PIXA *)ERROR_PTR(
"pixa not made", procName, NULL);
219 if ((pix1 =
pixCreate(cellw, cellh, d)) == NULL) {
221 return (
PIXA *)ERROR_PTR(
"pix1 not made", procName, NULL);
224 nw = (w + cellw - 1) / cellw;
225 nh = (h + cellh - 1) / cellh;
226 for (i = 0, index = 0; i < nh; i++) {
227 for (j = 0; j < nw && index < n; j++, index++) {
229 j * cellw, i * cellh);
267 l_int32 i, n, w, h, wbox, hbox, cropwarn;
272 PROCNAME(
"pixaCreateFromBoxa");
275 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
277 return (
PIXA *)ERROR_PTR(
"boxa not defined", procName, NULL);
281 return (
PIXA *)ERROR_PTR(
"pixad not made", procName, NULL);
286 if (wbox > w || hbox > h)
289 *pcropwarn = cropwarn;
291 for (i = 0; i < n; i++) {
340 l_uint32 bordercolor)
342 l_int32 w, h, d, cellw, cellh, i, j;
346 PROCNAME(
"pixaSplitPix");
349 return (
PIXA *)ERROR_PTR(
"pixs not defined", procName, NULL);
350 if (nx <= 0 || ny <= 0)
351 return (
PIXA *)ERROR_PTR(
"nx and ny must be > 0", procName, NULL);
352 borderwidth = L_MAX(0, borderwidth);
355 return (
PIXA *)ERROR_PTR(
"pixa not made", procName, NULL);
357 cellw = (w + nx - 1) / nx;
358 cellh = (h + ny - 1) / ny;
360 for (i = 0; i < ny; i++) {
361 for (j = 0; j < nx; j++) {
362 if ((pix1 =
pixCreate(cellw + 2 * borderwidth,
363 cellh + 2 * borderwidth, d)) == NULL) {
365 return (
PIXA *)ERROR_PTR(
"pix1 not made", procName, NULL);
368 if (borderwidth == 0) {
376 pixRasterop(pix1, borderwidth, borderwidth, cellw, cellh,
377 PIX_SRC, pixs, j * cellw, i * cellh);
403 PROCNAME(
"pixaDestroy");
406 L_WARNING(
"ptr address is NULL!\n", procName);
410 if ((pixa = *ppixa) == NULL)
416 for (i = 0; i < pixa->
n; i++)
418 LEPT_FREE(pixa->
pix);
448 PROCNAME(
"pixaCopy");
451 return (
PIXA *)ERROR_PTR(
"pixa not defined", procName, NULL);
459 return (
PIXA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
462 return (
PIXA *)ERROR_PTR(
"pixac not made", procName, NULL);
464 for (i = 0; i < pixa->
n; i++) {
500 PROCNAME(
"pixaAddPix");
503 return ERROR_INT(
"pixa not defined", procName, 1);
505 return ERROR_INT(
"pix not defined", procName, 1);
509 else if (copyflag ==
L_COPY)
514 return ERROR_INT(
"invalid copyflag", procName, 1);
516 return ERROR_INT(
"pixc not made", procName, 1);
541 PROCNAME(
"pixaAddBox");
544 return ERROR_INT(
"pixa not defined", procName, 1);
546 return ERROR_INT(
"box not defined", procName, 1);
548 return ERROR_INT(
"invalid copyflag", procName, 1);
569 PROCNAME(
"pixaExtendArray");
572 return ERROR_INT(
"pixa not defined", procName, 1);
594 PROCNAME(
"pixaExtendArrayToSize");
597 return ERROR_INT(
"pixa not defined", procName, 1);
599 if (size > pixa->
nalloc) {
602 size *
sizeof(
PIX *))) == NULL)
603 return ERROR_INT(
"new ptr array not returned", procName, 1);
622 PROCNAME(
"pixaGetCount");
625 return ERROR_INT(
"pixa not defined", procName, 0);
641 PROCNAME(
"pixaChangeRefcount");
644 return ERROR_INT(
"pixa not defined", procName, 1);
666 PROCNAME(
"pixaGetPix");
669 return (
PIX *)ERROR_PTR(
"pixa not defined", procName, NULL);
670 if (index < 0 || index >= pixa->
n)
671 return (
PIX *)ERROR_PTR(
"index not valid", procName, NULL);
672 if ((pix = pixa->
pix[index]) == NULL) {
673 L_ERROR(
"no pix at pixa[%d]\n", procName, index);
674 return (
PIX *)ERROR_PTR(
"pix not found!", procName, NULL);
679 else if (accesstype ==
L_CLONE)
682 return (
PIX *)ERROR_PTR(
"invalid accesstype", procName, NULL);
703 PROCNAME(
"pixaGetPixDimensions");
709 return ERROR_INT(
"pixa not defined", procName, 1);
710 if (index < 0 || index >= pixa->
n)
711 return ERROR_INT(
"index not valid", procName, 1);
714 return ERROR_INT(
"pix not found!", procName, 1);
732 PROCNAME(
"pixaGetBoxa");
735 return (
BOXA *)ERROR_PTR(
"pixa not defined", procName, NULL);
737 return (
BOXA *)ERROR_PTR(
"boxa not defined", procName, NULL);
740 return (
BOXA *)ERROR_PTR(
"invalid accesstype", procName, NULL);
755 PROCNAME(
"pixaGetBoxaCount");
758 return ERROR_INT(
"pixa not defined", procName, 0);
791 PROCNAME(
"pixaGetBox");
794 return (
BOX *)ERROR_PTR(
"pixa not defined", procName, NULL);
796 return (
BOX *)ERROR_PTR(
"boxa not defined", procName, NULL);
797 if (index < 0 || index >= pixa->
boxa->
n)
798 return (
BOX *)ERROR_PTR(
"index not valid", procName, NULL);
800 return (
BOX *)ERROR_PTR(
"invalid accesstype", procName, NULL);
832 PROCNAME(
"pixaGetBoxGeometry");
839 return ERROR_INT(
"pixa not defined", procName, 1);
840 if (index < 0 || index >= pixa->
n)
841 return ERROR_INT(
"index not valid", procName, 1);
844 return ERROR_INT(
"box not found!", procName, 1);
869 PROCNAME(
"pixaSetBoxa");
872 return ERROR_INT(
"pixa not defined", procName, 1);
874 return ERROR_INT(
"boxa not defined", procName, 1);
877 return ERROR_INT(
"invalid access type", procName, 1);
906 PROCNAME(
"pixaGetPixArray");
909 return (
PIX **)ERROR_PTR(
"pixa not defined", procName, NULL);
933 l_int32 i, n, d, maxd, same;
935 PROCNAME(
"pixaVerifyDepth");
937 if (pmaxd) *pmaxd = 0;
939 return ERROR_INT(
"psame not defined", procName, 1);
941 return ERROR_INT(
"pixa not defined", procName, 1);
943 return ERROR_INT(
"no pix in pixa", procName, 1);
947 for (i = 1; i < n; i++) {
949 return ERROR_INT(
"pix depth not found", procName, 1);
950 maxd = L_MAX(maxd, d);
955 if (pmaxd) *pmaxd = maxd;
980 l_int32 i, n, w, h, maxw, maxh, same;
982 PROCNAME(
"pixaVerifyDimensions");
984 if (pmaxw) *pmaxw = 0;
985 if (pmaxh) *pmaxh = 0;
987 return ERROR_INT(
"psame not defined", procName, 1);
990 return ERROR_INT(
"pixa not defined", procName, 1);
992 return ERROR_INT(
"no pix in pixa", procName, 1);
996 for (i = 1; i < n; i++) {
998 return ERROR_INT(
"pix dimensions not found", procName, 1);
999 maxw = L_MAX(maxw, w);
1000 maxh = L_MAX(maxh, h);
1001 if (w != maxw || h != maxh)
1005 if (pmaxw) *pmaxw = maxw;
1006 if (pmaxh) *pmaxh = maxh;
1034 PROCNAME(
"pixaIsFull");
1036 if (pfullpa) *pfullpa = 0;
1037 if (pfullba) *pfullba = 0;
1039 return ERROR_INT(
"pixa not defined", procName, 1);
1044 for (i = 0; i < n; i++) {
1083 PROCNAME(
"pixaCountText");
1086 return ERROR_INT(
"&ntext not defined", procName, 1);
1089 return ERROR_INT(
"pixa not defined", procName, 1);
1092 for (i = 0; i < n; i++) {
1096 if (text && strlen(text) > 0)
1126 PROCNAME(
"pixaSetText");
1129 return ERROR_INT(
"pixa not defined", procName, 1);
1133 for (i = 0; i < n; i++) {
1143 return ERROR_INT(
"pixa and sa sizes differ", procName, 1);
1145 for (i = 0; i < n; i++) {
1185 PROCNAME(
"pixaGetLinePtrs");
1187 if (psize) *psize = 0;
1189 return (
void ***)ERROR_PTR(
"pixa not defined", procName, NULL);
1192 return (
void ***)ERROR_PTR(
"pixa not all same depth", procName, NULL);
1194 if (psize) *psize = n;
1195 if ((lineset = (
void ***)LEPT_CALLOC(n,
sizeof(
void **))) == NULL)
1196 return (
void ***)ERROR_PTR(
"lineset not made", procName, NULL);
1197 for (i = 0; i < n; i++) {
1200 lineset[i] = lineptrs;
1229 l_int32 i, n, w, h, d, spp, count, hastext;
1233 PROCNAME(
"pixaWriteStreamInfo");
1236 return ERROR_INT(
"stream not defined", procName, 1);
1238 return ERROR_INT(
"pixa not defined", procName, 1);
1241 for (i = 0; i < n; i++) {
1243 fprintf(fp,
"%d: no pix at this index\n", i);
1247 spp = pixGetSpp(pix);
1249 hastext = (text && strlen(text) > 0);
1250 if ((cmap = pixGetColormap(pix)) != NULL)
1252 fprintf(fp,
"Pix %d: w = %d, h = %d, d = %d, spp = %d",
1254 if (cmap) fprintf(fp,
", cmap(%d colors)", count);
1255 if (hastext) fprintf(fp,
", text = %s", text);
1290 PROCNAME(
"pixaReplacePix");
1293 return ERROR_INT(
"pixa not defined", procName, 1);
1294 if (index < 0 || index >= pixa->
n)
1295 return ERROR_INT(
"index not valid", procName, 1);
1297 return ERROR_INT(
"pix not defined", procName, 1);
1300 pixa->
pix[index] = pix;
1304 if (index > boxa->
n)
1305 return ERROR_INT(
"boxa index not valid", procName, 1);
1340 PROCNAME(
"pixaInsertPix");
1343 return ERROR_INT(
"pixa not defined", procName, 1);
1345 if (index < 0 || index > n)
1346 return ERROR_INT(
"index not in {0...n}", procName, 1);
1348 return ERROR_INT(
"pixs not defined", procName, 1);
1355 for (i = n; i > index; i--)
1356 pixa->
pix[i] = pixa->
pix[i - 1];
1357 pixa->
pix[index] = pixs;
1390 PROCNAME(
"pixaRemovePix");
1393 return ERROR_INT(
"pixa not defined", procName, 1);
1395 if (index < 0 || index >= n)
1396 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
1401 for (i = index + 1; i < n; i++)
1402 array[i - 1] = array[i];
1403 array[n - 1] = NULL;
1444 PROCNAME(
"pixaRemovePixAndSave");
1446 if (ppix) *ppix = NULL;
1447 if (pbox) *pbox = NULL;
1449 return ERROR_INT(
"pixa not defined", procName, 1);
1451 if (index < 0 || index >= n)
1452 return ERROR_INT(
"index not in {0...n - 1}", procName, 1);
1459 for (i = index + 1; i < n; i++)
1460 array[i - 1] = array[i];
1461 array[n - 1] = NULL;
1517 PROCNAME(
"pixaInitFull");
1520 return ERROR_INT(
"pixa not defined", procName, 1);
1524 for (i = 0; i < n; i++) {
1556 PROCNAME(
"pixaClear");
1559 return ERROR_INT(
"pixa not defined", procName, 1);
1562 for (i = 0; i < n; i++)
1596 BOXA *boxas, *boxad;
1599 PROCNAME(
"pixaJoin");
1602 return ERROR_INT(
"pixad not defined", procName, 1);
1608 if (iend < 0 || iend >= n)
1611 return ERROR_INT(
"istart > iend; nothing to add", procName, 1);
1613 for (i = istart; i <= iend; i++) {
1621 iend = L_MIN(iend, nb - 1);
1622 boxaJoin(boxad, boxas, istart, iend);
1650 l_int32 i, n1, n2, n, nb1, nb2;
1655 PROCNAME(
"pixaInterleave");
1658 return (
PIXA *)ERROR_PTR(
"pixa1 not defined", procName, NULL);
1660 return (
PIXA *)ERROR_PTR(
"pixa2 not defined", procName, NULL);
1662 return (
PIXA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
1667 return (
PIXA *)ERROR_PTR(
"at least one input pixa is empty",
1670 L_WARNING(
"counts differ: %d != %d\n", procName, n1, n2);
1675 for (i = 0; i < n; i++) {
1719 PROCNAME(
"pixaaJoin");
1722 return ERROR_INT(
"pixaad not defined", procName, 1);
1729 if (iend < 0 || iend >= n)
1732 return ERROR_INT(
"istart > iend; nothing to add", procName, 1);
1734 for (i = istart; i <= iend; i++) {
1773 PROCNAME(
"pixaaCreate");
1776 n = INITIAL_PTR_ARRAYSIZE;
1778 if ((paa = (
PIXAA *)LEPT_CALLOC(1,
sizeof(
PIXAA))) == NULL)
1779 return (
PIXAA *)ERROR_PTR(
"paa not made", procName, NULL);
1783 if ((paa->
pixa = (
PIXA **)LEPT_CALLOC(n,
sizeof(
PIXA *))) == NULL) {
1785 return (
PIXAA *)ERROR_PTR(
"pixa ptrs not made", procName, NULL);
1819 l_int32 count, i, j, npixa;
1824 PROCNAME(
"pixaaCreateFromPixa");
1827 return (
PIXAA *)ERROR_PTR(
"pixa not defined", procName, NULL);
1830 return (
PIXAA *)ERROR_PTR(
"no pix in pixa", procName, NULL);
1832 return (
PIXAA *)ERROR_PTR(
"n must be > 0", procName, NULL);
1834 return (
PIXAA *)ERROR_PTR(
"invalid type", procName, NULL);
1836 return (
PIXAA *)ERROR_PTR(
"invalid copyflag", procName, NULL);
1839 npixa = (count + n - 1) / n;
1841 npixa = L_MIN(n, count);
1844 for (i = 0; i < count; i++) {
1855 for (i = 0; i < npixa; i++) {
1857 for (j = i; j < count; j += n) {
1881 PROCNAME(
"pixaaDestroy");
1884 L_WARNING(
"ptr address is NULL!\n", procName);
1888 if ((paa = *ppaa) == NULL)
1891 for (i = 0; i < paa->
n; i++)
1893 LEPT_FREE(paa->
pixa);
1927 PROCNAME(
"pixaaAddPixa");
1930 return ERROR_INT(
"paa not defined", procName, 1);
1932 return ERROR_INT(
"pixa not defined", procName, 1);
1935 return ERROR_INT(
"invalid copyflag", procName, 1);
1940 if ((pixac =
pixaCopy(pixa, copyflag)) == NULL)
1941 return ERROR_INT(
"pixac not made", procName, 1);
1947 paa->
pixa[n] = pixac;
1963 PROCNAME(
"pixaaExtendArray");
1966 return ERROR_INT(
"paa not defined", procName, 1);
1971 return ERROR_INT(
"new ptr array not returned", procName, 1);
1997 PROCNAME(
"pixaaAddPix");
2000 return ERROR_INT(
"paa not defined", procName, 1);
2002 return ERROR_INT(
"pix not defined", procName, 1);
2005 return ERROR_INT(
"pixa not found", procName, 1);
2032 PROCNAME(
"pixaaAddBox");
2035 return ERROR_INT(
"paa not defined", procName, 1);
2037 return ERROR_INT(
"box not defined", procName, 1);
2039 return ERROR_INT(
"invalid copyflag", procName, 1);
2070 PROCNAME(
"pixaaGetCount");
2072 if (pna) *pna = NULL;
2074 return ERROR_INT(
"paa not defined", procName, 0);
2079 return ERROR_INT(
"na not made", procName, 0);
2081 for (i = 0; i < n; i++) {
2118 PROCNAME(
"pixaaGetPixa");
2121 return (
PIXA *)ERROR_PTR(
"paa not defined", procName, NULL);
2122 if (index < 0 || index >= paa->
n)
2123 return (
PIXA *)ERROR_PTR(
"index not valid", procName, NULL);
2126 return (
PIXA *)ERROR_PTR(
"invalid accesstype", procName, NULL);
2128 if ((pixa = paa->
pixa[index]) == NULL) {
2129 L_ERROR(
"missing pixa[%d]\n", procName, index);
2130 return (
PIXA *)ERROR_PTR(
"pixa not found at index", procName, NULL);
2153 PROCNAME(
"pixaaGetBoxa");
2156 return (
BOXA *)ERROR_PTR(
"paa not defined", procName, NULL);
2158 return (
BOXA *)ERROR_PTR(
"invalid access type", procName, NULL);
2182 PROCNAME(
"pixaaGetPix");
2185 return (
PIX *)ERROR_PTR(
"pixa not retrieved", procName, NULL);
2186 if ((pix =
pixaGetPix(pixa, ipix, accessflag)) == NULL)
2187 L_ERROR(
"pix not retrieved\n", procName);
2211 l_int32 i, n, d, maxd, same, samed;
2214 PROCNAME(
"pixaaVerifyDepth");
2216 if (pmaxd) *pmaxd = 0;
2218 return ERROR_INT(
"psame not defined", procName, 1);
2221 return ERROR_INT(
"paa not defined", procName, 1);
2223 return ERROR_INT(
"no pixa in paa", procName, 1);
2228 for (i = 1; i < n; i++) {
2232 maxd = L_MAX(maxd, d);
2233 if (!samed || maxd != d)
2237 if (pmaxd) *pmaxd = maxd;
2262 l_int32 i, n, w, h, maxw, maxh, same, same2;
2265 PROCNAME(
"pixaaVerifyDimensions");
2267 if (pmaxw) *pmaxw = 0;
2268 if (pmaxh) *pmaxh = 0;
2270 return ERROR_INT(
"psame not defined", procName, 1);
2273 return ERROR_INT(
"paa not defined", procName, 1);
2275 return ERROR_INT(
"no pixa in paa", procName, 1);
2282 for (i = 1; i < n; i++) {
2286 maxw = L_MAX(maxw, w);
2287 maxh = L_MAX(maxh, h);
2288 if (!same2 || maxw != w || maxh != h)
2292 if (pmaxw) *pmaxw = maxw;
2293 if (pmaxh) *pmaxh = maxh;
2317 PROCNAME(
"pixaaIsFull");
2320 return ERROR_INT(
"&full not defined", procName, 0);
2323 return ERROR_INT(
"paa not defined", procName, 0);
2327 for (i = 0; i < n; i++) {
2369 PROCNAME(
"pixaaInitFull");
2372 return ERROR_INT(
"paa not defined", procName, 1);
2374 return ERROR_INT(
"pixa not defined", procName, 1);
2378 for (i = 0; i < n; i++) {
2410 PROCNAME(
"pixaaReplacePixa");
2413 return ERROR_INT(
"paa not defined", procName, 1);
2414 if (index < 0 || index >= paa->
n)
2415 return ERROR_INT(
"index not valid", procName, 1);
2417 return ERROR_INT(
"pixa not defined", procName, 1);
2420 paa->
pixa[index] = pixa;
2442 PROCNAME(
"pixaClear");
2445 return ERROR_INT(
"paa not defined", procName, 1);
2448 for (i = 0; i < n; i++)
2474 PROCNAME(
"pixaaTruncate");
2477 return ERROR_INT(
"paa not defined", procName, 1);
2480 for (i = n - 1; i >= 0; i--) {
2521 PROCNAME(
"pixaRead");
2524 return (
PIXA *)ERROR_PTR(
"no libpng: can't read data", procName, NULL);
2528 return (
PIXA *)ERROR_PTR(
"filename not defined", procName, NULL);
2531 return (
PIXA *)ERROR_PTR(
"stream not opened", procName, NULL);
2535 return (
PIXA *)ERROR_PTR(
"pixa not read", procName, NULL);
2555 l_int32 n, i, xres, yres, version;
2561 PROCNAME(
"pixaReadStream");
2564 return (
PIXA *)ERROR_PTR(
"no libpng: can't read data", procName, NULL);
2568 return (
PIXA *)ERROR_PTR(
"stream not defined", procName, NULL);
2570 if (fscanf(fp,
"\nPixa Version %d\n", &version) != 1)
2571 return (
PIXA *)ERROR_PTR(
"not a pixa file", procName, NULL);
2573 return (
PIXA *)ERROR_PTR(
"invalid pixa version", procName, NULL);
2574 if (fscanf(fp,
"Number of pix = %d\n", &n) != 1)
2575 return (
PIXA *)ERROR_PTR(
"not a pixa file", procName, NULL);
2578 return (
PIXA *)ERROR_PTR(
"boxa not made", procName, NULL);
2581 return (
PIXA *)ERROR_PTR(
"pixa not made", procName, NULL);
2586 for (i = 0; i < n; i++) {
2587 if ((fscanf(fp,
" pix[%d]: xres = %d, yres = %d\n",
2588 &ignore, &xres, &yres)) != 3) {
2590 return (
PIXA *)ERROR_PTR(
"res reading error", procName, NULL);
2594 return (
PIXA *)ERROR_PTR(
"pix not read", procName, NULL);
2596 pixSetXRes(pix, xres);
2597 pixSetYRes(pix, yres);
2618 PROCNAME(
"pixaReadMem");
2621 return (
PIXA *)ERROR_PTR(
"data not defined", procName, NULL);
2623 return (
PIXA *)ERROR_PTR(
"stream not opened", procName, NULL);
2627 if (!pixa) L_ERROR(
"pixa not read\n", procName);
2652 PROCNAME(
"pixaWrite");
2655 return ERROR_INT(
"no libpng: can't write data", procName, 1);
2659 return ERROR_INT(
"filename not defined", procName, 1);
2661 return ERROR_INT(
"pixa not defined", procName, 1);
2664 return ERROR_INT(
"stream not opened", procName, 1);
2668 return ERROR_INT(
"pixa not written to stream", procName, 1);
2693 PROCNAME(
"pixaWriteStream");
2696 return ERROR_INT(
"no libpng: can't write data", procName, 1);
2700 return ERROR_INT(
"stream not defined", procName, 1);
2702 return ERROR_INT(
"pixa not defined", procName, 1);
2706 fprintf(fp,
"Number of pix = %d\n", n);
2708 for (i = 0; i < n; i++) {
2710 return ERROR_INT(
"pix not found", procName, 1);
2711 fprintf(fp,
" pix[%d]: xres = %d, yres = %d\n",
2741 PROCNAME(
"pixaWriteMem");
2743 if (pdata) *pdata = NULL;
2744 if (psize) *psize = 0;
2746 return ERROR_INT(
"&data not defined", procName, 1);
2748 return ERROR_INT(
"&size not defined", procName, 1);
2750 return ERROR_INT(
"pixa not defined", procName, 1);
2753 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
2754 return ERROR_INT(
"stream not opened", procName, 1);
2757 L_INFO(
"work-around: writing to a temp file\n", procName);
2760 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2762 if ((fp = tmpfile()) == NULL)
2763 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
2794 PROCNAME(
"pixaReadBoth");
2797 return (
PIXA *)ERROR_PTR(
"filename not defined", procName, NULL);
2799 l_getStructStrFromFile(filename,
L_STR_NAME, &sname);
2801 return (
PIXA *)ERROR_PTR(
"struct name not found", procName, NULL);
2802 snprintf(buf,
sizeof(buf),
"%s", sname);
2805 if (strcmp(buf,
"Pixacomp") == 0) {
2807 return (
PIXA *)ERROR_PTR(
"pac not made", procName, NULL);
2810 }
else if (strcmp(buf,
"Pixa") == 0) {
2811 if ((pixa =
pixaRead(filename)) == NULL)
2812 return (
PIXA *)ERROR_PTR(
"pixa not made", procName, NULL);
2814 return (
PIXA *)ERROR_PTR(
"invalid file type", procName, NULL);
2855 PROCNAME(
"pixaaReadFromFiles");
2858 return (
PIXAA *)ERROR_PTR(
"dirname not defined", procName, NULL);
2863 return (
PIXAA *)ERROR_PTR(
"no pixa files found", procName, NULL);
2867 for (i = 0; i < n; i++) {
2869 if ((pixa =
pixaRead(fname)) == NULL) {
2870 L_ERROR(
"pixa not read for %d-th file", procName, i);
2899 PROCNAME(
"pixaaRead");
2902 return (
PIXAA *)ERROR_PTR(
"no libpng: can't read data", procName, NULL);
2906 return (
PIXAA *)ERROR_PTR(
"filename not defined", procName, NULL);
2909 return (
PIXAA *)ERROR_PTR(
"stream not opened", procName, NULL);
2913 return (
PIXAA *)ERROR_PTR(
"paa not read", procName, NULL);
2933 l_int32 n, i, version;
2939 PROCNAME(
"pixaaReadStream");
2942 return (
PIXAA *)ERROR_PTR(
"no libpng: can't read data", procName, NULL);
2946 return (
PIXAA *)ERROR_PTR(
"stream not defined", procName, NULL);
2948 if (fscanf(fp,
"\nPixaa Version %d\n", &version) != 1)
2949 return (
PIXAA *)ERROR_PTR(
"not a pixaa file", procName, NULL);
2951 return (
PIXAA *)ERROR_PTR(
"invalid pixaa version", procName, NULL);
2952 if (fscanf(fp,
"Number of pixa = %d\n", &n) != 1)
2953 return (
PIXAA *)ERROR_PTR(
"not a pixaa file", procName, NULL);
2956 return (
PIXAA *)ERROR_PTR(
"paa not made", procName, NULL);
2959 return (
PIXAA *)ERROR_PTR(
"boxa not made", procName, NULL);
2964 for (i = 0; i < n; i++) {
2965 if ((fscanf(fp,
"\n\n --------------- pixa[%d] ---------------\n",
2968 return (
PIXAA *)ERROR_PTR(
"text reading", procName, NULL);
2972 return (
PIXAA *)ERROR_PTR(
"pixa not read", procName, NULL);
2995 PROCNAME(
"paaReadMem");
2998 return (
PIXAA *)ERROR_PTR(
"data not defined", procName, NULL);
3000 return (
PIXAA *)ERROR_PTR(
"stream not opened", procName, NULL);
3004 if (!paa) L_ERROR(
"paa not read\n", procName);
3029 PROCNAME(
"pixaaWrite");
3032 return ERROR_INT(
"no libpng: can't read data", procName, 1);
3036 return ERROR_INT(
"filename not defined", procName, 1);
3038 return ERROR_INT(
"paa not defined", procName, 1);
3041 return ERROR_INT(
"stream not opened", procName, 1);
3045 return ERROR_INT(
"paa not written to stream", procName, 1);
3070 PROCNAME(
"pixaaWriteStream");
3073 return ERROR_INT(
"no libpng: can't read data", procName, 1);
3077 return ERROR_INT(
"stream not defined", procName, 1);
3079 return ERROR_INT(
"paa not defined", procName, 1);
3083 fprintf(fp,
"Number of pixa = %d\n", n);
3085 for (i = 0; i < n; i++) {
3087 return ERROR_INT(
"pixa not found", procName, 1);
3088 fprintf(fp,
"\n\n --------------- pixa[%d] ---------------\n", i);
3117 PROCNAME(
"pixaaWriteMem");
3119 if (pdata) *pdata = NULL;
3120 if (psize) *psize = 0;
3122 return ERROR_INT(
"&data not defined", procName, 1);
3124 return ERROR_INT(
"&size not defined", procName, 1);
3126 return ERROR_INT(
"paa not defined", procName, 1);
3129 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
3130 return ERROR_INT(
"stream not opened", procName, 1);
3133 L_INFO(
"work-around: writing to a temp file\n", procName);
3136 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
3138 if ((fp = tmpfile()) == NULL)
3139 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
BOXA * boxaReadStream(FILE *fp)
boxaReadStream()
l_int32 pixCopyColormap(PIX *pixd, PIX *pixs)
pixCopyColormap()
PIXA * pixaInterleave(PIXA *pixa1, PIXA *pixa2, l_int32 copyflag)
pixaInterleave()
l_int32 pixaaReplacePixa(PIXAA *paa, l_int32 index, PIXA *pixa)
pixaaReplacePixa()
void pixaaDestroy(PIXAA **ppaa)
pixaaDestroy()
l_int32 pixaExtendArrayToSize(PIXA *pixa, l_int32 size)
pixaExtendArrayToSize()
l_int32 pixaReplacePix(PIXA *pixa, l_int32 index, PIX *pix, BOX *box)
pixaReplacePix()
l_int32 pixWriteStreamPng(FILE *fp, PIX *pix, l_float32 gamma)
pixWriteStreamPng()
PIXAA * pixaaCreate(l_int32 n)
pixaaCreate()
l_int32 boxaExtendArray(BOXA *boxa)
boxaExtendArray()
l_int32 pixaIsFull(PIXA *pixa, l_int32 *pfullpa, l_int32 *pfullba)
pixaIsFull()
l_int32 pixaaIsFull(PIXAA *paa, l_int32 *pfull)
pixaaIsFull()
l_int32 numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIX * pixReadStreamPng(FILE *fp)
pixReadStreamPng()
PIXAA * pixaaReadMem(const l_uint8 *data, size_t size)
pixaaReadMem()
l_int32 pixaaAddPixa(PIXAA *paa, PIXA *pixa, l_int32 copyflag)
pixaaAddPixa()
l_int32 boxaWriteStream(FILE *fp, BOXA *boxa)
boxaWriteStream()
PIXA * pixaReadMem(const l_uint8 *data, size_t size)
pixaReadMem()
PIXA * pixaCreate(l_int32 n)
pixaCreate()
l_int32 boxaExtendArrayToSize(BOXA *boxa, l_int32 size)
boxaExtendArrayToSize()
PIXAC * pixacompRead(const char *filename)
pixacompRead()
l_int32 pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
l_int32 pixaaAddPix(PIXAA *paa, l_int32 index, PIX *pix, BOX *box, l_int32 copyflag)
pixaaAddPix()
PIXAA * pixaaReadStream(FILE *fp)
pixaaReadStream()
PIXA * pixaaGetPixa(PIXAA *paa, l_int32 index, l_int32 accesstype)
pixaaGetPixa()
PIXA * pixaCreateFromPixacomp(PIXAC *pixac, l_int32 accesstype)
pixaCreateFromPixacomp()
void ** pixGetLinePtrs(PIX *pix, l_int32 *psize)
pixGetLinePtrs()
PIXA * pixaRead(const char *filename)
pixaRead()
l_int32 boxaRemoveBox(BOXA *boxa, l_int32 index)
boxaRemoveBox()
l_int32 pixaInsertPix(PIXA *pixa, l_int32 index, PIX *pixs, BOX *box)
pixaInsertPix()
l_int32 pixaaGetCount(PIXAA *paa, NUMA **pna)
pixaaGetCount()
l_int32 boxaAddBox(BOXA *boxa, BOX *box, l_int32 copyflag)
boxaAddBox()
PIXAA * pixaaReadFromFiles(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
pixaaReadFromFiles()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIXA * pixaSplitPix(PIX *pixs, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor)
pixaSplitPix()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
PIXA * pixaReadBoth(const char *filename)
pixaReadBoth()
BOXA * boxaCopy(BOXA *boxa, l_int32 copyflag)
boxaCopy()
NUMA * numaCreate(l_int32 n)
numaCreate()
void boxaDestroy(BOXA **pboxa)
boxaDestroy()
BOX * pixaGetBox(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetBox()
l_int32 boxaJoin(BOXA *boxad, BOXA *boxas, l_int32 istart, l_int32 iend)
boxaJoin()
l_int32 pixaClear(PIXA *pixa)
pixaClear()
l_int32 pixaaWriteMem(l_uint8 **pdata, size_t *psize, PIXAA *paa)
pixaaWriteMem()
l_int32 pixaaExtendArray(PIXAA *paa)
pixaaExtendArray()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
void * reallocNew(void **pindata, l_int32 oldsize, l_int32 newsize)
reallocNew()
l_int32 pixaGetBoxaCount(PIXA *pixa)
pixaGetBoxaCount()
l_int32 pixaRemovePixAndSave(PIXA *pixa, l_int32 index, PIX **ppix, BOX **pbox)
pixaRemovePixAndSave()
PIX ** pixaGetPixArray(PIXA *pixa)
pixaGetPixArray()
l_int32 pixaaVerifyDepth(PIXAA *paa, l_int32 *psame, l_int32 *pmaxd)
pixaaVerifyDepth()
l_int32 pixaVerifyDepth(PIXA *pixa, l_int32 *psame, l_int32 *pmaxd)
pixaVerifyDepth()
l_int32 boxaClear(BOXA *boxa)
boxaClear()
PIX * pixaaGetPix(PIXAA *paa, l_int32 index, l_int32 ipix, l_int32 accessflag)
pixaaGetPix()
l_int32 pixaVerifyDimensions(PIXA *pixa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh)
pixaVerifyDimensions()
l_int32 pixaaAddBox(PIXAA *paa, BOX *box, l_int32 copyflag)
pixaaAddBox()
BOX * boxClone(BOX *box)
boxClone()
l_int32 pixaaClear(PIXAA *paa)
pixaaClear()
PIXA * pixaCopy(PIXA *pixa, l_int32 copyflag)
pixaCopy()
l_int32 pixaWriteStream(FILE *fp, PIXA *pixa)
pixaWriteStream()
l_int32 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_int32 boxaIsFull(BOXA *boxa, l_int32 *pfull)
boxaIsFull()
static const l_int32 L_INSERT
l_int32 pixaCountText(PIXA *pixa, l_int32 *pntext)
pixaCountText()
l_int32 pixaWrite(const char *filename, PIXA *pixa)
pixaWrite()
l_int32 pixaGetPixDimensions(PIXA *pixa, l_int32 index, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixaGetPixDimensions()
l_int32 pixaAddPix(PIXA *pixa, PIX *pix, l_int32 copyflag)
pixaAddPix()
l_int32 boxaInsertBox(BOXA *boxa, l_int32 index, BOX *box)
boxaInsertBox()
PIXA * pixaCreateFromPix(PIX *pixs, l_int32 n, l_int32 cellw, l_int32 cellh)
pixaCreateFromPix()
l_int32 pixClearAll(PIX *pix)
pixClearAll()
l_int32 boxaInitFull(BOXA *boxa, BOX *box)
boxaInitFull()
#define PIXAA_VERSION_NUMBER
l_int32 boxGetGeometry(BOX *box, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
boxGetGeometry()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
char * sarrayGetString(SARRAY *sa, l_int32 index, l_int32 copyflag)
sarrayGetString()
PIXA * pixaReadStream(FILE *fp)
pixaReadStream()
PIX * pixClone(PIX *pixs)
pixClone()
void pixacompDestroy(PIXAC **ppixac)
pixacompDestroy()
PIXAA * pixaaRead(const char *filename)
pixaaRead()
void pixDestroy(PIX **ppix)
pixDestroy()
BOX * boxaGetBox(BOXA *boxa, l_int32 index, l_int32 accessflag)
boxaGetBox()
l_int32 pixaSetText(PIXA *pixa, SARRAY *sa)
pixaSetText()
l_int32 pixaChangeRefcount(PIXA *pixa, l_int32 delta)
pixaChangeRefcount()
l_int32 pixaaInitFull(PIXAA *paa, PIXA *pixa)
pixaaInitFull()
static l_int32 pixaExtendArray(PIXA *pixa)
pixaExtendArray()
void *** pixaGetLinePtrs(PIXA *pixa, l_int32 *psize)
pixaGetLinePtrs()
SARRAY * getSortedPathnamesInDirectory(const char *dirname, const char *substr, l_int32 first, l_int32 nfiles)
getSortedPathnamesInDirectory()
l_int32 pixaaJoin(PIXAA *paad, PIXAA *paas, l_int32 istart, l_int32 iend)
pixaaJoin()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
#define PIXA_VERSION_NUMBER
l_int32 pixaWriteMem(l_uint8 **pdata, size_t *psize, PIXA *pixa)
pixaWriteMem()
PIXA * pixaCreateFromBoxa(PIX *pixs, BOXA *boxa, l_int32 *pcropwarn)
pixaCreateFromBoxa()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
PIXAA * pixaaCreateFromPixa(PIXA *pixa, l_int32 n, l_int32 type, l_int32 copyflag)
pixaaCreateFromPixa()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_int32 sarrayGetCount(SARRAY *sa)
sarrayGetCount()
l_int32 pixaWriteStreamInfo(FILE *fp, PIXA *pixa)
pixaWriteStreamInfo()
char * pixGetText(PIX *pix)
pixGetText()
l_int32 pixaJoin(PIXA *pixad, PIXA *pixas, l_int32 istart, l_int32 iend)
pixaJoin()
PIX * pixaGetPix(PIXA *pixa, l_int32 index, l_int32 accesstype)
pixaGetPix()
l_int32 pixClipToForeground(PIX *pixs, PIX **ppixd, BOX **pbox)
pixClipToForeground()
l_int32 pixcmapGetCount(PIXCMAP *cmap)
pixcmapGetCount()
l_int32 pixaGetBoxGeometry(PIXA *pixa, l_int32 index, l_int32 *px, l_int32 *py, l_int32 *pw, l_int32 *ph)
pixaGetBoxGeometry()
BOX * boxCopy(BOX *box)
boxCopy()
l_int32 pixaRemovePix(PIXA *pixa, l_int32 index)
pixaRemovePix()
l_int32 pixaAddBox(PIXA *pixa, BOX *box, l_int32 copyflag)
pixaAddBox()
l_int32 pixaaVerifyDimensions(PIXAA *paa, l_int32 *psame, l_int32 *pmaxw, l_int32 *pmaxh)
pixaaVerifyDimensions()
BOXA * boxaCreate(l_int32 n)
boxaCreate()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
l_int32 pixaaWrite(const char *filename, PIXAA *paa)
pixaaWrite()
void boxDestroy(BOX **pbox)
boxDestroy()
l_int32 boxaGetExtent(BOXA *boxa, l_int32 *pw, l_int32 *ph, BOX **pbox)
boxaGetExtent()
l_int32 pixaaTruncate(PIXAA *paa)
pixaaTruncate()
l_int32 boxaGetCount(BOXA *boxa)
boxaGetCount()
l_int32 pixaInitFull(PIXA *pixa, PIX *pix, BOX *box)
pixaInitFull()
BOXA * pixaaGetBoxa(PIXAA *paa, l_int32 accesstype)
pixaaGetBoxa()
l_int32 pixSetAll(PIX *pix)
pixSetAll()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_int32 boxaRemoveBoxAndSave(BOXA *boxa, l_int32 index, BOX **pbox)
boxaRemoveBoxAndSave()
void pixaDestroy(PIXA **ppixa)
pixaDestroy()
l_int32 pixaSetBoxa(PIXA *pixa, BOXA *boxa, l_int32 accesstype)
pixaSetBoxa()
l_int32 pixaGetCount(PIXA *pixa)
pixaGetCount()
l_int32 pixSetText(PIX *pix, const char *textstring)
pixSetText()
l_int32 boxaReplaceBox(BOXA *boxa, l_int32 index, BOX *box)
boxaReplaceBox()
void sarrayDestroy(SARRAY **psa)
sarrayDestroy()
l_int32 pixaaWriteStream(FILE *fp, PIXAA *paa)
pixaaWriteStream()
BOXA * pixaGetBoxa(PIXA *pixa, l_int32 accesstype)
pixaGetBoxa()