115 #include "allheaders.h" 118 l_int32 wpld, l_uint32 *datas, l_int32 ws,
119 l_int32 hs, l_int32 wpls);
120 static void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd,
121 l_int32 wpld, l_uint32 *datas, l_int32 ws,
122 l_int32 hs, l_int32 wpls);
124 l_int32 ws, l_int32 hs, l_int32 wpls);
126 l_uint32 *lines, l_int32 ws, l_int32 wpls,
127 l_int32 lastlineflag);
128 static void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas,
129 l_int32 ws, l_int32 hs, l_int32 wpls);
131 l_uint32 *lines, l_int32 ws, l_int32 wpls,
132 l_int32 lastlineflag);
133 static void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas,
134 l_int32 ws, l_int32 hs, l_int32 wpls);
136 l_uint32 *lines, l_int32 ws, l_int32 wpls,
137 l_int32 lastlineflag);
139 l_int32 wpld, l_uint32 *datas, l_int32 ws,
140 l_int32 hs, l_int32 d, l_int32 wpls);
141 static l_int32
scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd,
142 l_int32 wpld, l_uint32 *datas, l_int32 ws,
143 l_int32 hs, l_int32 d, l_int32 wpls,
146 l_int32 wpld, l_uint32 *datas, l_int32 wpls,
147 l_float32 rwt, l_float32 gwt, l_float32 bwt);
149 l_int32 wpld, l_uint32 *datas, l_int32 ws,
150 l_int32 hs, l_int32 wpls);
152 l_int32 wpld, l_uint32 *datas, l_int32 ws,
153 l_int32 hs, l_int32 wpls);
155 l_int32 wpld, l_uint32 *datas, l_int32 d,
157 static l_int32 scaleBinaryLow(l_uint32 *datad, l_int32 wd, l_int32 hd,
158 l_int32 wpld, l_uint32 *datas, l_int32 ws,
159 l_int32 hs, l_int32 wpls);
161 #ifndef NO_CONSOLE_IO 162 #define DEBUG_OVERFLOW 0 163 #define DEBUG_UNROLLING 0 249 l_float32 maxscale, sharpfract;
251 PROCNAME(
"pixScale");
254 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
257 maxscale = L_MAX(scalex, scaley);
258 sharpfract = (maxscale < 0.7) ? 0.2 : 0.4;
259 sharpwidth = (maxscale < 0.7) ? 1 : 2;
278 l_int32 w, h, wd, hd;
280 PROCNAME(
"pixScaleToSizeRel");
283 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
285 if (delw == 0 && delh == 0)
291 if (wd <= 0 || hd <= 0)
292 return (
PIX *)ERROR_PTR(
"pix dimension reduced to 0", procName, NULL);
322 l_float32 scalex, scaley;
324 PROCNAME(
"pixScaleToSize");
327 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
328 if (wd <= 0 && hd <= 0)
329 return (
PIX *)ERROR_PTR(
"neither wd nor hd > 0", procName, NULL);
333 scaley = (l_float32)hd / (l_float32)h;
335 }
else if (hd <= 0) {
336 scalex = (l_float32)wd / (l_float32)w;
339 scalex = (l_float32)wd / (l_float32)w;
340 scaley = (l_float32)hd / (l_float32)h;
343 return pixScale(pixs, scalex, scaley);
360 l_float32 *pscalefact)
365 PROCNAME(
"pixScaleToResolution");
367 if (pscalefact) *pscalefact = 1.0;
369 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
371 return (
PIX *)ERROR_PTR(
"target resolution <= 0", procName, NULL);
373 xres = pixGetXRes(pixs);
379 factor = target / (l_float32)xres;
380 if (pscalefact) *pscalefact = factor;
382 return pixScale(pixs, factor, factor);
417 l_float32 sharpfract,
422 PIX *pixt, *pixt2, *pixd;
424 PROCNAME(
"pixScaleGeneral");
427 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
428 d = pixGetDepth(pixs);
429 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
430 return (
PIX *)ERROR_PTR(
"pixs not {1,2,4,8,16,32} bpp", procName, NULL);
431 if (scalex <= 0.0 || scaley <= 0.0)
432 return (
PIX *)ERROR_PTR(
"scale factor <= 0", procName, NULL);
433 if (scalex == 1.0 && scaley == 1.0)
441 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
444 d = pixGetDepth(pixt);
445 maxscale = L_MAX(scalex, scaley);
446 if (maxscale < 0.7) {
448 if (maxscale > 0.2 && sharpfract > 0.0 && sharpwidth > 0)
457 if (maxscale < 1.4 && sharpfract > 0.0 && sharpwidth > 0)
465 pixCopyText(pixd, pixs);
466 pixCopyInputFormat(pixd, pixs);
506 PROCNAME(
"pixScaleLI");
508 if (!pixs || (pixGetDepth(pixs) == 1))
509 return (
PIX *)ERROR_PTR(
"pixs not defined or 1 bpp", procName, NULL);
510 maxscale = L_MAX(scalex, scaley);
511 if (maxscale < 0.7) {
512 L_WARNING(
"scaling factors < 0.7; do regular scaling\n", procName);
515 d = pixGetDepth(pixs);
516 if (d != 2 && d != 4 && d != 8 && d != 16 && d != 32)
517 return (
PIX *)ERROR_PTR(
"pixs not {2,4,8,16,32} bpp", procName, NULL);
521 return (
PIX *)ERROR_PTR(
"pixt not made", procName, NULL);
523 d = pixGetDepth(pixt);
530 pixCopyInputFormat(pixd, pixs);
563 l_int32 ws, hs, wpls, wd, hd, wpld;
564 l_uint32 *datas, *datad;
568 PROCNAME(
"pixScaleColorLI");
570 if (!pixs || (pixGetDepth(pixs) != 32))
571 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", procName, NULL);
572 maxscale = L_MAX(scalex, scaley);
573 if (maxscale < 0.7) {
574 L_WARNING(
"scaling factors < 0.7; do regular scaling\n", procName);
579 if (scalex == 1.0 && scaley == 1.0)
581 if (scalex == 2.0 && scaley == 2.0)
583 if (scalex == 4.0 && scaley == 4.0)
589 wpls = pixGetWpl(pixs);
590 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
591 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
592 if ((pixd =
pixCreate(wd, hd, 32)) == NULL)
593 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
594 pixCopyResolution(pixd, pixs);
595 pixScaleResolution(pixd, scalex, scaley);
597 wpld = pixGetWpl(pixd);
599 if (pixGetSpp(pixs) == 4)
602 pixCopyInputFormat(pixd, pixs);
627 l_int32 ws, hs, wpls, wpld;
628 l_uint32 *datas, *datad;
631 PROCNAME(
"pixScaleColor2xLI");
633 if (!pixs || (pixGetDepth(pixs) != 32))
634 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", procName, NULL);
638 wpls = pixGetWpl(pixs);
639 if ((pixd =
pixCreate(2 * ws, 2 * hs, 32)) == NULL)
640 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
641 pixCopyResolution(pixd, pixs);
642 pixScaleResolution(pixd, 2.0, 2.0);
644 wpld = pixGetWpl(pixd);
646 if (pixGetSpp(pixs) == 4)
649 pixCopyInputFormat(pixd, pixs);
676 PIX *pixr, *pixg, *pixb;
677 PIX *pixrs, *pixgs, *pixbs;
680 PROCNAME(
"pixScaleColor4xLI");
682 if (!pixs || (pixGetDepth(pixs) != 32))
683 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", procName, NULL);
696 L_ERROR(
"pixd not made\n", procName);
698 if (pixGetSpp(pixs) == 4)
700 pixCopyInputFormat(pixd, pixs);
782 l_int32 ws, hs, wpls, wd, hd, wpld;
783 l_uint32 *datas, *datad;
787 PROCNAME(
"pixScaleGrayLI");
789 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
790 return (
PIX *)ERROR_PTR(
"pixs undefined, cmapped or not 8 bpp",
792 maxscale = L_MAX(scalex, scaley);
793 if (maxscale < 0.7) {
794 L_WARNING(
"scaling factors < 0.7; do regular scaling\n", procName);
799 if (scalex == 1.0 && scaley == 1.0)
801 if (scalex == 2.0 && scaley == 2.0)
803 if (scalex == 4.0 && scaley == 4.0)
809 wpls = pixGetWpl(pixs);
810 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
811 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
812 if ((pixd =
pixCreate(wd, hd, 8)) == NULL)
813 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
814 pixCopyText(pixd, pixs);
815 pixCopyResolution(pixd, pixs);
816 pixCopyInputFormat(pixd, pixs);
817 pixScaleResolution(pixd, scalex, scaley);
819 wpld = pixGetWpl(pixd);
843 l_int32 ws, hs, wpls, wpld;
844 l_uint32 *datas, *datad;
847 PROCNAME(
"pixScaleGray2xLI");
849 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
850 return (
PIX *)ERROR_PTR(
"pixs undefined, cmapped or not 8 bpp",
855 wpls = pixGetWpl(pixs);
856 if ((pixd =
pixCreate(2 * ws, 2 * hs, 8)) == NULL)
857 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
858 pixCopyResolution(pixd, pixs);
859 pixCopyInputFormat(pixd, pixs);
860 pixScaleResolution(pixd, 2.0, 2.0);
862 wpld = pixGetWpl(pixd);
886 l_int32 ws, hs, wpls, wpld;
887 l_uint32 *datas, *datad;
890 PROCNAME(
"pixScaleGray4xLI");
892 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
893 return (
PIX *)ERROR_PTR(
"pixs undefined, cmapped or not 8 bpp",
898 wpls = pixGetWpl(pixs);
899 if ((pixd =
pixCreate(4 * ws, 4 * hs, 8)) == NULL)
900 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
901 pixCopyResolution(pixd, pixs);
902 pixCopyInputFormat(pixd, pixs);
903 pixScaleResolution(pixd, 4.0, 4.0);
905 wpld = pixGetWpl(pixd);
932 l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld;
933 l_uint32 *datas, *datad, *lines, *lined, *lineb;
936 PROCNAME(
"pixScaleGray2xLIThresh");
938 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
939 return (
PIX *)ERROR_PTR(
"pixs undefined, not 8 bpp, or cmapped",
941 if (thresh < 0 || thresh > 256)
942 return (
PIX *)ERROR_PTR(
"thresh must be in [0, ... 256]",
950 wpls = pixGetWpl(pixs);
954 if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb,
sizeof(l_uint32))) == NULL)
955 return (
PIX *)ERROR_PTR(
"lineb not made", procName, NULL);
958 if ((pixd =
pixCreate(wd, hd, 1)) == NULL) {
960 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
962 pixCopyInputFormat(pixd, pixs);
963 pixCopyResolution(pixd, pixs);
964 pixScaleResolution(pixd, 2.0, 2.0);
965 wpld = pixGetWpl(pixd);
969 for (i = 0; i < hsm; i++) {
970 lines = datas + i * wpls;
971 lined = datad + 2 * i * wpld;
973 thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh);
974 thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh);
978 lines = datas + hsm * wpls;
979 lined = datad + 2 * hsm * wpld;
981 thresholdToBinaryLineLow(lined, wd, lineb, 8, thresh);
982 thresholdToBinaryLineLow(lined + wpld, wd, lineb + wplb, 8, thresh);
1010 l_int32 i, ws, hs, hsm, wd, hd, wpls, wplb, wpld;
1011 l_uint32 *datas, *datad;
1013 l_uint32 *lineb = NULL;
1014 l_uint32 *linebp = NULL;
1015 l_uint32 *bufs = NULL;
1018 PROCNAME(
"pixScaleGray2xLIDither");
1020 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
1021 return (
PIX *)ERROR_PTR(
"pixs undefined, not 8 bpp, or cmapped",
1029 wpls = pixGetWpl(pixs);
1032 if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls,
sizeof(l_uint32))) == NULL)
1033 return (
PIX *)ERROR_PTR(
"bufs not made", procName, NULL);
1036 wplb = (wd + 3) / 4;
1037 if ((lineb = (l_uint32 *)LEPT_CALLOC(2 * wplb,
sizeof(l_uint32))) == NULL) {
1038 L_ERROR(
"lineb not made\n", procName);
1043 if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb,
sizeof(l_uint32))) == NULL) {
1044 L_ERROR(
"linebp not made\n", procName);
1049 if ((pixd =
pixCreate(wd, hd, 1)) == NULL) {
1050 L_ERROR(
"pixd not made\n", procName);
1053 pixCopyInputFormat(pixd, pixs);
1054 pixCopyResolution(pixd, pixs);
1055 pixScaleResolution(pixd, 2.0, 2.0);
1056 wpld = pixGetWpl(pixd);
1060 memcpy(bufs, datas, 4 * wpls);
1061 memcpy(bufs + wpls, datas + wpls, 4 * wpls);
1069 for (i = 1; i < hsm; i++) {
1070 memcpy(bufs, datas + i * wpls, 4 * wpls);
1071 memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls);
1072 memcpy(linebp, lineb + wplb, 4 * wplb);
1074 lined = datad + 2 * i * wpld;
1084 memcpy(bufs, datas + hsm * wpls, 4 * wpls);
1085 memcpy(linebp, lineb + wplb, 4 * wplb);
1130 l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld;
1131 l_uint32 *datas, *datad, *lines, *lined, *lineb;
1134 PROCNAME(
"pixScaleGray4xLIThresh");
1136 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
1137 return (
PIX *)ERROR_PTR(
"pixs undefined, not 8 bpp, or cmapped",
1139 if (thresh < 0 || thresh > 256)
1140 return (
PIX *)ERROR_PTR(
"thresh must be in [0, ... 256]",
1148 wpls = pixGetWpl(pixs);
1151 wplb = (wd + 3) / 4;
1152 if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb,
sizeof(l_uint32))) == NULL)
1153 return (
PIX *)ERROR_PTR(
"lineb not made", procName, NULL);
1156 if ((pixd =
pixCreate(wd, hd, 1)) == NULL) {
1158 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1160 pixCopyInputFormat(pixd, pixs);
1161 pixCopyResolution(pixd, pixs);
1162 pixScaleResolution(pixd, 4.0, 4.0);
1163 wpld = pixGetWpl(pixd);
1167 for (i = 0; i < hsm; i++) {
1168 lines = datas + i * wpls;
1169 lined = datad + 4 * i * wpld;
1171 for (j = 0; j < 4; j++) {
1172 thresholdToBinaryLineLow(lined + j * wpld, wd,
1173 lineb + j * wplb, 8, thresh);
1178 lines = datas + hsm * wpls;
1179 lined = datad + 4 * hsm * wpld;
1181 for (j = 0; j < 4; j++) {
1182 thresholdToBinaryLineLow(lined + j * wpld, wd,
1183 lineb + j * wplb, 8, thresh);
1217 l_int32 i, j, ws, hs, hsm, wd, hd, wpls, wplb, wpld;
1218 l_uint32 *datas, *datad;
1220 l_uint32 *lineb = NULL;
1221 l_uint32 *linebp = NULL;
1222 l_uint32 *bufs = NULL;
1225 PROCNAME(
"pixScaleGray4xLIDither");
1227 if (!pixs || pixGetDepth(pixs) != 8 || pixGetColormap(pixs))
1228 return (
PIX *)ERROR_PTR(
"pixs undefined, not 8 bpp, or cmapped",
1236 wpls = pixGetWpl(pixs);
1239 if ((bufs = (l_uint32 *)LEPT_CALLOC(2 * wpls,
sizeof(l_uint32))) == NULL)
1240 return (
PIX *)ERROR_PTR(
"bufs not made", procName, NULL);
1243 wplb = (wd + 3) / 4;
1244 if ((lineb = (l_uint32 *)LEPT_CALLOC(4 * wplb,
sizeof(l_uint32))) == NULL) {
1245 L_ERROR(
"lineb not made\n", procName);
1250 if ((linebp = (l_uint32 *)LEPT_CALLOC(wplb,
sizeof(l_uint32))) == NULL) {
1251 L_ERROR(
"linebp not made\n", procName);
1256 if ((pixd =
pixCreate(wd, hd, 1)) == NULL) {
1257 L_ERROR(
"pixd not made\n", procName);
1260 pixCopyInputFormat(pixd, pixs);
1261 pixCopyResolution(pixd, pixs);
1262 pixScaleResolution(pixd, 4.0, 4.0);
1263 wpld = pixGetWpl(pixd);
1267 memcpy(bufs, datas, 4 * wpls);
1268 memcpy(bufs + wpls, datas + wpls, 4 * wpls);
1271 for (j = 0; j < 3; j++) {
1273 lineb + (j + 1) * wplb,
1278 for (i = 1; i < hsm; i++) {
1279 memcpy(bufs, datas + i * wpls, 4 * wpls);
1280 memcpy(bufs + wpls, datas + (i + 1) * wpls, 4 * wpls);
1281 memcpy(linebp, lineb + 3 * wplb, 4 * wplb);
1283 lined = datad + 4 * i * wpld;
1287 for (j = 0; j < 3; j++) {
1289 lineb + (j + 1) * wplb,
1295 memcpy(bufs, datas + hsm * wpls, 4 * wpls);
1296 memcpy(linebp, lineb + 3 * wplb, 4 * wplb);
1298 lined = datad + 4 * hsm * wpld;
1302 for (j = 0; j < 3; j++) {
1304 lineb + (j + 1) * wplb,
1342 l_int32 ws, hs, d, wpls, wd, hd, wpld;
1343 l_uint32 *datas, *datad;
1346 PROCNAME(
"pixScaleBySampling");
1349 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1350 if (scalex <= 0.0 || scaley <= 0.0)
1351 return (
PIX *)ERROR_PTR(
"scale factor <= 0", procName, NULL);
1352 if (scalex == 1.0 && scaley == 1.0)
1354 if ((d = pixGetDepth(pixs)) == 1)
1359 wpls = pixGetWpl(pixs);
1360 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
1361 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
1362 if ((pixd =
pixCreate(wd, hd, d)) == NULL)
1363 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1364 pixCopyResolution(pixd, pixs);
1365 pixScaleResolution(pixd, scalex, scaley);
1367 pixCopyText(pixd, pixs);
1368 pixCopyInputFormat(pixd, pixs);
1371 wpld = pixGetWpl(pixd);
1373 if (d == 32 && pixGetSpp(pixs) == 4)
1405 l_float32 scalex, scaley;
1407 PROCNAME(
"pixScaleBySamplingToSize");
1410 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1411 if (wd <= 0 && hd <= 0)
1412 return (
PIX *)ERROR_PTR(
"neither wd nor hd > 0", procName, NULL);
1416 scaley = (l_float32)hd / (l_float32)h;
1418 }
else if (hd <= 0) {
1419 scalex = (l_float32)wd / (l_float32)w;
1422 scalex = (l_float32)wd / (l_float32)w;
1423 scaley = (l_float32)hd / (l_float32)h;
1450 PROCNAME(
"pixScaleByIntSampling");
1453 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1456 L_ERROR(
"factor must be >= 1; returning a copy\n", procName);
1460 scale = 1. / (l_float32)factor;
1491 l_int32 byteval, shift;
1492 l_int32 i, j, ws, hs, wd, hd, wpls, wpld;
1493 l_uint32 *datas, *words, *datad, *lined;
1497 PROCNAME(
"pixScaleRGBToGrayFast");
1500 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1501 if (pixGetDepth(pixs) != 32)
1502 return (
PIX *)ERROR_PTR(
"depth not 32 bpp", procName, NULL);
1504 return (
PIX *)ERROR_PTR(
"factor must be >= 1", procName, NULL);
1507 shift = L_RED_SHIFT;
1509 shift = L_GREEN_SHIFT;
1511 shift = L_BLUE_SHIFT;
1513 return (
PIX *)ERROR_PTR(
"invalid color", procName, NULL);
1517 wpls = pixGetWpl(pixs);
1521 if ((pixd =
pixCreate(wd, hd, 8)) == NULL)
1522 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1523 pixCopyResolution(pixd, pixs);
1524 pixCopyInputFormat(pixd, pixs);
1525 scale = 1. / (l_float32) factor;
1526 pixScaleResolution(pixd, scale, scale);
1528 wpld = pixGetWpl(pixd);
1530 for (i = 0; i < hd; i++) {
1531 words = datas + i * factor * wpls;
1532 lined = datad + i * wpld;
1533 for (j = 0; j < wd; j++, words += factor) {
1534 byteval = ((*words) >> shift) & 0xff;
1567 l_int32 i, j, ws, hs, wd, hd, wpls, wpld;
1568 l_uint32 *datas, *words, *datad, *lined;
1572 PROCNAME(
"pixScaleRGBToBinaryFast");
1575 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1577 return (
PIX *)ERROR_PTR(
"factor must be >= 1", procName, NULL);
1578 if (pixGetDepth(pixs) != 32)
1579 return (
PIX *)ERROR_PTR(
"depth not 32 bpp", procName, NULL);
1583 wpls = pixGetWpl(pixs);
1587 if ((pixd =
pixCreate(wd, hd, 1)) == NULL)
1588 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1589 pixCopyResolution(pixd, pixs);
1590 pixCopyInputFormat(pixd, pixs);
1591 scale = 1. / (l_float32) factor;
1592 pixScaleResolution(pixd, scale, scale);
1594 wpld = pixGetWpl(pixd);
1596 for (i = 0; i < hd; i++) {
1597 words = datas + i * factor * wpls;
1598 lined = datad + i * wpld;
1599 for (j = 0; j < wd; j++, words += factor) {
1600 byteval = ((*words) >> L_GREEN_SHIFT) & 0xff;
1601 if (byteval < thresh)
1633 l_int32 i, j, ws, hs, wd, hd, wpls, wpld, sj;
1634 l_uint32 *datas, *datad, *lines, *lined;
1638 PROCNAME(
"pixScaleGrayToBinaryFast");
1641 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1643 return (
PIX *)ERROR_PTR(
"factor must be >= 1", procName, NULL);
1644 if (pixGetDepth(pixs) != 8)
1645 return (
PIX *)ERROR_PTR(
"depth not 8 bpp", procName, NULL);
1649 wpls = pixGetWpl(pixs);
1653 if ((pixd =
pixCreate(wd, hd, 1)) == NULL)
1654 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1655 pixCopyResolution(pixd, pixs);
1656 pixCopyInputFormat(pixd, pixs);
1657 scale = 1. / (l_float32) factor;
1658 pixScaleResolution(pixd, scale, scale);
1660 wpld = pixGetWpl(pixd);
1662 for (i = 0; i < hd; i++) {
1663 lines = datas + i * factor * wpls;
1664 lined = datad + i * wpld;
1665 for (j = 0, sj = 0; j < wd; j++, sj += factor) {
1667 if (byteval < thresh)
1715 l_int32 ws, hs, d, wd, hd, wpls, wpld, isize;
1716 l_uint32 *datas, *datad;
1717 l_float32 minscale, size;
1720 PROCNAME(
"pixScaleSmooth");
1723 return (
PIX *)ERROR_PTR(
"pix not defined", procName, NULL);
1724 if (scalex >= 0.7 || scaley >= 0.7) {
1725 L_WARNING(
"scaling factor not < 0.7; do regular scaling\n", procName);
1731 d = pixGetDepth(pix);
1732 if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) {
1733 L_WARNING(
"pix has colormap; removing\n", procName);
1735 d = pixGetDepth(pixs);
1736 }
else if (d == 2 || d == 4) {
1743 if (d != 8 && d != 32) {
1744 L_WARNING(
"depth not 8 or 32 bpp; do regular scaling\n", procName);
1752 minscale = L_MIN(scalex, scaley);
1753 size = 1.0 / minscale;
1754 isize = L_MAX(2, (l_int32)(size + 0.5));
1757 if ((ws < isize) || (hs < isize)) {
1759 return (
PIX *)ERROR_PTR(
"pixs too small", procName, NULL);
1762 wpls = pixGetWpl(pixs);
1763 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
1764 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
1765 if (wd < 1 || hd < 1) {
1767 return (
PIX *)ERROR_PTR(
"pixd too small", procName, NULL);
1769 if ((pixd =
pixCreate(wd, hd, d)) == NULL) {
1771 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1773 pixCopyResolution(pixd, pixs);
1774 pixCopyInputFormat(pixd, pixs);
1775 pixScaleResolution(pixd, scalex, scaley);
1777 wpld = pixGetWpl(pixd);
1778 scaleSmoothLow(datad, wd, hd, wpld, datas, ws, hs, d, wpls, isize);
1779 if (d == 32 && pixGetSpp(pixs) == 4)
1812 l_float32 scalex, scaley;
1814 PROCNAME(
"pixScaleSmoothToSize");
1817 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1818 if (wd <= 0 && hd <= 0)
1819 return (
PIX *)ERROR_PTR(
"neither wd nor hd > 0", procName, NULL);
1823 scaley = (l_float32)hd / (l_float32)h;
1825 }
else if (hd <= 0) {
1826 scalex = (l_float32)wd / (l_float32)w;
1829 scalex = (l_float32)wd / (l_float32)w;
1830 scaley = (l_float32)hd / (l_float32)h;
1850 l_int32 wd, hd, wpls, wpld;
1851 l_uint32 *datas, *datad;
1854 PROCNAME(
"pixScaleRGBToGray2");
1857 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1858 if (pixGetDepth(pixs) != 32)
1859 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
1860 if (rwt + gwt + bwt < 0.98 || rwt + gwt + bwt > 1.02)
1861 return (
PIX *)ERROR_PTR(
"sum of wts should be 1.0", procName, NULL);
1863 wd = pixGetWidth(pixs) / 2;
1864 hd = pixGetHeight(pixs) / 2;
1865 wpls = pixGetWpl(pixs);
1867 if ((pixd =
pixCreate(wd, hd, 8)) == NULL)
1868 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1869 pixCopyResolution(pixd, pixs);
1870 pixCopyInputFormat(pixd, pixs);
1871 pixScaleResolution(pixd, 0.5, 0.5);
1872 wpld = pixGetWpl(pixd);
1916 l_int32 ws, hs, d, wd, hd, wpls, wpld;
1917 l_uint32 *datas, *datad;
1919 PIX *pixs, *pixd, *pixt1, *pixt2, *pixt3;
1921 PROCNAME(
"pixScaleAreaMap");
1924 return (
PIX *)ERROR_PTR(
"pix not defined", procName, NULL);
1925 d = pixGetDepth(pix);
1926 if (d != 2 && d != 4 && d != 8 && d != 32)
1927 return (
PIX *)ERROR_PTR(
"pix not 2, 4, 8 or 32 bpp", procName, NULL);
1928 maxscale = L_MAX(scalex, scaley);
1929 if (maxscale >= 0.7) {
1930 L_WARNING(
"scaling factors not < 0.7; do regular scaling\n", procName);
1935 if (scalex == 0.5 && scaley == 0.5)
1937 if (scalex == 0.25 && scaley == 0.25) {
1943 if (scalex == 0.125 && scaley == 0.125) {
1951 if (scalex == 0.0625 && scaley == 0.0625) {
1964 if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) {
1965 L_WARNING(
"pix has colormap; removing\n", procName);
1967 d = pixGetDepth(pixs);
1968 }
else if (d == 2 || d == 4) {
1977 wpls = pixGetWpl(pixs);
1978 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
1979 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
1980 if (wd < 1 || hd < 1) {
1982 return (
PIX *)ERROR_PTR(
"pixd too small", procName, NULL);
1984 if ((pixd =
pixCreate(wd, hd, d)) == NULL) {
1986 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1988 pixCopyInputFormat(pixd, pixs);
1989 pixCopyResolution(pixd, pixs);
1990 pixScaleResolution(pixd, scalex, scaley);
1992 wpld = pixGetWpl(pixd);
1997 if (pixGetSpp(pixs) == 4)
2034 l_int32 wd, hd, d, wpls, wpld;
2035 l_uint32 *datas, *datad;
2038 PROCNAME(
"pixScaleAreaMap2");
2041 return (
PIX *)ERROR_PTR(
"pix not defined", procName, NULL);
2042 d = pixGetDepth(pix);
2043 if (d != 2 && d != 4 && d != 8 && d != 32)
2044 return (
PIX *)ERROR_PTR(
"pix not 2, 4, 8 or 32 bpp", procName, NULL);
2048 if ((d == 2 || d == 4 || d == 8) && pixGetColormap(pix)) {
2049 L_WARNING(
"pix has colormap; removing\n", procName);
2051 d = pixGetDepth(pixs);
2052 }
else if (d == 2 || d == 4) {
2059 wd = pixGetWidth(pixs) / 2;
2060 hd = pixGetHeight(pixs) / 2;
2062 wpls = pixGetWpl(pixs);
2065 wpld = pixGetWpl(pixd);
2066 pixCopyInputFormat(pixd, pixs);
2067 pixCopyResolution(pixd, pixs);
2068 pixScaleResolution(pixd, 0.5, 0.5);
2070 if (pixGetSpp(pixs) == 4)
2102 l_float32 scalex, scaley;
2104 PROCNAME(
"pixScaleAreaMapToSize");
2107 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2108 if (wd <= 0 && hd <= 0)
2109 return (
PIX *)ERROR_PTR(
"neither wd nor hd > 0", procName, NULL);
2113 scaley = (l_float32)hd / (l_float32)h;
2115 }
else if (hd <= 0) {
2116 scalex = (l_float32)wd / (l_float32)w;
2119 scalex = (l_float32)wd / (l_float32)w;
2120 scaley = (l_float32)hd / (l_float32)h;
2149 l_int32 ws, hs, wpls, wd, hd, wpld;
2150 l_uint32 *datas, *datad;
2153 PROCNAME(
"pixScaleBinary");
2156 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
2157 if (pixGetDepth(pixs) != 1)
2158 return (
PIX *)ERROR_PTR(
"pixs must be 1 bpp", procName, NULL);
2159 if (scalex <= 0.0 || scaley <= 0.0)
2160 return (
PIX *)ERROR_PTR(
"scale factor <= 0", procName, NULL);
2161 if (scalex == 1.0 && scaley == 1.0)
2166 wpls = pixGetWpl(pixs);
2167 wd = (l_int32)(scalex * (l_float32)ws + 0.5);
2168 hd = (l_int32)(scaley * (l_float32)hs + 0.5);
2169 if ((pixd =
pixCreate(wd, hd, 1)) == NULL)
2170 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
2172 pixCopyText(pixd, pixs);
2173 pixCopyInputFormat(pixd, pixs);
2174 pixCopyResolution(pixd, pixs);
2175 pixScaleResolution(pixd, scalex, scaley);
2177 wpld = pixGetWpl(pixd);
2178 scaleBinaryLow(datad, wd, hd, wpld, datas, ws, hs, wpls);
2211 l_int32 i, j, wm2, hm2;
2213 l_int32 xp, yp, xf, yf;
2214 l_int32 v00r, v01r, v10r, v11r, v00g, v01g, v10g, v11g;
2215 l_int32 v00b, v01b, v10b, v11b, area00, area01, area10, area11;
2216 l_uint32 pixels1, pixels2, pixels3, pixels4, pixel;
2217 l_uint32 *lines, *lined;
2224 scx = 16. * (l_float32)ws / (l_float32)wd;
2225 scy = 16. * (l_float32)hs / (l_float32)hd;
2230 for (i = 0; i < hd; i++) {
2231 ypm = (l_int32)(scy * (l_float32)i);
2234 lined = datad + i * wpld;
2235 lines = datas + yp * wpls;
2236 for (j = 0; j < wd; j++) {
2237 xpm = (l_int32)(scx * (l_float32)j);
2246 pixels1 = *(lines + xp);
2248 if (xp > wm2 || yp > hm2) {
2249 if (yp > hm2 && xp <= wm2) {
2250 pixels2 = *(lines + xp + 1);
2253 }
else if (xp > wm2 && yp <= hm2) {
2255 pixels3 = *(lines + wpls + xp);
2258 pixels4 = pixels3 = pixels2 = pixels1;
2261 pixels2 = *(lines + xp + 1);
2262 pixels3 = *(lines + wpls + xp);
2263 pixels4 = *(lines + wpls + xp + 1);
2266 area00 = (16 - xf) * (16 - yf);
2267 area10 = xf * (16 - yf);
2268 area01 = (16 - xf) * yf;
2270 v00r = area00 * ((pixels1 >> L_RED_SHIFT) & 0xff);
2271 v00g = area00 * ((pixels1 >> L_GREEN_SHIFT) & 0xff);
2272 v00b = area00 * ((pixels1 >> L_BLUE_SHIFT) & 0xff);
2273 v10r = area10 * ((pixels2 >> L_RED_SHIFT) & 0xff);
2274 v10g = area10 * ((pixels2 >> L_GREEN_SHIFT) & 0xff);
2275 v10b = area10 * ((pixels2 >> L_BLUE_SHIFT) & 0xff);
2276 v01r = area01 * ((pixels3 >> L_RED_SHIFT) & 0xff);
2277 v01g = area01 * ((pixels3 >> L_GREEN_SHIFT) & 0xff);
2278 v01b = area01 * ((pixels3 >> L_BLUE_SHIFT) & 0xff);
2279 v11r = area11 * ((pixels4 >> L_RED_SHIFT) & 0xff);
2280 v11g = area11 * ((pixels4 >> L_GREEN_SHIFT) & 0xff);
2281 v11b = area11 * ((pixels4 >> L_BLUE_SHIFT) & 0xff);
2282 pixel = (((v00r + v10r + v01r + v11r + 128) << 16) & 0xff000000) |
2283 (((v00g + v10g + v01g + v11g + 128) << 8) & 0x00ff0000) |
2284 ((v00b + v10b + v01b + v11b + 128) & 0x0000ff00);
2285 *(lined + j) = pixel;
2313 l_int32 i, j, wm2, hm2;
2315 l_int32 xp, yp, xf, yf;
2316 l_int32 v00, v01, v10, v11, v00_val, v01_val, v10_val, v11_val;
2318 l_uint32 *lines, *lined;
2325 scx = 16. * (l_float32)ws / (l_float32)wd;
2326 scy = 16. * (l_float32)hs / (l_float32)hd;
2331 for (i = 0; i < hd; i++) {
2332 ypm = (l_int32)(scy * (l_float32)i);
2335 lined = datad + i * wpld;
2336 lines = datas + yp * wpls;
2337 for (j = 0; j < wd; j++) {
2338 xpm = (l_int32)(scx * (l_float32)j);
2347 if (xp > wm2 || yp > hm2) {
2348 if (yp > hm2 && xp <= wm2) {
2352 }
else if (xp > wm2 && yp <= hm2) {
2357 v10_val = v01_val = v11_val = v00_val;
2365 v00 = (16 - xf) * (16 - yf) * v00_val;
2366 v10 = xf * (16 - yf) * v10_val;
2367 v01 = (16 - xf) * yf * v01_val;
2368 v11 = xf * yf * v11_val;
2370 val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256);
2428 l_uint32 *lines, *lined;
2443 for (i = 0; i < hsm; i++) {
2444 lines = datas + i * wpls;
2445 lined = datad + 2 * i * wpld;
2450 lines = datas + hsm * wpls;
2451 lined = datad + 2 * hsm * wpld;
2473 l_int32 lastlineflag)
2476 l_int32 rval1, rval2, rval3, rval4, gval1, gval2, gval3, gval4;
2477 l_int32 bval1, bval2, bval3, bval4;
2478 l_uint32 pixels1, pixels2, pixels3, pixels4, pixel;
2479 l_uint32 *linesp, *linedp;
2483 if (lastlineflag == 0) {
2484 linesp = lines + wpls;
2485 linedp = lined + wpld;
2490 rval2 = pixels1 >> 24;
2491 gval2 = (pixels1 >> 16) & 0xff;
2492 bval2 = (pixels1 >> 8) & 0xff;
2493 rval4 = pixels3 >> 24;
2494 gval4 = (pixels3 >> 16) & 0xff;
2495 bval4 = (pixels3 >> 8) & 0xff;
2497 for (j = 0, jd = 0; j < wsm; j++, jd += 2) {
2506 pixels2 = *(lines + j + 1);
2507 pixels4 = *(linesp + j + 1);
2508 rval2 = pixels2 >> 24;
2509 gval2 = (pixels2 >> 16) & 0xff;
2510 bval2 = (pixels2 >> 8) & 0xff;
2511 rval4 = pixels4 >> 24;
2512 gval4 = (pixels4 >> 16) & 0xff;
2513 bval4 = (pixels4 >> 8) & 0xff;
2515 pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8);
2516 *(lined + jd) = pixel;
2517 pixel = ((((rval1 + rval2) << 23) & 0xff000000) |
2518 (((gval1 + gval2) << 15) & 0x00ff0000) |
2519 (((bval1 + bval2) << 7) & 0x0000ff00));
2520 *(lined + jd + 1) = pixel;
2521 pixel = ((((rval1 + rval3) << 23) & 0xff000000) |
2522 (((gval1 + gval3) << 15) & 0x00ff0000) |
2523 (((bval1 + bval3) << 7) & 0x0000ff00));
2524 *(linedp + jd) = pixel;
2525 pixel = ((((rval1 + rval2 + rval3 + rval4) << 22) & 0xff000000) |
2526 (((gval1 + gval2 + gval3 + gval4) << 14) & 0x00ff0000) |
2527 (((bval1 + bval2 + bval3 + bval4) << 6) & 0x0000ff00));
2528 *(linedp + jd + 1) = pixel;
2537 pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8);
2538 *(lined + 2 * wsm) = pixel;
2539 *(lined + 2 * wsm + 1) = pixel;
2540 pixel = ((((rval1 + rval3) << 23) & 0xff000000) |
2541 (((gval1 + gval3) << 15) & 0x00ff0000) |
2542 (((bval1 + bval3) << 7) & 0x0000ff00));
2543 *(linedp + 2 * wsm) = pixel;
2544 *(linedp + 2 * wsm + 1) = pixel;
2546 linedp = lined + wpld;
2548 rval2 = pixels2 >> 24;
2549 gval2 = (pixels2 >> 16) & 0xff;
2550 bval2 = (pixels2 >> 8) & 0xff;
2551 for (j = 0, jd = 0; j < wsm; j++, jd += 2) {
2555 pixels2 = *(lines + j + 1);
2556 rval2 = pixels2 >> 24;
2557 gval2 = (pixels2 >> 16) & 0xff;
2558 bval2 = (pixels2 >> 8) & 0xff;
2559 pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8);
2560 *(lined + jd) = pixel;
2561 *(linedp + jd) = pixel;
2562 pixel = ((((rval1 + rval2) << 23) & 0xff000000) |
2563 (((gval1 + gval2) << 15) & 0x00ff0000) |
2564 (((bval1 + bval2) << 7) & 0x0000ff00));
2565 *(lined + jd + 1) = pixel;
2566 *(linedp + jd + 1) = pixel;
2571 pixel = (rval1 << 24 | gval1 << 16 | bval1 << 8);
2572 *(lined + 2 * wsm) = pixel;
2573 *(lined + 2 * wsm + 1) = pixel;
2574 *(linedp + 2 * wsm) = pixel;
2575 *(linedp + 2 * wsm + 1) = pixel;
2627 l_uint32 *lines, *lined;
2642 for (i = 0; i < hsm; i++) {
2643 lines = datas + i * wpls;
2644 lined = datad + 2 * i * wpld;
2649 lines = datas + hsm * wpls;
2650 lined = datad + 2 * hsm * wpld;
2672 l_int32 lastlineflag)
2674 l_int32 j, jd, wsm, w;
2675 l_int32 sval1, sval2, sval3, sval4;
2676 l_uint32 *linesp, *linedp;
2677 l_uint32 words, wordsp, wordd, worddp;
2681 if (lastlineflag == 0) {
2682 linesp = lines + wpls;
2683 linedp = lined + wpld;
2688 sval2 = (words >> 24) & 0xff;
2689 sval4 = (wordsp >> 24) & 0xff;
2690 for (j = 0, jd = 0, w = 0; j + 3 < wsm; j += 4, jd += 8, w++) {
2696 sval2 = (words >> 16) & 0xff;
2698 sval4 = (wordsp >> 16) & 0xff;
2699 wordd = (sval1 << 24) | (((sval1 + sval2) >> 1) << 16);
2700 worddp = (((sval1 + sval3) >> 1) << 24) |
2701 (((sval1 + sval2 + sval3 + sval4) >> 2) << 16);
2704 sval2 = (words >> 8) & 0xff;
2706 sval4 = (wordsp >> 8) & 0xff;
2707 wordd |= (sval1 << 8) | ((sval1 + sval2) >> 1);
2708 worddp |= (((sval1 + sval3) >> 1) << 8) |
2709 ((sval1 + sval2 + sval3 + sval4) >> 2);
2710 lined[w * 2] = wordd;
2711 linedp[w * 2] = worddp;
2714 sval2 = words & 0xff;
2716 sval4 = wordsp & 0xff;
2717 wordd = (sval1 << 24) |
2718 (((sval1 + sval2) >> 1) << 16);
2719 worddp = (((sval1 + sval3) >> 1) << 24) |
2720 (((sval1 + sval2 + sval3 + sval4) >> 2) << 16);
2723 words = lines[w + 1];
2724 wordsp = linesp[w + 1];
2726 sval2 = (words >> 24) & 0xff;
2728 sval4 = (wordsp >> 24) & 0xff;
2729 wordd |= (sval1 << 8) |
2730 ((sval1 + sval2) >> 1);
2731 worddp |= (((sval1 + sval3) >> 1) << 8) |
2732 ((sval1 + sval2 + sval3 + sval4) >> 2);
2733 lined[w * 2 + 1] = wordd;
2734 linedp[w * 2 + 1] = worddp;
2738 for (; j < wsm; j++, jd += 2) {
2747 (sval1 + sval2 + sval3 + sval4) / 4);
2757 #define CHECK_BYTE(a, b, c) if (GET_DATA_BYTE(a, b) != c) {\ 2758 fprintf(stderr, "Error: mismatch at %d, %d vs %d\n", \ 2759 j, GET_DATA_BYTE(a, b), c); } 2763 for (j = 0, jd = 0; j < wsm; j++, jd += 2) {
2768 CHECK_BYTE(lined, jd, sval1);
2769 CHECK_BYTE(lined, jd + 1, (sval1 + sval2) / 2);
2770 CHECK_BYTE(linedp, jd, (sval1 + sval3) / 2);
2771 CHECK_BYTE(linedp, jd + 1,
2772 (sval1 + sval2 + sval3 + sval4) / 4);
2776 CHECK_BYTE(lined, 2 * wsm, sval1);
2777 CHECK_BYTE(lined, 2 * wsm + 1, sval1);
2778 CHECK_BYTE(linedp, 2 * wsm, (sval1 + sval3) / 2);
2779 CHECK_BYTE(linedp, 2 * wsm + 1, (sval1 + sval3) / 2);
2783 linedp = lined + wpld;
2785 for (j = 0, jd = 0; j < wsm; j++, jd += 2) {
2865 l_uint32 *lines, *lined;
2878 for (i = 0; i < hsm; i++) {
2879 lines = datas + i * wpls;
2880 lined = datad + 4 * i * wpld;
2885 lines = datas + hsm * wpls;
2886 lined = datad + 4 * hsm * wpld;
2908 l_int32 lastlineflag)
2910 l_int32 j, jd, wsm, wsm4;
2911 l_int32 s1, s2, s3, s4, s1t, s2t, s3t, s4t;
2912 l_uint32 *linesp, *linedp1, *linedp2, *linedp3;
2917 if (lastlineflag == 0) {
2918 linesp = lines + wpls;
2919 linedp1 = lined + wpld;
2920 linedp2 = lined + 2 * wpld;
2921 linedp3 = lined + 3 * wpld;
2924 for (j = 0, jd = 0; j < wsm; j++, jd += 4) {
2938 SET_DATA_BYTE(linedp1, jd + 1, (9*s1 + s2t + s3t + s4) / 16);
2940 SET_DATA_BYTE(linedp1, jd + 3, (s1t + 9*s2 + s3 + s4t) / 16);
2946 SET_DATA_BYTE(linedp3, jd + 1, (s1t + s2 + 9*s3 + s4t) / 16);
2948 SET_DATA_BYTE(linedp3, jd + 3, (s1 + s2t + s3t + 9*s4) / 16);
2971 linedp1 = lined + wpld;
2972 linedp2 = lined + 2 * wpld;
2973 linedp3 = lined + 3 * wpld;
2975 for (j = 0, jd = 0; j < wsm; j++, jd += 4) {
3046 l_int32 xs, prevxs, sval;
3047 l_int32 *srow, *scol;
3049 l_uint32 *lines, *prevlines, *lined, *prevlined;
3050 l_float32 wratio, hratio;
3052 PROCNAME(
"scaleBySamplingLow");
3054 if (d != 2 && d != 4 && d !=8 && d != 16 && d != 32)
3055 return ERROR_INT(
"pixel depth not supported", procName, 1);
3058 memset(datad, 0, 4LL * hd * wpld);
3062 if ((srow = (l_int32 *)LEPT_CALLOC(hd,
sizeof(l_int32))) == NULL)
3063 return ERROR_INT(
"srow not made", procName, 1);
3064 if ((scol = (l_int32 *)LEPT_CALLOC(wd,
sizeof(l_int32))) == NULL) {
3066 return ERROR_INT(
"scol not made", procName, 1);
3069 wratio = (l_float32)ws / (l_float32)wd;
3070 hratio = (l_float32)hs / (l_float32)hd;
3071 for (i = 0; i < hd; i++)
3072 srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1);
3073 for (j = 0; j < wd; j++)
3074 scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1);
3077 for (i = 0; i < hd; i++) {
3078 lines = datas + srow[i] * wpls;
3079 lined = datad + i * wpld;
3080 if (lines != prevlines) {
3085 for (j = 0; j < wd; j++) {
3095 }
else if (d == 4) {
3096 for (j = 0; j < wd; j++) {
3106 }
else if (d == 8) {
3107 for (j = 0; j < wd; j++) {
3117 }
else if (d == 16) {
3118 for (j = 0; j < wd; j++) {
3129 for (j = 0; j < wd; j++) {
3141 prevlined = lined - wpld;
3142 memcpy(lined, prevlined, 4 * wpld);
3177 l_int32 i, j, m, n, xstart;
3178 l_int32 val, rval, gval, bval;
3179 l_int32 *srow, *scol;
3180 l_uint32 *lines, *lined, *line, *ppixel;
3182 l_float32 wratio, hratio, norm;
3184 PROCNAME(
"scaleSmoothLow");
3187 memset(datad, 0, 4LL * wpld * hd);
3194 if ((srow = (l_int32 *)LEPT_CALLOC(hd,
sizeof(l_int32))) == NULL)
3195 return ERROR_INT(
"srow not made", procName, 1);
3196 if ((scol = (l_int32 *)LEPT_CALLOC(wd,
sizeof(l_int32))) == NULL) {
3198 return ERROR_INT(
"scol not made", procName, 1);
3201 norm = 1. / (l_float32)(size * size);
3202 wratio = (l_float32)ws / (l_float32)wd;
3203 hratio = (l_float32)hs / (l_float32)hd;
3204 for (i = 0; i < hd; i++)
3205 srow[i] = L_MIN((l_int32)(hratio * i), hs - size);
3206 for (j = 0; j < wd; j++)
3207 scol[j] = L_MIN((l_int32)(wratio * j), ws - size);
3211 for (i = 0; i < hd; i++) {
3212 lines = datas + srow[i] * wpls;
3213 lined = datad + i * wpld;
3214 for (j = 0; j < wd; j++) {
3217 for (m = 0; m < size; m++) {
3218 line = lines + m * wpls;
3219 for (n = 0; n < size; n++) {
3223 val = (l_int32)((l_float32)val * norm);
3228 for (i = 0; i < hd; i++) {
3229 lines = datas + srow[i] * wpls;
3230 lined = datad + i * wpld;
3231 for (j = 0; j < wd; j++) {
3233 rval = gval = bval = 0;
3234 for (m = 0; m < size; m++) {
3235 ppixel = lines + m * wpls + xstart;
3236 for (n = 0; n < size; n++) {
3237 pixel = *(ppixel + n);
3238 rval += (pixel >> L_RED_SHIFT) & 0xff;
3239 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3240 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3243 rval = (l_int32)((l_float32)rval * norm);
3244 gval = (l_int32)((l_float32)gval * norm);
3245 bval = (l_int32)((l_float32)bval * norm);
3275 l_int32 i, j, val, rval, gval, bval;
3276 l_uint32 *lines, *lined;
3282 for (i = 0; i < hd; i++) {
3283 lines = datas + 2 * i * wpls;
3284 lined = datad + i * wpld;
3285 for (j = 0; j < wd; j++) {
3287 pixel = *(lines + 2 * j);
3288 rval = (pixel >> L_RED_SHIFT) & 0xff;
3289 gval = (pixel >> L_GREEN_SHIFT) & 0xff;
3290 bval = (pixel >> L_BLUE_SHIFT) & 0xff;
3291 pixel = *(lines + 2 * j + 1);
3292 rval += (pixel >> L_RED_SHIFT) & 0xff;
3293 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3294 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3295 pixel = *(lines + wpls + 2 * j);
3296 rval += (pixel >> L_RED_SHIFT) & 0xff;
3297 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3298 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3299 pixel = *(lines + wpls + 2 * j + 1);
3300 rval += (pixel >> L_RED_SHIFT) & 0xff;
3301 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3302 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3304 val = (l_int32)(rwt * rval + gwt * gval + bwt * bval);
3336 l_int32 i, j, k, m, wm2, hm2;
3337 l_int32 area00, area10, area01, area11, areal, arear, areat, areab;
3340 l_int32 xup, yup, xuf, yuf;
3341 l_int32 xlp, ylp, xlf, ylf;
3342 l_int32 delx, dely, area;
3343 l_int32 v00r, v00g, v00b;
3344 l_int32 v01r, v01g, v01b;
3345 l_int32 v10r, v10g, v10b;
3346 l_int32 v11r, v11g, v11b;
3347 l_int32 vinr, ving, vinb;
3348 l_int32 vmidr, vmidg, vmidb;
3349 l_int32 rval, gval, bval;
3350 l_uint32 pixel00, pixel10, pixel01, pixel11, pixel;
3351 l_uint32 *lines, *lined;
3358 scx = 16. * (l_float32)ws / (l_float32)wd;
3359 scy = 16. * (l_float32)hs / (l_float32)hd;
3364 for (i = 0; i < hd; i++) {
3365 yu = (l_int32)(scy * i);
3366 yl = (l_int32)(scy * (i + 1.0));
3372 lined = datad + i * wpld;
3373 lines = datas + yup * wpls;
3374 for (j = 0; j < wd; j++) {
3375 xu = (l_int32)(scx * j);
3376 xl = (l_int32)(scx * (j + 1.0));
3384 if (xlp > wm2 || ylp > hm2) {
3385 *(lined + j) = *(lines + xup);
3392 area = ((16 - xuf) + 16 * (delx - 1) + xlf) *
3393 ((16 - yuf) + 16 * (dely - 1) + ylf);
3396 pixel00 = *(lines + xup);
3397 pixel10 = *(lines + xlp);
3398 pixel01 = *(lines + dely * wpls + xup);
3399 pixel11 = *(lines + dely * wpls + xlp);
3400 area00 = (16 - xuf) * (16 - yuf);
3401 area10 = xlf * (16 - yuf);
3402 area01 = (16 - xuf) * ylf;
3404 v00r = area00 * ((pixel00 >> L_RED_SHIFT) & 0xff);
3405 v00g = area00 * ((pixel00 >> L_GREEN_SHIFT) & 0xff);
3406 v00b = area00 * ((pixel00 >> L_BLUE_SHIFT) & 0xff);
3407 v10r = area10 * ((pixel10 >> L_RED_SHIFT) & 0xff);
3408 v10g = area10 * ((pixel10 >> L_GREEN_SHIFT) & 0xff);
3409 v10b = area10 * ((pixel10 >> L_BLUE_SHIFT) & 0xff);
3410 v01r = area01 * ((pixel01 >> L_RED_SHIFT) & 0xff);
3411 v01g = area01 * ((pixel01 >> L_GREEN_SHIFT) & 0xff);
3412 v01b = area01 * ((pixel01 >> L_BLUE_SHIFT) & 0xff);
3413 v11r = area11 * ((pixel11 >> L_RED_SHIFT) & 0xff);
3414 v11g = area11 * ((pixel11 >> L_GREEN_SHIFT) & 0xff);
3415 v11b = area11 * ((pixel11 >> L_BLUE_SHIFT) & 0xff);
3416 vinr = ving = vinb = 0;
3417 for (k = 1; k < dely; k++) {
3418 for (m = 1; m < delx; m++) {
3419 pixel = *(lines + k * wpls + xup + m);
3420 vinr += 256 * ((pixel >> L_RED_SHIFT) & 0xff);
3421 ving += 256 * ((pixel >> L_GREEN_SHIFT) & 0xff);
3422 vinb += 256 * ((pixel >> L_BLUE_SHIFT) & 0xff);
3425 vmidr = vmidg = vmidb = 0;
3426 areal = (16 - xuf) * 16;
3428 areat = 16 * (16 - yuf);
3430 for (k = 1; k < dely; k++) {
3431 pixel = *(lines + k * wpls + xup);
3432 vmidr += areal * ((pixel >> L_RED_SHIFT) & 0xff);
3433 vmidg += areal * ((pixel >> L_GREEN_SHIFT) & 0xff);
3434 vmidb += areal * ((pixel >> L_BLUE_SHIFT) & 0xff);
3436 for (k = 1; k < dely; k++) {
3437 pixel = *(lines + k * wpls + xlp);
3438 vmidr += arear * ((pixel >> L_RED_SHIFT) & 0xff);
3439 vmidg += arear * ((pixel >> L_GREEN_SHIFT) & 0xff);
3440 vmidb += arear * ((pixel >> L_BLUE_SHIFT) & 0xff);
3442 for (m = 1; m < delx; m++) {
3443 pixel = *(lines + xup + m);
3444 vmidr += areat * ((pixel >> L_RED_SHIFT) & 0xff);
3445 vmidg += areat * ((pixel >> L_GREEN_SHIFT) & 0xff);
3446 vmidb += areat * ((pixel >> L_BLUE_SHIFT) & 0xff);
3448 for (m = 1; m < delx; m++) {
3449 pixel = *(lines + dely * wpls + xup + m);
3450 vmidr += areab * ((pixel >> L_RED_SHIFT) & 0xff);
3451 vmidg += areab * ((pixel >> L_GREEN_SHIFT) & 0xff);
3452 vmidb += areab * ((pixel >> L_BLUE_SHIFT) & 0xff);
3456 rval = (v00r + v01r + v10r + v11r + vinr + vmidr + 128) / area;
3457 gval = (v00g + v01g + v10g + v11g + ving + vmidg + 128) / area;
3458 bval = (v00b + v01b + v10b + v11b + vinb + vmidb + 128) / area;
3460 if (rval > 255) fprintf(stderr,
"rval ovfl: %d\n", rval);
3461 if (gval > 255) fprintf(stderr,
"gval ovfl: %d\n", gval);
3462 if (bval > 255) fprintf(stderr,
"bval ovfl: %d\n", bval);
3491 l_int32 i, j, k, m, wm2, hm2;
3494 l_int32 xup, yup, xuf, yuf;
3495 l_int32 xlp, ylp, xlf, ylf;
3496 l_int32 delx, dely, area;
3504 l_uint32 *lines, *lined;
3511 scx = 16. * (l_float32)ws / (l_float32)wd;
3512 scy = 16. * (l_float32)hs / (l_float32)hd;
3517 for (i = 0; i < hd; i++) {
3518 yu = (l_int32)(scy * i);
3519 yl = (l_int32)(scy * (i + 1.0));
3525 lined = datad + i * wpld;
3526 lines = datas + yup * wpls;
3527 for (j = 0; j < wd; j++) {
3528 xu = (l_int32)(scx * j);
3529 xl = (l_int32)(scx * (j + 1.0));
3537 if (xlp > wm2 || ylp > hm2) {
3545 area = ((16 - xuf) + 16 * (delx - 1) + xlf) *
3546 ((16 - yuf) + 16 * (dely - 1) + ylf);
3551 v01 = (16 - xuf) * ylf *
GET_DATA_BYTE(lines + dely * wpls, xup);
3553 for (vin = 0, k = 1; k < dely; k++) {
3554 for (m = 1; m < delx; m++) {
3558 for (vmid = 0, k = 1; k < dely; k++)
3559 vmid += (16 - xuf) * 16 *
GET_DATA_BYTE(lines + k * wpls, xup);
3560 for (k = 1; k < dely; k++)
3562 for (m = 1; m < delx; m++)
3564 for (m = 1; m < delx; m++)
3565 vmid += 16 * ylf *
GET_DATA_BYTE(lines + dely * wpls, xup + m);
3566 val = (v00 + v01 + v10 + v11 + vin + vmid + 128) / area;
3568 if (val > 255) fprintf(stderr,
"val overflow: %d\n", val);
3595 l_int32 i, j, val, rval, gval, bval;
3596 l_uint32 *lines, *lined;
3600 for (i = 0; i < hd; i++) {
3601 lines = datas + 2 * i * wpls;
3602 lined = datad + i * wpld;
3603 for (j = 0; j < wd; j++) {
3614 for (i = 0; i < hd; i++) {
3615 lines = datas + 2 * i * wpls;
3616 lined = datad + i * wpld;
3617 for (j = 0; j < wd; j++) {
3619 pixel = *(lines + 2 * j);
3620 rval = (pixel >> L_RED_SHIFT) & 0xff;
3621 gval = (pixel >> L_GREEN_SHIFT) & 0xff;
3622 bval = (pixel >> L_BLUE_SHIFT) & 0xff;
3623 pixel = *(lines + 2 * j + 1);
3624 rval += (pixel >> L_RED_SHIFT) & 0xff;
3625 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3626 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3627 pixel = *(lines + wpls + 2 * j);
3628 rval += (pixel >> L_RED_SHIFT) & 0xff;
3629 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3630 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3631 pixel = *(lines + wpls + 2 * j + 1);
3632 rval += (pixel >> L_RED_SHIFT) & 0xff;
3633 gval += (pixel >> L_GREEN_SHIFT) & 0xff;
3634 bval += (pixel >> L_BLUE_SHIFT) & 0xff;
3636 *(lined + j) = pixel;
3657 scaleBinaryLow(l_uint32 *datad,
3667 l_int32 xs, prevxs, sval;
3668 l_int32 *srow, *scol;
3669 l_uint32 *lines, *prevlines, *lined, *prevlined;
3670 l_float32 wratio, hratio;
3672 PROCNAME(
"scaleBinaryLow");
3675 memset(datad, 0, 4LL * hd * wpld);
3679 if ((srow = (l_int32 *)LEPT_CALLOC(hd,
sizeof(l_int32))) == NULL)
3680 return ERROR_INT(
"srow not made", procName, 1);
3681 if ((scol = (l_int32 *)LEPT_CALLOC(wd,
sizeof(l_int32))) == NULL) {
3683 return ERROR_INT(
"scol not made", procName, 1);
3686 wratio = (l_float32)ws / (l_float32)wd;
3687 hratio = (l_float32)hs / (l_float32)hd;
3688 for (i = 0; i < hd; i++)
3689 srow[i] = L_MIN((l_int32)(hratio * i + 0.5), hs - 1);
3690 for (j = 0; j < wd; j++)
3691 scol[j] = L_MIN((l_int32)(wratio * j + 0.5), ws - 1);
3696 for (i = 0; i < hd; i++) {
3697 lines = datas + srow[i] * wpls;
3698 lined = datad + i * wpld;
3699 if (lines != prevlines) {
3700 for (j = 0; j < wd; j++) {
3712 prevlined = lined - wpld;
3713 memcpy(lined, prevlined, 4 * wpld);
PIX * pixScaleRGBToGray2(PIX *pixs, l_float32 rwt, l_float32 gwt, l_float32 bwt)
pixScaleRGBToGray2()
PIX * pixScaleColor2xLI(PIX *pixs)
pixScaleColor2xLI()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * pixScaleColor4xLI(PIX *pixs)
pixScaleColor4xLI()
PIX * pixScaleToSizeRel(PIX *pixs, l_int32 delw, l_int32 delh)
pixScaleToSizeRel()
PIX * pixScaleGray2xLIDither(PIX *pixs)
pixScaleGray2xLIDither()
PIX * pixScaleRGBToGrayFast(PIX *pixs, l_int32 factor, l_int32 color)
pixScaleRGBToGrayFast()
static void scaleRGBToGray2Low(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 rwt, l_float32 gwt, l_float32 bwt)
scaleRGBToGray2Low()
static void scaleGrayLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleGrayLILow()
PIX * pixScaleGray4xLIThresh(PIX *pixs, l_int32 thresh)
pixScaleGray4xLIThresh()
PIX * pixScaleGrayToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh)
pixScaleGrayToBinaryFast()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixScaleToResolution(PIX *pixs, l_float32 target, l_float32 assumed, l_float32 *pscalefact)
pixScaleToResolution()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixScaleGeneral(PIX *pixs, l_float32 scalex, l_float32 scaley, l_float32 sharpfract, l_int32 sharpwidth)
pixScaleGeneral()
PIX * pixScaleGray2xLIThresh(PIX *pixs, l_int32 thresh)
pixScaleGray2xLIThresh()
PIX * pixScaleAreaMap(PIX *pix, l_float32 scalex, l_float32 scaley)
pixScaleAreaMap()
PIX * pixScaleColorLI(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleColorLI()
#define SET_DATA_QBIT(pdata, n, val)
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * pixScaleBySampling(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleBySampling()
static void scaleColorLILow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleColorLILow()
#define GET_DATA_BIT(pdata, n)
static l_int32 scaleSmoothLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls, l_int32 size)
scaleSmoothLow()
static l_int32 scaleBySamplingLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 d, l_int32 wpls)
scaleBySamplingLow()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
#define SET_DATA_DIBIT(pdata, n, val)
static void scaleColor2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag)
scaleColor2xLILineLow()
static void scaleColor2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleColor2xLILow()
PIX * pixScaleBinary(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleBinary()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
static void scaleGray4xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleGray4xLILow()
#define GET_DATA_BYTE(pdata, n)
void ditherToBinaryLineLow(l_uint32 *lined, l_int32 w, l_uint32 *bufs1, l_uint32 *bufs2, l_int32 lowerclip, l_int32 upperclip, l_int32 lastlineflag)
ditherToBinaryLineLow()
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
static void scaleGray4xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag)
scaleGray4xLILineLow()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixScaleToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleToSize()
void pixDestroy(PIX **ppix)
pixDestroy()
static void scaleGrayAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleGrayAreaMapLow()
l_ok pixCopyColormap(PIX *pixd, PIX *pixs)
pixCopyColormap()
PIX * pixScaleLI(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleLI()
PIX * pixScaleAreaMapToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleAreaMapToSize()
PIX * pixScaleByIntSampling(PIX *pixs, l_int32 factor)
pixScaleByIntSampling()
static void scaleColorAreaMapLow(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleColorAreaMapLow()
PIX * pixScaleAreaMap2(PIX *pix)
pixScaleAreaMap2()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixScaleGrayLI(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleGrayLI()
PIX * pixScaleGray2xLI(PIX *pixs)
pixScaleGray2xLI()
#define GET_DATA_TWO_BYTES(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
static void scaleGray2xLILow(l_uint32 *datad, l_int32 wpld, l_uint32 *datas, l_int32 ws, l_int32 hs, l_int32 wpls)
scaleGray2xLILow()
PIX * pixScaleSmoothToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleSmoothToSize()
static void scaleAreaMapLow2(l_uint32 *datad, l_int32 wd, l_int32 hd, l_int32 wpld, l_uint32 *datas, l_int32 d, l_int32 wpls)
scaleAreaMapLow2()
PIX * pixScaleBySamplingToSize(PIX *pixs, l_int32 wd, l_int32 hd)
pixScaleBySamplingToSize()
PIX * pixUnsharpMasking(PIX *pixs, l_int32 halfwidth, l_float32 fract)
pixUnsharpMasking()
static void scaleGray2xLILineLow(l_uint32 *lined, l_int32 wpld, l_uint32 *lines, l_int32 ws, l_int32 wpls, l_int32 lastlineflag)
scaleGray2xLILineLow()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
PIX * pixScaleRGBToBinaryFast(PIX *pixs, l_int32 factor, l_int32 thresh)
pixScaleRGBToBinaryFast()
PIX * pixScaleGray4xLIDither(PIX *pixs)
pixScaleGray4xLIDither()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_ok pixCopySpp(PIX *pixd, const PIX *pixs)
pixCopySpp()
PIX * pixScaleSmooth(PIX *pix, l_float32 scalex, l_float32 scaley)
pixScaleSmooth()
l_ok pixScaleAndTransferAlpha(PIX *pixd, PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScaleAndTransferAlpha()
PIX * pixScale(PIX *pixs, l_float32 scalex, l_float32 scaley)
pixScale()
#define SET_DATA_TWO_BYTES(pdata, n, val)
PIX * pixConvertTo8Or32(PIX *pixs, l_int32 copyflag, l_int32 warnflag)
pixConvertTo8Or32()
#define SET_DATA_BIT(pdata, n)
PIX * pixScaleGray4xLI(PIX *pixs)
pixScaleGray4xLI()