160#include <config_auto.h>
165#include "allheaders.h"
195l_int32 i, n, d, xb, yb, wb, hb, res;
200 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
202 n = pixaGetCount(pixa);
203 if (n == 0 && w == 0 && h == 0)
204 return (
PIX *)ERROR_PTR(
"no components; no size", __func__, NULL);
206 L_WARNING(
"no components; returning empty 1 bpp pix\n", __func__);
207 return pixCreate(w, h, 1);
212 if (w == 0 || h == 0) {
213 boxa = pixaGetBoxa(pixa,
L_CLONE);
214 boxaGetExtent(boxa, &w, &h, NULL);
216 if (w == 0 || h == 0)
217 return (
PIX *)ERROR_PTR(
"no associated boxa", __func__, NULL);
221 pix1 = pixaGetPix(pixa, 0,
L_CLONE);
222 d = pixGetDepth(pix1);
223 res = pixGetXRes(pix1);
226 if ((pixd = pixCreate(w, h, d)) == NULL)
227 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
228 pixSetResolution(pixd, res, res);
231 for (i = 0; i < n; i++) {
232 if (pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb)) {
233 L_WARNING(
"no box found!\n", __func__);
236 pix1 = pixaGetPix(pixa, i,
L_CLONE);
238 pixRasterop(pixd, xb, yb, wb, hb,
PIX_PAINT, pix1, 0, 0);
240 pixRasterop(pixd, xb, yb, wb, hb,
PIX_SRC, pix1, 0, 0);
271l_int32 i, n, same, maxd, index, xb, yb, wb, hb, res;
273PIX *pixs, *pix1, *pixd;
277 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
279 if ((n = pixaGetCount(pixa)) == 0)
280 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
281 pixaVerifyDepth(pixa, &same, &maxd);
283 return (
PIX *)ERROR_PTR(
"not all components are 1 bpp", __func__, NULL);
287 if (w == 0 || h == 0) {
288 boxa = pixaGetBoxa(pixa,
L_CLONE);
289 boxaGetExtent(boxa, &w, &h, NULL);
294 if ((pixd = pixCreate(w, h, 8)) == NULL)
295 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
296 cmap = pixcmapCreateRandom(8, 1, 1);
297 pixSetColormap(pixd, cmap);
300 for (i = 0; i < n; i++) {
301 index = 1 + (i % 254);
302 pixaGetBoxGeometry(pixa, i, &xb, &yb, &wb, &hb);
303 pixs = pixaGetPix(pixa, i,
L_CLONE);
304 if (i == 0) res = pixGetXRes(pixs);
305 pix1 = pixConvert1To8(NULL, pixs, 0, index);
306 pixRasterop(pixd, xb, yb, wb, hb,
PIX_PAINT, pix1, 0, 0);
311 pixSetResolution(pixd, res, res);
341 l_float32 scalefactor,
347l_int32 i, n, x, y, w, h, depth, bordval;
349PIX *pix1, *pix2, *pix3, *pixd;
352 if (pboxa) *pboxa = NULL;
354 return (
PIX *)ERROR_PTR(
"pixas not defined", __func__, NULL);
355 if (direction != L_HORIZ && direction != L_VERT)
356 return (
PIX *)ERROR_PTR(
"invalid direction", __func__, NULL);
359 pixa1 = pixaConvertToSameDepth(pixas);
360 pixaGetDepthInfo(pixa1, &depth, NULL);
363 n = pixaGetCount(pixa1);
364 pixa2 = pixaCreate(n);
365 bordval = (depth == 1) ? 1 : 0;
367 for (i = 0; i < n; i++) {
368 if ((pix1 = pixaGetPix(pixa1, i,
L_CLONE)) == NULL) {
369 L_WARNING(
"missing pix at index %d\n", __func__, i);
373 if (scalefactor != 1.0)
374 pix2 = pixScale(pix1, scalefactor, scalefactor);
376 pix2 = pixClone(pix1);
378 pix3 = pixAddBorder(pix2, border, bordval);
380 pix3 = pixClone(pix2);
382 pixGetDimensions(pix3, &w, &h, NULL);
383 box = boxCreate(x, y, w, h);
384 if (direction == L_HORIZ)
396 *pboxa = pixaGetBoxa(pixa2,
L_COPY);
437l_int32 n, nw, nh, w, h, d, wt, ht, res, samedepth;
438l_int32 index, i, j, hascmap;
441PIX *pix1, *pix2, *pixd;
444 if (pncols) *pncols = 0;
445 if (pboxa) *pboxa = NULL;
447 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
450 if ((n = pixaGetCount(pixa)) == 0)
451 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
452 pixaAnyColormaps(pixa, &hascmap);
453 pixaVerifyDepth(pixa, &samedepth, NULL);
454 if (hascmap || !samedepth) {
455 pixa1 = pixaCreate(n);
456 for (i = 0; i < n; i++) {
457 pix1 = pixaGetPix(pixa, i,
L_CLONE);
458 pix2 = pixConvertTo32(pix1);
463 pixa1 = pixaCopy(pixa,
L_CLONE);
467 nw = (l_int32)sqrt((l_float64)n);
468 nh = (n + nw - 1) / nw;
473 pix1 = pixaGetPix(pixa1, 0,
L_CLONE);
474 d = pixGetDepth(pix1);
475 res = pixGetXRes(pix1);
477 if ((pixd = pixCreate(w, h, d)) == NULL) {
479 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
482 pixSetResolution(pixd, res, res);
483 boxa = boxaCreate(n);
487 for (i = 0; i < nh; i++) {
488 for (j = 0; j < nw && index < n; j++, index++) {
489 pix1 = pixaGetPix(pixa1, index,
L_CLONE);
490 pixGetDimensions(pix1, &wt, &ht, NULL);
491 if (wt > cellw || ht > cellh) {
492 L_INFO(
"pix(%d) omitted; size %dx%x\n", __func__, index,
494 box = boxCreate(0, 0, 0, 0);
499 pixRasterop(pixd, j * cellw, i * cellh, wt, ht,
501 box = boxCreate(j * cellw, i * cellh, wt, ht);
508 snprintf(buf,
sizeof(buf),
"n = %d", boxaGetCount(boxa));
509 pixSetText(pixd, buf);
511 if (pncols) *pncols = nw;
549 l_uint32 bordercolor)
551l_int32 w, h, d, wt, ht;
552l_int32 i, j, k, x, y, n;
556 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
557 if (nx <= 0 || ny <= 0)
558 return (
PIX *)ERROR_PTR(
"nx and ny must be > 0", __func__, NULL);
559 if ((n = pixaGetCount(pixa)) == 0)
560 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
562 return (
PIX *)ERROR_PTR(
"n != nx * ny", __func__, NULL);
563 borderwidth = L_MAX(0, borderwidth);
565 pixaGetPixDimensions(pixa, 0, &wt, &ht, &d);
566 w = nx * (wt + 2 * borderwidth);
567 h = ny * (ht + 2 * borderwidth);
569 if ((pixd = pixCreate(w, h, d)) == NULL)
570 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
571 pix1 = pixaGetPix(pixa, 0,
L_CLONE);
572 pixCopyColormap(pixd, pix1);
575 pixSetAllArbitrary(pixd, bordercolor);
578 for (i = 0, k = 0; i < ny; i++) {
580 for (j = 0; j < nx; j++, k++) {
581 pix1 = pixaGetPix(pixa, k,
L_CLONE);
582 pixRasterop(pixd, x, y, wt, ht,
PIX_SRC, pix1, 0, 0);
584 x += wt + 2 * borderwidth;
586 y += ht + 2 * borderwidth;
623l_int32 wmax, hmax, wd, hd, d, hascmap, res, same;
624l_int32 i, j, n, ni, ncols, nrows;
625l_int32 ystart, xstart, wt, ht;
626PIX *pix1, *pix2, *pixd;
630 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
631 spacing = L_MAX(spacing, 0);
632 if ((n = pixaGetCount(pixa)) == 0)
633 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
636 pixaAnyColormaps(pixa, &hascmap);
638 pixa1 = pixaCreate(n);
639 for (i = 0; i < n; i++) {
640 pix1 = pixaGetPix(pixa, i,
L_CLONE);
641 pix2 = pixConvertTo32(pix1);
646 pixa1 = pixaCopy(pixa,
L_CLONE);
650 pixaGetDepthInfo(pixa1, &d, &same);
653 return (
PIX *)ERROR_PTR(
"depths not equal", __func__, NULL);
655 pixaSizeRange(pixa1, NULL, NULL, &wmax, &hmax);
658 ncols = (l_int32)((l_float32)(maxwidth - spacing) /
659 (l_float32)(wmax + spacing));
660 ncols = L_MAX(ncols, 1);
661 nrows = (n + ncols - 1) / ncols;
662 wd = wmax * ncols + spacing * (ncols + 1);
663 hd = hmax * nrows + spacing * (nrows + 1);
664 if ((pixd = pixCreate(wd, hd, d)) == NULL) {
666 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
670 if ((background == 1 && d == 1) || (background == 0 && d != 1))
674 for (i = 0, ni = 0; i < nrows; i++) {
675 ystart = spacing + i * (hmax + spacing);
676 for (j = 0; j < ncols && ni < n; j++, ni++) {
677 xstart = spacing + j * (wmax + spacing);
678 pix1 = pixaGetPix(pixa1, ni,
L_CLONE);
679 if (ni == 0) res = pixGetXRes(pix1);
680 pixGetDimensions(pix1, &wt, &ht, NULL);
681 pixRasterop(pixd, xstart, ystart, wt, ht,
PIX_SRC, pix1, 0, 0);
685 pixSetResolution(pixd, res, res);
733 l_float32 scalefactor,
740l_int32 bordval, wtry, wt, ht;
744l_int32 i, j, index, n, x, y, nrows, ninrow, res;
750PIX *pix, *pixn, *pix1, *pixd;
754 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
755 if (outdepth != 1 && outdepth != 8 && outdepth != 32)
756 return (
PIX *)ERROR_PTR(
"outdepth not in {1, 8, 32}", __func__, NULL);
757 spacing = L_MAX(spacing, 0);
758 border = L_MAX(border, 0);
759 if (scalefactor <= 0.0) scalefactor = 1.0;
761 if ((n = pixaGetCount(pixa)) == 0)
762 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
765 pixan = pixaCreate(n);
766 bordval = (outdepth == 1) ? 1 : 0;
767 for (i = 0; i < n; i++) {
768 if ((pix = pixaGetPix(pixa, i,
L_CLONE)) == NULL)
772 pixn = pixConvertTo1(pix, 128);
773 else if (outdepth == 8)
774 pixn = pixConvertTo8(pix, FALSE);
776 pixn = pixConvertTo32(pix);
779 if (scalefactor != 1.0)
780 pix1 = pixScale(pixn, scalefactor, scalefactor);
782 pix1 = pixClone(pixn);
784 pixd = pixAddBorder(pix1, border, bordval);
786 pixd = pixClone(pix1);
792 if (pixaGetCount(pixan) != n) {
793 n = pixaGetCount(pixan);
794 L_WARNING(
"only got %d components\n", __func__, n);
797 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
802 nainrow = numaCreate(0);
803 namaxh = numaCreate(0);
807 for (i = 0, irow = 0; i < n; i++, irow++) {
808 pixaGetPixDimensions(pixan, i, &wt, &ht, NULL);
809 wtry = w + wt + spacing;
810 if (wtry > maxwidth) {
811 numaAddNumber(nainrow, irow);
812 numaAddNumber(namaxh, maxh);
813 wmaxrow = L_MAX(wmaxrow, w);
816 w = wt + 2 * spacing;
820 maxh = L_MAX(maxh, ht);
825 numaAddNumber(nainrow, irow);
826 numaAddNumber(namaxh, maxh);
827 wmaxrow = L_MAX(wmaxrow, w);
830 if ((pixd = pixCreate(wmaxrow, h, outdepth)) == NULL) {
831 numaDestroy(&nainrow);
832 numaDestroy(&namaxh);
834 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
838 if ((background == 1 && outdepth == 1) ||
839 (background == 0 && outdepth != 1))
844 nrows = numaGetCount(nainrow);
846 boxa = boxaCreate(n);
847 for (i = 0, index = 0; i < nrows; i++) {
848 numaGetIValue(nainrow, i, &ninrow);
849 numaGetIValue(namaxh, i, &maxh);
851 for (j = 0; j < ninrow; j++, index++) {
852 pix = pixaGetPix(pixan, index,
L_CLONE);
854 res = pixGetXRes(pix);
855 pixSetResolution(pixd, res, res);
857 pixGetDimensions(pix, &wt, &ht, NULL);
858 boxaAddBox(boxa, boxCreate(x + border, y + border,
859 wt - 2 * border, ht - 2 *border),
L_INSERT);
860 pixRasterop(pixd, x, y, wt, ht,
PIX_SRC, pix, 0, 0);
866 if (boxaWriteMem(&data, &size, boxa) == 0)
867 pixSetText(pixd, (
char *)data);
871 numaDestroy(&nainrow);
872 numaDestroy(&namaxh);
914 l_float32 scalefactor,
918l_int32 i, j, index, n, x, y, nrows, wb, hb, w, h, maxd, maxh, bordval, res;
923PIX *pix1, *pix2, *pix3, *pixd;
927 return (
PIX *)ERROR_PTR(
"pixas not defined", __func__, NULL);
928 border = L_MAX(border, 0);
929 if (scalefactor <= 0.0) scalefactor = 1.0;
930 if ((n = pixaGetCount(pixas)) == 0)
931 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
934 pixa1 = pixaConvertToSameDepth(pixas);
935 pixaGetDepthInfo(pixa1, &maxd, NULL);
938 pixa2 = pixaCreate(n);
939 bordval = (maxd == 1) ? 1 : 0;
940 for (i = 0; i < n; i++) {
941 if ((pix1 = pixaGetPix(pixa1, i,
L_CLONE)) == NULL)
943 if (scalefactor != 1.0)
944 pix2 = pixScale(pix1, scalefactor, scalefactor);
946 pix2 = pixClone(pix1);
948 pix3 = pixAddBorder(pix2, border, bordval);
950 pix3 = pixClone(pix2);
951 if (i == 0) res = pixGetXRes(pix3);
957 if (pixaGetCount(pixa2) != n) {
958 n = pixaGetCount(pixa2);
959 L_WARNING(
"only got %d components\n", __func__, n);
962 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
967 boxa = boxaCreate(n);
968 nrows = (n + nx - 1) / nx;
970 for (i = 0, index = 0; i < nrows; i++) {
973 for (j = 0; j < nx && index < n; j++) {
974 pixaGetPixDimensions(pixa2, index, &wb, &hb, NULL);
975 box = boxCreate(x, y, wb, hb);
977 maxh = L_MAX(maxh, hb + spacing);
986 boxaGetExtent(boxa, &w, &h, NULL);
987 pixd =
pixaDisplay(pixa2, w + spacing, h + spacing);
988 pixSetResolution(pixd, res, res);
991 if (boxaWriteMem(&data, &size, boxa) == 0)
992 pixSetText(pixd, (
char *)data);
1033l_int32 x, y, w, h, wd, hd, d, res;
1034l_int32 i, n, nrows, maxht, ninrow, irow, bordval;
1037PIX *pix, *pixn, *pix1, *pixb, *pixd;
1041 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
1042 if (outdepth != 1 && outdepth != 8 && outdepth != 32)
1043 return (
PIX *)ERROR_PTR(
"outdepth not in {1, 8, 32}", __func__, NULL);
1045 return (
PIX *)ERROR_PTR(
"ncols must be > 0", __func__, NULL);
1046 spacing = L_MAX(spacing, 0);
1047 if (border < 0 || border > tilewidth / 5)
1049 if ((n = pixaGetCount(pixa)) == 0)
1050 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1053 pixan = pixaCreate(n);
1054 bordval = (outdepth == 1) ? 1 : 0;
1055 for (i = 0; i < n; i++) {
1056 if ((pix = pixaGetPix(pixa, i,
L_CLONE)) == NULL)
1059 pixGetDimensions(pix, &w, &h, &d);
1060 scalefact = (l_float32)(tilewidth - 2 * border) / (l_float32)w;
1061 if (d == 1 && outdepth > 1 && scalefact < 1.0)
1062 pix1 = pixScaleToGray(pix, scalefact);
1064 pix1 = pixScale(pix, scalefact, scalefact);
1067 pixn = pixConvertTo1(pix1, 128);
1068 else if (outdepth == 8)
1069 pixn = pixConvertTo8(pix1, FALSE);
1071 pixn = pixConvertTo32(pix1);
1075 pixb = pixAddBorder(pixn, border, bordval);
1077 pixb = pixClone(pixn);
1083 if ((n = pixaGetCount(pixan)) == 0) {
1084 pixaDestroy(&pixan);
1085 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1089 wd = tilewidth * ncols + spacing * (ncols + 1);
1090 nrows = (n + ncols - 1) / ncols;
1091 if ((rowht = (l_int32 *)LEPT_CALLOC(nrows,
sizeof(l_int32))) == NULL) {
1092 pixaDestroy(&pixan);
1093 return (
PIX *)ERROR_PTR(
"rowht array not made", __func__, NULL);
1098 for (i = 0; i < n; i++) {
1099 pix = pixaGetPix(pixan, i,
L_CLONE);
1101 pixGetDimensions(pix, &w, &h, NULL);
1102 maxht = L_MAX(h, maxht);
1103 if (ninrow == ncols) {
1104 rowht[irow] = maxht;
1111 rowht[irow] = maxht;
1115 hd = spacing * (nrows + 1);
1116 for (i = 0; i < nrows; i++)
1119 pixd = pixCreate(wd, hd, outdepth);
1120 if ((background == 1 && outdepth == 1) ||
1121 (background == 0 && outdepth != 1))
1127 for (i = 0; i < n; i++) {
1128 pix = pixaGetPix(pixan, i,
L_CLONE);
1130 res = pixGetXRes(pix);
1131 pixSetResolution(pixd, res, res);
1133 pixGetDimensions(pix, &w, &h, NULL);
1134 if (i && ((i % ncols) == 0)) {
1136 y += spacing + rowht[irow];
1139 pixRasterop(pixd, x, y, w, h,
PIX_SRC, pix, 0, 0);
1140 x += tilewidth + spacing;
1144 pixaDestroy(&pixan);
1180 l_float32 scalefactor,
1190PIX *pix1, *pix2, *pix3, *pix4, *pixd;
1194 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
1195 if ((n = pixaGetCount(pixa)) == 0)
1196 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1198 return (
PIX *)ERROR_PTR(
"invalid maxwidth", __func__, NULL);
1199 spacing = L_MAX(spacing, 0);
1200 border = L_MAX(border, 0);
1201 if (scalefactor <= 0.0) scalefactor = 1.0;
1202 if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) {
1203 l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4);
1204 if (fsize & 1) fsize--;
1205 L_WARNING(
"changed fontsize from %d to %d\n", __func__,
1211 pixaSizeRange(pixa, NULL, NULL, &maxw, NULL);
1212 maxwidth = L_MAX(maxwidth, scalefactor * (maxw + 2 * spacing + 2 * border));
1214 bmf = bmfCreate(NULL, fontsize);
1215 pixad = pixaCreate(n);
1216 for (i = 0; i < n; i++) {
1217 pix1 = pixaGetPix(pixa, i,
L_CLONE);
1218 pix2 = pixConvertTo32(pix1);
1219 pix3 = pixAddBorderGeneral(pix2, spacing / 2, spacing / 2, spacing / 2,
1220 spacing / 2, 0xffffff00);
1221 textstr = pixGetText(pix1);
1222 if (textstr && strlen(textstr) > 0) {
1223 snprintf(buf,
sizeof(buf),
"%s", textstr);
1224 pix4 = pixAddSingleTextblock(pix3, bmf, buf, textcolor,
1227 pix4 = pixClone(pix3);
1237 0, spacing, border);
1238 pixaDestroy(&pixad);
1282l_int32 i, n, x, y, w, h, yval, index;
1287PIX *pix1, *pix2, *pix3, *pix4, *pix5, *pixd;
1291 return (
PIX *)ERROR_PTR(
"pixa not defined", __func__, NULL);
1293 return (
PIX *)ERROR_PTR(
"na not defined", __func__, NULL);
1294 if ((n = pixaGetCount(pixa)) == 0)
1295 return (
PIX *)ERROR_PTR(
"no pixa components", __func__, NULL);
1296 if (n != numaGetCount(na))
1297 return (
PIX *)ERROR_PTR(
"pixa and na counts differ", __func__, NULL);
1299 return (
PIX *)ERROR_PTR(
"invalid width", __func__, NULL);
1301 L_WARNING(
"very small width: %d\n", __func__, width);
1302 spacing = L_MAX(spacing, 0);
1303 border = L_MAX(border, 0);
1304 if (fontsize < 4 || fontsize > 20 || (fontsize & 1)) {
1305 l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4);
1306 if (fsize & 1) fsize--;
1307 L_WARNING(
"changed fontsize from %d to %d\n", __func__,
1313 bmf = bmfCreate(NULL, fontsize);
1314 pixad = pixaCreate(n);
1315 numaGetMax(na, &maxindex, NULL);
1316 nay = numaMakeConstant(spacing, lept_roundftoi(maxindex) + 1);
1317 for (i = 0; i < n; i++) {
1318 numaGetIValue(na, i, &index);
1319 numaGetIValue(nay, index, &yval);
1320 pix1 = pixaGetPix(pixa, i,
L_CLONE);
1321 pix2 = pixConvertTo32(pix1);
1322 pix3 = pixScaleToSize(pix2, width, 0);
1323 pix4 = pixAddBorderGeneral(pix3, border, border, border, border, 0);
1324 textstr = pixGetText(pix1);
1325 if (textstr && strlen(textstr) > 0) {
1326 snprintf(buf,
sizeof(buf),
"%s", textstr);
1327 pix5 = pixAddTextlines(pix4, bmf, textstr, textcolor,
L_ADD_BELOW);
1329 pix5 = pixClone(pix4);
1332 x = spacing + border + index * (2 * border + width + spacing);
1334 pixGetDimensions(pix5, &w, &h, NULL);
1335 yval += h + spacing;
1336 numaSetValue(nay, index, yval);
1337 box = boxCreate(x, y, w, h);
1348 pixaDestroy(&pixad);
1397 l_float32 scalefactor,
1406l_int32 i, n, w, maxd, maxd1, maxd2, text;
1408PIX *pixs1, *pixs2, *pix1, *pix2, *pix3, *pix4;
1409PIX *pix5, *pix6, *pix7, *pix8, *pix9;
1414 return (
PIX *)ERROR_PTR(
"pixas1 not defined", __func__, NULL);
1416 return (
PIX *)ERROR_PTR(
"pixas2 not defined", __func__, NULL);
1417 spacing1 = L_MAX(spacing1, 0);
1418 spacing2 = L_MAX(spacing2, 0);
1419 border1 = L_MAX(border1, 0);
1420 border2 = L_MAX(border2, 0);
1421 if (scalefactor <= 0.0) scalefactor = 1.0;
1422 if ((n = pixaGetCount(pixas1)) == 0)
1423 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1424 if (n != pixaGetCount(pixas2))
1425 return (
PIX *)ERROR_PTR(
"pixa sizes differ", __func__, NULL);
1426 text = (fontsize <= 0) ? 0 : 1;
1427 if (text && (fontsize < 4 || fontsize > 20 || (fontsize & 1))) {
1428 l_int32 fsize = L_MAX(L_MIN(fontsize, 20), 4);
1429 if (fsize & 1) fsize--;
1430 L_WARNING(
"changed fontsize from %d to %d\n", __func__,
1439 pixaGetRenderingDepth(pixas1, &maxd1);
1440 pixaGetRenderingDepth(pixas2, &maxd2);
1441 maxd = L_MAX(maxd1, maxd2);
1446 pixa1 = pixaCreate(n);
1447 for (i = 0; i < n; i++) {
1448 pixs1 = pixaGetPix(pixas1, i,
L_CLONE);
1449 pixs2 = pixaGetPix(pixas2, i,
L_CLONE);
1450 if (!pixs1 || !pixs2)
continue;
1452 pix1 = pixClone(pixs1);
1453 pix2 = pixClone(pixs2);
1454 }
else if (maxd == 8) {
1455 pix1 = pixConvertTo8(pixs1, 0);
1456 pix2 = pixConvertTo8(pixs2, 0);
1458 pix1 = pixConvertTo32(pixs1);
1459 pix2 = pixConvertTo32(pixs2);
1463 if (scalefactor != 1.0) {
1464 pix3 = pixScale(pix1, scalefactor, scalefactor);
1465 pix4 = pixScale(pix2, scalefactor, scalefactor);
1467 pix3 = pixClone(pix1);
1468 pix4 = pixClone(pix2);
1473 pix5 = pixAddBlackOrWhiteBorder(pix3, border1, border1, border1,
1475 pix6 = pixAddBlackOrWhiteBorder(pix4, border1, border1, border1,
1478 pix5 = pixClone(pix3);
1479 pix6 = pixClone(pix4);
1484 pix7 = pixAddBlackOrWhiteBorder(pix5, spacing1 / 2, spacing1 / 2,
1486 pix8 = pixAddBlackOrWhiteBorder(pix6, spacing1 / 2, spacing1 / 2,
1489 pix7 = pixClone(pix5);
1490 pix8 = pixClone(pix6);
1494 pixa2 = pixaCreate(2);
1499 pixaDestroy(&pixa2);
1506 pixaSetText(pixa1, NULL, sa);
1508 n = pixaGetCount(pixa1);
1509 na = numaMakeSequence(startindex, 1, n);
1511 pixaSetText(pixa1, NULL, sa1);
1513 sarrayDestroy(&sa1);
1515 pixaSizeRange(pixa1, NULL, NULL, &w, NULL);
1517 border2, fontsize, 0xff000000);
1519 pixaDestroy(&pixa1);
1547l_int32 i, j, n, nbox, na, d, wmax, hmax, x, y, xb, yb, wb, hb;
1554 return (
PIX *)ERROR_PTR(
"paa not defined", __func__, NULL);
1556 n = pixaaGetCount(paa, NULL);
1558 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1562 boxa1 = pixaaGetBoxa(paa,
L_CLONE);
1563 nbox = boxaGetCount(boxa1);
1564 if (w == 0 || h == 0) {
1566 boxaGetExtent(boxa1, &w, &h, NULL);
1569 for (i = 0; i < n; i++) {
1570 pixa = pixaaGetPixa(paa, i,
L_CLONE);
1571 boxa = pixaGetBoxa(pixa,
L_CLONE);
1572 boxaGetExtent(boxa, &w, &h, NULL);
1573 wmax = L_MAX(wmax, w);
1574 hmax = L_MAX(hmax, h);
1584 pixa = pixaaGetPixa(paa, 0,
L_CLONE);
1585 pix1 = pixaGetPix(pixa, 0,
L_CLONE);
1586 d = pixGetDepth(pix1);
1590 if ((pixd = pixCreate(w, h, d)) == NULL) {
1591 boxaDestroy(&boxa1);
1592 return (
PIX *)ERROR_PTR(
"pixd not made", __func__, NULL);
1596 for (i = 0; i < n; i++) {
1597 pixa = pixaaGetPixa(paa, i,
L_CLONE);
1599 boxaGetBoxGeometry(boxa1, i, &x, &y, NULL, NULL);
1600 na = pixaGetCount(pixa);
1601 for (j = 0; j < na; j++) {
1602 pixaGetBoxGeometry(pixa, j, &xb, &yb, &wb, &hb);
1603 pix1 = pixaGetPix(pixa, j,
L_CLONE);
1604 pixRasterop(pixd, x + xb, y + yb, wb, hb,
PIX_PAINT, pix1, 0, 0);
1609 boxaDestroy(&boxa1);
1646 l_float32 scalefactor,
1656 return (
PIX *)ERROR_PTR(
"paa not defined", __func__, NULL);
1657 if (scalefactor <= 0.0) scalefactor = 1.0;
1658 if (hspacing < 0) hspacing = 0;
1659 if (vspacing < 0) vspacing = 0;
1660 if (border < 0) border = 0;
1662 if ((n = pixaaGetCount(paa, NULL)) == 0)
1663 return (
PIX *)ERROR_PTR(
"no components", __func__, NULL);
1666 pixa2 = pixaCreate(0);
1667 for (i = 0; i < n; i++) {
1668 pixa1 = pixaaGetPixa(paa, i,
L_CLONE);
1672 pixaDestroy(&pixa1);
1675 vs = vspacing - 2 * hspacing;
1677 pixaDestroy(&pixa2);
1718 return (
PIXA *)ERROR_PTR(
"paa not defined", __func__, NULL);
1719 if (outdepth != 1 && outdepth != 8 && outdepth != 32)
1720 return (
PIXA *)ERROR_PTR(
"outdepth not in {1, 8, 32}", __func__, NULL);
1722 return (
PIXA *)ERROR_PTR(
"ncols must be > 0", __func__, NULL);
1723 if (border < 0 || border > tilewidth / 5)
1726 if ((n = pixaaGetCount(paa, NULL)) == 0)
1727 return (
PIXA *)ERROR_PTR(
"no components", __func__, NULL);
1729 pixad = pixaCreate(n);
1730 for (i = 0; i < n; i++) {
1731 pixa = pixaaGetPixa(paa, i,
L_CLONE);
1733 background, spacing, border);
1762 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1764 n = pixaGetCount(pixas);
1765 pixad = pixaCreate(n);
1766 for (i = 0; i < n; i++) {
1767 pix1 = pixaGetPix(pixas, i,
L_CLONE);
1768 pix2 = pixConvertTo1(pix1, thresh);
1773 boxa = pixaGetBoxa(pixas,
L_COPY);
1774 pixaSetBoxa(pixad, boxa,
L_INSERT);
1801 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1803 n = pixaGetCount(pixas);
1804 pixad = pixaCreate(n);
1805 for (i = 0; i < n; i++) {
1806 pix1 = pixaGetPix(pixas, i,
L_CLONE);
1807 pix2 = pixConvertTo8(pix1, cmapflag);
1812 boxa = pixaGetBoxa(pixas,
L_COPY);
1813 pixaSetBoxa(pixad, boxa,
L_INSERT);
1840 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1842 n = pixaGetCount(pixas);
1843 pixad = pixaCreate(n);
1844 for (i = 0; i < n; i++) {
1845 pix1 = pixaGetPix(pixas, i,
L_CLONE);
1846 pix2 = pixConvertTo8Colormap(pix1, dither);
1851 boxa = pixaGetBoxa(pixas,
L_COPY);
1852 pixaSetBoxa(pixad, boxa,
L_INSERT);
1879 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1881 n = pixaGetCount(pixas);
1882 pixad = pixaCreate(n);
1883 for (i = 0; i < n; i++) {
1884 pix1 = pixaGetPix(pixas, i,
L_CLONE);
1885 pix2 = pixConvertTo32(pix1);
1890 boxa = pixaGetBoxa(pixas,
L_COPY);
1891 pixaSetBoxa(pixad, boxa,
L_INSERT);
1929l_int32 i, n, nselect, index;
1935 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
1936 n = pixaGetCount(pixas);
1937 first = L_MAX(0, first);
1938 last = (last < 0) ? n - 1 : L_MIN(n - 1, last);
1940 return (
PIXA *)ERROR_PTR(
"last < first!", __func__, NULL);
1942 return (
PIXA *)ERROR_PTR(
"nmax < 1!", __func__, NULL);
1944 na = genConstrainedNumaInRange(first, last, nmax, use_pairs);
1945 nselect = numaGetCount(na);
1946 pixad = pixaCreate(nselect);
1947 for (i = 0; i < nselect; i++) {
1948 numaGetIValue(na, i, &index);
1949 pix1 = pixaGetPix(pixas, index, copyflag);
1992 l_float32 scalefactor,
1997 const char *fileout)
2005 return ERROR_INT(
"pixas not defined", __func__, 1);
2007 L_WARNING(
"invalid compression type; using default\n", __func__);
2011 return ERROR_INT(
"fileout not defined", __func__, 1);
2014 n = pixaGetCount(pixas);
2015 first = L_MAX(0, first);
2016 last = (last < 0) ? n - 1 : L_MIN(n - 1, last);
2018 L_ERROR(
"first = %d > last = %d\n", __func__, first, last);
2021 pixa1 = pixaSelectRange(pixas, first, last,
L_CLONE);
2024 bmf = (fontsize <= 0) ? NULL : bmfCreate(NULL, fontsize);
2026 na = numaMakeSequence(first, 1.0, last - first + 1);
2027 pixa2 = pixaAddTextNumber(pixa1, bmf, na, color,
L_ADD_LEFT);
2030 pixa2 = pixaCopy(pixa1,
L_CLONE);
2032 pixaDestroy(&pixa1);
2035 pixaConvertToPdf(pixa2, res, scalefactor, type, quality, NULL, fileout);
2036 pixaDestroy(&pixa2);
2076 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
2078 return (
PIXA *)ERROR_PTR(
"nsamp too large; typ. 100", __func__, NULL);
2082 if (nsamp <= 0) nsamp = 100;
2088 pixad = pixaCreate(10 * nsamp);
2089 for (i = 0; i < 10; i++) {
2090 pix1 = pixaGetPix(pixas, i,
L_CLONE);
2093 L_WARNING(
"requested %d; only %d tiles\n", __func__, nsamp, ntiles);
2095 snprintf(buf,
sizeof(buf),
"%d", i);
2096 pixaSetText(pixa1, buf, NULL);
2097 pixaJoin(pixad, pixa1, 0, -1);
2098 pixaDestroy(&pixa1);
2150l_int32 i, j, k, ws, hs, d, nx, ny, n, n_isvalid, ntiles, nmax;
2156 return (
PIXA *)ERROR_PTR(
"pixs not defined", __func__, NULL);
2157 if (!boxa && (w <= 0 || h <= 0))
2158 return (
PIXA *)ERROR_PTR(
"w and h must be > 0", __func__, NULL);
2161 return pixaCreateFromBoxa(pixs, boxa, start, num, NULL);
2164 pixGetDimensions(pixs, &ws, &hs, &d);
2167 if (nx < 1 || ny < 1)
2168 return (
PIXA *)ERROR_PTR(
"invalid dimensions", __func__, NULL);
2169 if (nx * w != ws || ny * h != hs)
2170 L_WARNING(
"some tiles will be clipped\n", __func__);
2176 n_isvalid = (n <= nx * ny && n > nx * (ny - 1)) ? TRUE : FALSE;
2177 ntiles = (n_isvalid) ? n : nx * ny;
2178 nmax = ntiles - start;
2179 num = (num == 0) ? nmax : L_MIN(num, nmax);
2182 if ((pixa1 = pixaCreate(num)) == NULL) {
2183 return (
PIXA *)ERROR_PTR(
"pixa1 not made", __func__, NULL);
2185 cmap = pixGetColormap(pixs);
2186 for (i = 0, k = 0; i < ny; i++) {
2187 for (j = 0; j < nx; j++, k++) {
2188 if (k < start)
continue;
2189 if (k >= start + num)
break;
2190 pix1 = pixCreate(w, h, d);
2191 if (cmap) pixSetColormap(pix1, pixcmapCopy(cmap));
2192 pixRasterop(pix1, 0, 0, w, h,
PIX_SRC, pixs, j * w, i * h);
2223 return ERROR_INT(
"&n not defined", __func__, 1);
2226 return ERROR_INT(
"pix not defined", __func__, 1);
2228 text = pixGetText(pix);
2229 if (text && strlen(text) > 4) {
2230 if (sscanf(text,
"n = %d", &n) == 1)
2267 l_float32 scalefactor,
2271l_int32 n, i, j, ntile, nout, index;
2273PIXA *pixa1, *pixa2, *pixad;
2276 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
2277 if (nx < 1 || ny < 1 || nx > 50 || ny > 50)
2278 return (
PIXA *)ERROR_PTR(
"invalid tiling factor(s)", __func__, NULL);
2279 if ((n = pixaGetCount(pixas)) == 0)
2280 return (
PIXA *)ERROR_PTR(
"pixas is empty", __func__, NULL);
2283 if (maxw == 0 && maxh == 0) {
2284 pixa1 = pixaCopy(pixas,
L_CLONE);
2286 maxw = (maxw == 0) ? 1000000 : maxw;
2287 maxh = (maxh == 0) ? 1000000 : maxh;
2290 n = pixaGetCount(pixa1);
2294 nout = L_MAX(1, (n + ntile - 1) / ntile);
2295 pixad = pixaCreate(nout);
2296 for (i = 0, index = 0; i < nout; i++) {
2297 pixa2 = pixaCreate(ntile);
2298 for (j = 0; j < ntile && index < n; j++, index++) {
2299 pix1 = pixaGetPix(pixa1, index,
L_COPY);
2305 pixaDestroy(&pixa2);
2307 pixaDestroy(&pixa1);
2348l_int32 i, j, index, n, nt;
2353 return ERROR_INT(
"pixas not defined", __func__, 1);
2355 return ERROR_INT(
"nsplit must be >= 2", __func__, 1);
2356 if ((nt = pixaGetCount(pixas)) == 0)
2357 return ERROR_INT(
"pixas is empty", __func__, 1);
2358 if (!write_pixa && !write_pix && !write_pdf)
2359 return ERROR_INT(
"no output is requested", __func__, 1);
2361 lept_mkdir(
"lept/split");
2362 n = (nt + nsplit - 1) / nsplit;
2363 lept_stderr(
"nt = %d, n = %d, nsplit = %d\n", nt, n, nsplit);
2364 for (i = 0, index = 0; i < nsplit; i++) {
2365 pixa1 = pixaCreate(n);
2366 for (j = 0; j < n && index < nt; j++, index++) {
2367 pix1 = pixaGetPix(pixas, index,
L_CLONE);
2368 pix2 = pixScale(pix1, scale, scale);
2373 snprintf(buf,
sizeof(buf),
"/tmp/lept/split/split%d.pa", i + 1);
2374 pixaWriteDebug(buf, pixa1);
2377 snprintf(buf,
sizeof(buf),
"/tmp/lept/split/split%d.tif", i + 1);
2379 pixWriteDebug(buf, pix1, IFF_TIFF_G4);
2383 snprintf(buf,
sizeof(buf),
"/tmp/lept/split/split%d.pdf", i + 1);
2384 pixaConvertToPdf(pixa1, 0, 1.0,
L_G4_ENCODE, 0, buf, buf);
2386 pixaDestroy(&pixa1);
2441 return ERROR_INT(
"dir not defined", __func__, 1);
2442 if (nx < 1 || ny < 1 || nx > 50 || ny > 50)
2443 return ERROR_INT(
"invalid tiling N-factor", __func__, 1);
2444 if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2)
2445 return ERROR_INT(
"invalid fontsize", __func__, 1);
2447 return ERROR_INT(
"outdir not defined", __func__, 1);
2452 return ERROR_INT(
"pixa not made", __func__, 1);
2456 pixaGetRenderingDepth(pixa, &d);
2457 format = (d == 1) ? IFF_TIFF_G4 : IFF_JFIF_JPEG;
2458 makeTempDirname(rootpath, 256, outdir);
2460 pixaWriteFiles(rootpath, pixa, format);
2501 return (
PIXA *)ERROR_PTR(
"dir not defined", __func__, NULL);
2502 if (nx < 1 || ny < 1 || nx > 50 || ny > 50)
2503 return (
PIXA *)ERROR_PTR(
"invalid tiling N-factor", __func__, NULL);
2505 return (
PIXA *)ERROR_PTR(
"tw must be >= 20", __func__, NULL);
2506 if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2)
2507 return (
PIXA *)ERROR_PTR(
"invalid fontsize", __func__, NULL);
2509 sa1 = getSortedPathnamesInDirectory(dir, substr, 0, 0);
2510 pixa1 = pixaReadFilesSA(sa1);
2511 n = sarrayGetCount(sa1);
2512 sa2 = sarrayCreate(n);
2513 for (i = 0; i < n; i++) {
2514 fname = sarrayGetString(sa1, i,
L_NOCOPY);
2515 splitPathAtDirectory(fname, NULL, &tail);
2516 sarrayAddString(sa2, tail,
L_INSERT);
2518 sarrayDestroy(&sa1);
2521 pixaDestroy(&pixa1);
2522 sarrayDestroy(&sa2);
2559l_int32 i, j, k, nt, n2, nout, d;
2562PIX *pix1, *pix2, *pix3, *pix4;
2566 return (
PIXA *)ERROR_PTR(
"pixas not defined", __func__, NULL);
2567 if (nx < 1 || ny < 1 || nx > 50 || ny > 50)
2568 return (
PIXA *)ERROR_PTR(
"invalid tiling N-factor", __func__, NULL);
2570 return (
PIXA *)ERROR_PTR(
"tw must be >= 20", __func__, NULL);
2571 if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2)
2572 return (
PIXA *)ERROR_PTR(
"invalid fontsize", __func__, NULL);
2574 nt = pixaGetCount(pixas);
2575 if (sa && (sarrayGetCount(sa) != nt)) {
2576 L_WARNING(
"pixa size %d not equal to sarray size %d\n", __func__,
2577 nt, sarrayGetCount(sa));
2581 nout = (nt + n2 - 1) / n2;
2582 pixad = pixaCreate(nout);
2583 bmf = (fontsize == 0) ? NULL : bmfCreate(NULL, fontsize);
2584 for (i = 0, j = 0; i < nout; i++) {
2585 pixa1 = pixaCreate(n2);
2586 for (k = 0; k < n2 && j < nt; j++, k++) {
2587 pix1 = pixaGetPix(pixas, j,
L_CLONE);
2588 pix2 = pixScaleToSize(pix1, tw, 0);
2590 str = sarrayGetString(sa, j,
L_NOCOPY);
2591 pix3 = pixAddTextlines(pix2, bmf, str, 0xff000000,
2594 pix3 = pixClone(pix2);
2600 if (pixaGetCount(pixa1) == 0) {
2601 pixaDestroy(&pixa1);
2606 pixaGetRenderingDepth(pixa1, &d);
2610 pixaDestroy(&pixa1);
2669 const char *fileout)
2671l_int32 n1, n2, npairs;
2672PIXA *pixa3, *pixa4, *pixa5;
2675 if (!pixa1 || !pixa2)
2676 return ERROR_INT(
"pixa1 and pixa2 not both defined", __func__, 1);
2677 if (nx < 1 || ny < 1 || nx > 20 || ny > 20)
2678 return ERROR_INT(
"invalid tiling factors", __func__, 1);
2680 return ERROR_INT(
"invalid tw; tw must be >= 20", __func__, 1);
2681 if (fontsize < 0 || fontsize > 20 || fontsize & 1 || fontsize == 2)
2682 return ERROR_INT(
"invalid fontsize", __func__, 1);
2684 return ERROR_INT(
"fileout not defined", __func__, 1);
2685 n1 = pixaGetCount(pixa1);
2686 n2 = pixaGetCount(pixa2);
2687 if (n1 == 0 || n2 == 0)
2688 return ERROR_INT(
"at least one pixa is empty", __func__, 1);
2690 L_WARNING(
"sizes (%d, %d) differ; using the minimum in interleave\n",
2694 if ((pixa3 = pixaInterleave(pixa1, pixa2,
L_CLONE)) == NULL)
2695 return ERROR_INT(
"pixa3 not made", __func__, 1);
2699 pixaDestroy(&pixa3);
2702 npairs = pixaGetCount(pixa4);
2703 sa = (fontsize > 0) ? sarrayGenerateIntegers(npairs) : NULL;
2705 2 * tw + 4 * border + spacing,
2706 spacing, border, fontsize);
2707 pixaDestroy(&pixa4);
2711 pixaConvertToPdf(pixa5, 0, 1.0, 0, 0, NULL, fileout);
2712 pixaDestroy(&pixa5);
PIXA * pixaDisplayMultiTiled(PIXA *pixas, l_int32 nx, l_int32 ny, l_int32 maxw, l_int32 maxh, l_float32 scalefactor, l_int32 spacing, l_int32 border)
pixaDisplayMultiTiled()
PIX * pixaDisplay(PIXA *pixa, l_int32 w, l_int32 h)
pixaDisplay()
PIXA * pixaConstrainedSelect(PIXA *pixas, l_int32 first, l_int32 last, l_int32 nmax, l_int32 use_pairs, l_int32 copyflag)
pixaConstrainedSelect()
l_ok pixGetTileCount(PIX *pix, l_int32 *pn)
pixGetTileCount()
PIX * pixaDisplayTiledInColumns(PIXA *pixas, l_int32 nx, l_float32 scalefactor, l_int32 spacing, l_int32 border)
pixaDisplayTiledInColumns()
PIXA * pixaMakeFromTiledPixa(PIXA *pixas, l_int32 w, l_int32 h, l_int32 nsamp)
pixaMakeFromTiledPixa()
PIXA * pixaConvertTo32(PIXA *pixas)
pixaConvertTo32()
PIX * pixaDisplayLinearly(PIXA *pixas, l_int32 direction, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border, BOXA **pboxa)
pixaDisplayLinearly()
PIXA * pixaConvertTo8Colormap(PIXA *pixas, l_int32 dither)
pixaConvertTo8Colormap()
PIX * pixaaDisplayByPixa(PIXAA *paa, l_int32 maxnx, l_float32 scalefactor, l_int32 hspacing, l_int32 vspacing, l_int32 border)
pixaaDisplayByPixa()
PIX * pixaDisplayPairTiledInColumns(PIXA *pixas1, PIXA *pixas2, l_int32 nx, l_float32 scalefactor, l_int32 spacing1, l_int32 spacing2, l_int32 border1, l_int32 border2, l_int32 fontsize, l_int32 startindex, SARRAY *sa)
pixaDisplayPairTiledInColumns()
PIX * pixaDisplayTiled(PIXA *pixa, l_int32 maxwidth, l_int32 background, l_int32 spacing)
pixaDisplayTiled()
l_ok pixaSplitIntoFiles(PIXA *pixas, l_int32 nsplit, l_float32 scale, l_int32 outwidth, l_int32 write_pixa, l_int32 write_pix, l_int32 write_pdf)
pixaSplitIntoFiles()
PIX * pixaaDisplay(PIXAA *paa, l_int32 w, l_int32 h)
pixaaDisplay()
PIX * pixaDisplayTiledAndScaled(PIXA *pixa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledAndScaled()
PIX * pixaDisplayTiledWithText(PIXA *pixa, l_int32 maxwidth, l_float32 scalefactor, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor)
pixaDisplayTiledWithText()
l_ok pixaCompareInPdf(PIXA *pixa1, PIXA *pixa2, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *fileout)
pixaCompareInPdf()
l_ok convertToNUpFiles(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize, const char *outdir)
convertToNUpFiles()
PIX * pixaDisplayTiledByIndex(PIXA *pixa, NUMA *na, l_int32 width, l_int32 spacing, l_int32 border, l_int32 fontsize, l_uint32 textcolor)
pixaDisplayTiledByIndex()
PIXA * pixaConvertToNUpPixa(PIXA *pixas, SARRAY *sa, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize)
pixaConvertToNUpPixa()
PIX * pixaDisplayRandomCmap(PIXA *pixa, l_int32 w, l_int32 h)
pixaDisplayRandomCmap()
PIXA * pixaConvertTo1(PIXA *pixas, l_int32 thresh)
pixaConvertTo1()
PIXA * pixaaDisplayTiledAndScaled(PIXAA *paa, l_int32 outdepth, l_int32 tilewidth, l_int32 ncols, l_int32 background, l_int32 spacing, l_int32 border)
pixaaDisplayTiledAndScaled()
PIX * pixaDisplayTiledInRows(PIXA *pixa, l_int32 outdepth, l_int32 maxwidth, l_float32 scalefactor, l_int32 background, l_int32 spacing, l_int32 border)
pixaDisplayTiledInRows()
PIX * pixaDisplayUnsplit(PIXA *pixa, l_int32 nx, l_int32 ny, l_int32 borderwidth, l_uint32 bordercolor)
pixaDisplayUnsplit()
PIXA * pixaMakeFromTiledPix(PIX *pixs, l_int32 w, l_int32 h, l_int32 start, l_int32 num, BOXA *boxa)
pixaMakeFromTiledPix()
PIXA * convertToNUpPixa(const char *dir, const char *substr, l_int32 nx, l_int32 ny, l_int32 tw, l_int32 spacing, l_int32 border, l_int32 fontsize)
convertToNUpPixa()
PIX * pixaDisplayOnLattice(PIXA *pixa, l_int32 cellw, l_int32 cellh, l_int32 *pncols, BOXA **pboxa)
pixaDisplayOnLattice()
l_ok pixaSelectToPdf(PIXA *pixas, l_int32 first, l_int32 last, l_int32 res, l_float32 scalefactor, l_int32 type, l_int32 quality, l_uint32 color, l_int32 fontsize, const char *fileout)
pixaSelectToPdf()
PIXA * pixaConvertTo8(PIXA *pixas, l_int32 cmapflag)
pixaConvertTo8()