92 #include "allheaders.h" 118 l_int32 i, j, w, h, d, wpl, pval;
119 l_uint32 *data, *line;
121 PROCNAME(
"pixAddConstantGray");
124 return ERROR_INT(
"pixs not defined", procName, 1);
126 if (d != 8 && d != 16 && d != 32)
127 return ERROR_INT(
"pixs not 8, 16 or 32 bpp", procName, 1);
130 wpl = pixGetWpl(pixs);
131 for (i = 0; i < h; i++) {
132 line = data + i * wpl;
135 for (j = 0; j < w; j++) {
137 pval = L_MAX(0, pval + val);
141 for (j = 0; j < w; j++) {
143 pval = L_MIN(255, pval + val);
147 }
else if (d == 16) {
149 for (j = 0; j < w; j++) {
151 pval = L_MAX(0, pval + val);
155 for (j = 0; j < w; j++) {
157 pval = L_MIN(0xffff, pval + val);
162 for (j = 0; j < w; j++)
189 l_int32 i, j, w, h, d, wpl, pval;
191 l_uint32 *data, *line;
193 PROCNAME(
"pixMultConstantGray");
196 return ERROR_INT(
"pixs not defined", procName, 1);
198 if (d != 8 && d != 16 && d != 32)
199 return ERROR_INT(
"pixs not 8, 16 or 32 bpp", procName, 1);
201 return ERROR_INT(
"val < 0.0", procName, 1);
204 wpl = pixGetWpl(pixs);
205 for (i = 0; i < h; i++) {
206 line = data + i * wpl;
208 for (j = 0; j < w; j++) {
210 pval = (l_int32)(val * pval);
211 pval = L_MIN(255, pval);
214 }
else if (d == 16) {
215 for (j = 0; j < w; j++) {
217 pval = (l_int32)(val * pval);
218 pval = L_MIN(0xffff, pval);
222 for (j = 0; j < w; j++) {
224 upval = (l_uint32)(val * upval);
265 l_int32 i, j, d, ws, hs, w, h, wpls, wpld, val, sum;
266 l_uint32 *datas, *datad, *lines, *lined;
268 PROCNAME(
"pixAddGray");
271 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
273 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
275 return (
PIX *)ERROR_PTR(
"pixs2 and pixs1 must differ", procName, pixd);
277 return (
PIX *)ERROR_PTR(
"pixs2 and pixd must differ", procName, pixd);
278 d = pixGetDepth(pixs1);
279 if (d != 8 && d != 16 && d != 32)
280 return (
PIX *)ERROR_PTR(
"pix are not 8, 16 or 32 bpp", procName, pixd);
281 if (pixGetDepth(pixs2) != d)
282 return (
PIX *)ERROR_PTR(
"depths differ (pixs1, pixs2)", procName, pixd);
283 if (pixd && (pixGetDepth(pixd) != d))
284 return (
PIX *)ERROR_PTR(
"depths differ (pixs1, pixd)", procName, pixd);
287 L_WARNING(
"pixs1 and pixs2 not equal in size\n", procName);
289 L_WARNING(
"pixs1 and pixd not equal in size\n", procName);
297 wpls = pixGetWpl(pixs2);
298 wpld = pixGetWpl(pixd);
303 for (i = 0; i < h; i++) {
304 lined = datad + i * wpld;
305 lines = datas + i * wpls;
307 for (j = 0; j < w; j++) {
309 val = L_MIN(sum, 255);
312 }
else if (d == 16) {
313 for (j = 0; j < w; j++) {
316 val = L_MIN(sum, 0xffff);
320 for (j = 0; j < w; j++)
321 *(lined + j) += *(lines + j);
357 l_int32 i, j, w, h, ws, hs, d, wpls, wpld, val, diff;
358 l_uint32 *datas, *datad, *lines, *lined;
360 PROCNAME(
"pixSubtractGray");
363 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
365 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
367 return (
PIX *)ERROR_PTR(
"pixs2 and pixs1 must differ", procName, pixd);
369 return (
PIX *)ERROR_PTR(
"pixs2 and pixd must differ", procName, pixd);
370 d = pixGetDepth(pixs1);
371 if (d != 8 && d != 16 && d != 32)
372 return (
PIX *)ERROR_PTR(
"pix are not 8, 16 or 32 bpp", procName, pixd);
373 if (pixGetDepth(pixs2) != d)
374 return (
PIX *)ERROR_PTR(
"depths differ (pixs1, pixs2)", procName, pixd);
375 if (pixd && (pixGetDepth(pixd) != d))
376 return (
PIX *)ERROR_PTR(
"depths differ (pixs1, pixd)", procName, pixd);
379 L_WARNING(
"pixs1 and pixs2 not equal in size\n", procName);
381 L_WARNING(
"pixs1 and pixd not equal in size\n", procName);
389 wpls = pixGetWpl(pixs2);
390 wpld = pixGetWpl(pixd);
395 for (i = 0; i < h; i++) {
396 lined = datad + i * wpld;
397 lines = datas + i * wpls;
399 for (j = 0; j < w; j++) {
401 val = L_MAX(diff, 0);
404 }
else if (d == 16) {
405 for (j = 0; j < w; j++) {
408 val = L_MAX(diff, 0);
412 for (j = 0; j < w; j++)
413 *(lined + j) -= *(lines + j);
447 l_int32 i, j, w, h, d, wpld, setabove;
448 l_uint32 *datad, *lined;
450 PROCNAME(
"pixThresholdToValue");
453 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, pixd);
454 d = pixGetDepth(pixs);
455 if (d != 8 && d != 16 && d != 32)
456 return (
PIX *)ERROR_PTR(
"pixs not 8, 16 or 32 bpp", procName, pixd);
457 if (pixd && (pixs != pixd))
458 return (
PIX *)ERROR_PTR(
"pixd exists and is not pixs", procName, pixd);
459 if (threshval < 0 || setval < 0)
460 return (
PIX *)ERROR_PTR(
"threshval & setval not < 0", procName, pixd);
461 if (d == 8 && setval > 255)
462 return (
PIX *)ERROR_PTR(
"setval > 255 for 8 bpp", procName, pixd);
463 if (d == 16 && setval > 0xffff)
464 return (
PIX *)ERROR_PTR(
"setval > 0xffff for 16 bpp", procName, pixd);
468 if (setval == threshval) {
469 L_WARNING(
"setval == threshval; no operation\n", procName);
475 wpld = pixGetWpl(pixd);
476 if (setval > threshval)
481 for (i = 0; i < h; i++) {
482 lined = datad + i * wpld;
483 if (setabove == TRUE) {
485 for (j = 0; j < w; j++) {
489 }
else if (d == 16) {
490 for (j = 0; j < w; j++) {
495 for (j = 0; j < w; j++) {
496 if (*(lined + j) >= threshval)
497 *(lined + j) = setval;
502 for (j = 0; j < w; j++) {
506 }
else if (d == 16) {
507 for (j = 0; j < w; j++) {
512 for (j = 0; j < w; j++) {
513 if (*(lined + j) <= threshval)
514 *(lined + j) = setval;
557 PROCNAME(
"pixInitAccumulate");
559 if ((pixd =
pixCreate(w, h, 32)) == NULL)
560 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
561 if (offset > 0x40000000)
589 l_int32 i, j, w, h, wpls, wpld, val;
590 l_uint32 *datas, *datad, *lines, *lined;
593 PROCNAME(
"pixFinalAccumulate");
596 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
597 if (pixGetDepth(pixs) != 32)
598 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
599 if (depth != 8 && depth != 16 && depth != 32)
600 return (
PIX *)ERROR_PTR(
"dest depth not 8, 16, 32 bpp", procName, NULL);
601 if (offset > 0x40000000)
605 if ((pixd =
pixCreate(w, h, depth)) == NULL)
606 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
607 pixCopyResolution(pixd, pixs);
610 wpls = pixGetWpl(pixs);
611 wpld = pixGetWpl(pixd);
613 for (i = 0; i < h; i++) {
614 lines = datas + i * wpls;
615 lined = datad + i * wpld;
616 for (j = 0; j < w; j++) {
617 val = lines[j] - offset;
619 val = L_MIN(255, val);
623 }
else if (depth == 16) {
624 for (i = 0; i < h; i++) {
625 lines = datas + i * wpls;
626 lined = datad + i * wpld;
627 for (j = 0; j < w; j++) {
628 val = lines[j] - offset;
630 val = L_MIN(0xffff, val);
635 for (i = 0; i < h; i++) {
636 lines = datas + i * wpls;
637 lined = datad + i * wpld;
638 for (j = 0; j < w; j++)
639 lined[j] = lines[j] - offset;
666 l_int32 i, j, w, h, wpls, wpld, val;
667 l_uint32 *datas, *datad, *lines, *lined;
670 PROCNAME(
"pixFinalAccumulateThreshold");
673 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
674 if (pixGetDepth(pixs) != 32)
675 return (
PIX *)ERROR_PTR(
"pixs not 32 bpp", procName, NULL);
676 if (offset > 0x40000000)
681 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
682 pixCopyResolution(pixd, pixs);
685 wpls = pixGetWpl(pixs);
686 wpld = pixGetWpl(pixd);
687 for (i = 0; i < h; i++) {
688 lines = datas + i * wpls;
689 lined = datad + i * wpld;
690 for (j = 0; j < w; j++) {
691 val = lines[j] - offset;
692 if (val >= threshold) {
723 l_int32 i, j, w, h, d, wd, hd, wpls, wpld;
724 l_uint32 *datas, *datad, *lines, *lined;
727 PROCNAME(
"pixAccumulate");
729 if (!pixd || (pixGetDepth(pixd) != 32))
730 return ERROR_INT(
"pixd not defined or not 32 bpp", procName, 1);
732 return ERROR_INT(
"pixs not defined", procName, 1);
733 d = pixGetDepth(pixs);
734 if (d != 1 && d != 8 && d != 16 && d != 32)
735 return ERROR_INT(
"pixs not 1, 8, 16 or 32 bpp", procName, 1);
736 if (op != L_ARITH_ADD && op != L_ARITH_SUBTRACT)
737 return ERROR_INT(
"op must be in {L_ARITH_ADD, L_ARITH_SUBTRACT}",
742 wpls = pixGetWpl(pixs);
743 wpld = pixGetWpl(pixd);
749 for (i = 0; i < h; i++) {
750 lines = datas + i * wpls;
751 lined = datad + i * wpld;
752 if (op == L_ARITH_ADD) {
753 for (j = 0; j < w; j++)
756 for (j = 0; j < w; j++)
761 for (i = 0; i < h; i++) {
762 lines = datas + i * wpls;
763 lined = datad + i * wpld;
764 if (op == L_ARITH_ADD) {
765 for (j = 0; j < w; j++)
768 for (j = 0; j < w; j++)
772 }
else if (d == 16) {
773 for (i = 0; i < h; i++) {
774 lines = datas + i * wpls;
775 lined = datad + i * wpld;
776 if (op == L_ARITH_ADD) {
777 for (j = 0; j < w; j++)
780 for (j = 0; j < w; j++)
785 for (i = 0; i < h; i++) {
786 lines = datas + i * wpls;
787 lined = datad + i * wpld;
788 if (op == L_ARITH_ADD) {
789 for (j = 0; j < w; j++)
790 lined[j] += lines[j];
792 for (j = 0; j < w; j++)
793 lined[j] -= lines[j];
822 l_int32 i, j, w, h, wpl, val;
823 l_uint32 *data, *line;
825 PROCNAME(
"pixMultConstAccumulate");
828 return ERROR_INT(
"pixs not defined", procName, 1);
829 if (pixGetDepth(pixs) != 32)
830 return ERROR_INT(
"pixs not 32 bpp", procName, 1);
831 if (offset > 0x40000000)
836 wpl = pixGetWpl(pixs);
837 for (i = 0; i < h; i++) {
838 line = data + i * wpl;
839 for (j = 0; j < w; j++) {
840 val = line[j] - offset;
841 val = (l_int32)(val * factor);
843 line[j] = (l_uint32)val;
875 l_int32 i, j, w, h, w2, h2, d, wpls1, wpls2, wpld, val1, val2, diff;
876 l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rdiff, gdiff, bdiff;
877 l_uint32 *datas1, *datas2, *datad, *lines1, *lines2, *lined;
880 PROCNAME(
"pixAbsDifference");
883 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, NULL);
885 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, NULL);
886 d = pixGetDepth(pixs1);
887 if (d != pixGetDepth(pixs2))
888 return (
PIX *)ERROR_PTR(
"src1 and src2 depths unequal", procName, NULL);
889 if (d != 8 && d != 16 && d != 32)
890 return (
PIX *)ERROR_PTR(
"depths not in {8, 16, 32}", procName, NULL);
897 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
898 pixCopyResolution(pixd, pixs1);
902 wpls1 = pixGetWpl(pixs1);
903 wpls2 = pixGetWpl(pixs2);
904 wpld = pixGetWpl(pixd);
906 for (i = 0; i < h; i++) {
907 lines1 = datas1 + i * wpls1;
908 lines2 = datas2 + i * wpls2;
909 lined = datad + i * wpld;
910 for (j = 0; j < w; j++) {
913 diff = L_ABS(val1 - val2);
917 }
else if (d == 16) {
918 for (i = 0; i < h; i++) {
919 lines1 = datas1 + i * wpls1;
920 lines2 = datas2 + i * wpls2;
921 lined = datad + i * wpld;
922 for (j = 0; j < w; j++) {
925 diff = L_ABS(val1 - val2);
930 for (i = 0; i < h; i++) {
931 lines1 = datas1 + i * wpls1;
932 lines2 = datas2 + i * wpls2;
933 lined = datad + i * wpld;
934 for (j = 0; j < w; j++) {
937 rdiff = L_ABS(rval1 - rval2);
938 gdiff = L_ABS(gval1 - gval2);
939 bdiff = L_ABS(bval1 - bval2);
972 l_int32 i, j, w, h, d, w2, h2, d2, wplc1, wplc2, wpld;
973 l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval;
974 l_uint32 *datac1, *datac2, *datad, *linec1, *linec2, *lined;
975 PIX *pixc1, *pixc2, *pixd;
977 PROCNAME(
"pixAddRGB");
980 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, NULL);
982 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, NULL);
985 if (!pixGetColormap(pixs1) && d != 32)
986 return (
PIX *)ERROR_PTR(
"pixs1 not cmapped or rgb", procName, NULL);
987 if (!pixGetColormap(pixs2) && d2 != 32)
988 return (
PIX *)ERROR_PTR(
"pixs2 not cmapped or rgb", procName, NULL);
989 if (pixGetColormap(pixs1))
993 if (pixGetColormap(pixs2))
1001 pixCopyResolution(pixd, pixs1);
1005 wplc1 = pixGetWpl(pixc1);
1006 wplc2 = pixGetWpl(pixc2);
1007 wpld = pixGetWpl(pixd);
1008 for (i = 0; i < h; i++) {
1009 linec1 = datac1 + i * wplc1;
1010 linec2 = datac2 + i * wplc2;
1011 lined = datad + i * wpld;
1012 for (j = 0; j < w; j++) {
1015 rval = L_MIN(255, rval1 + rval2);
1016 gval = L_MIN(255, gval1 + gval2);
1017 bval = L_MIN(255, bval1 + bval2);
1059 l_int32 d, ws, hs, w, h, wpls, wpld, i, j, vals, vald, val;
1060 l_int32 rval1, gval1, bval1, rval2, gval2, bval2, rval, gval, bval;
1061 l_uint32 *datas, *datad, *lines, *lined;
1063 PROCNAME(
"pixMinOrMax");
1066 return (
PIX *)ERROR_PTR(
"pixs1 not defined", procName, pixd);
1068 return (
PIX *)ERROR_PTR(
"pixs2 not defined", procName, pixd);
1070 return (
PIX *)ERROR_PTR(
"pixs1 and pixs2 must differ", procName, pixd);
1071 if (type != L_CHOOSE_MIN && type != L_CHOOSE_MAX)
1072 return (
PIX *)ERROR_PTR(
"invalid type", procName, pixd);
1073 d = pixGetDepth(pixs1);
1074 if (pixGetDepth(pixs2) != d)
1075 return (
PIX *)ERROR_PTR(
"depths unequal", procName, pixd);
1076 if (d != 8 && d != 16 && d != 32)
1077 return (
PIX *)ERROR_PTR(
"depth not 8, 16 or 32 bpp", procName, pixd);
1088 wpls = pixGetWpl(pixs2);
1089 wpld = pixGetWpl(pixd);
1090 for (i = 0; i < h; i++) {
1091 lines = datas + i * wpls;
1092 lined = datad + i * wpld;
1094 for (j = 0; j < w; j++) {
1097 if (type == L_CHOOSE_MIN)
1098 val = L_MIN(vals, vald);
1100 val = L_MAX(vals, vald);
1103 }
else if (d == 16) {
1104 for (j = 0; j < w; j++) {
1107 if (type == L_CHOOSE_MIN)
1108 val = L_MIN(vals, vald);
1110 val = L_MAX(vals, vald);
1114 for (j = 0; j < w; j++) {
1117 if (type == L_CHOOSE_MIN) {
1118 rval = L_MIN(rval1, rval2);
1119 gval = L_MIN(gval1, gval2);
1120 bval = L_MIN(bval1, bval2);
1122 rval = L_MAX(rval1, rval2);
1123 gval = L_MAX(gval1, gval2);
1124 bval = L_MAX(bval1, bval2);
1159 l_int32 i, j, w, h, d, wpls, wpld, max;
1160 l_uint32 *datas, *datad;
1161 l_uint32 word, sval;
1162 l_uint32 *lines, *lined;
1167 PROCNAME(
"pixMaxDynamicRange");
1170 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1172 if (d != 4 && d != 8 && d != 16 && d != 32)
1173 return (
PIX *)ERROR_PTR(
"pixs not in {4,8,16,32} bpp", procName, NULL);
1174 if (type != L_LINEAR_SCALE && type != L_LOG_SCALE)
1175 return (
PIX *)ERROR_PTR(
"invalid type", procName, NULL);
1177 if ((pixd =
pixCreate(w, h, 8)) == NULL)
1178 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
1179 pixCopyResolution(pixd, pixs);
1182 wpls = pixGetWpl(pixs);
1183 wpld = pixGetWpl(pixd);
1187 for (i = 0; i < h; i++) {
1188 lines = datas + i * wpls;
1189 for (j = 0; j < wpls; j++) {
1190 word = *(lines + j);
1192 max = L_MAX(max, word >> 28);
1193 max = L_MAX(max, (word >> 24) & 0xf);
1194 max = L_MAX(max, (word >> 20) & 0xf);
1195 max = L_MAX(max, (word >> 16) & 0xf);
1196 max = L_MAX(max, (word >> 12) & 0xf);
1197 max = L_MAX(max, (word >> 8) & 0xf);
1198 max = L_MAX(max, (word >> 4) & 0xf);
1199 max = L_MAX(max, word & 0xf);
1200 }
else if (d == 8) {
1201 max = L_MAX(max, word >> 24);
1202 max = L_MAX(max, (word >> 16) & 0xff);
1203 max = L_MAX(max, (word >> 8) & 0xff);
1204 max = L_MAX(max, word & 0xff);
1205 }
else if (d == 16) {
1206 max = L_MAX(max, word >> 16);
1207 max = L_MAX(max, word & 0xffff);
1209 max = L_MAX(max, word);
1216 if (type == L_LINEAR_SCALE) {
1217 factor = 255. / (l_float32)max;
1218 for (i = 0; i < h; i++) {
1219 lines = datas + i * wpls;
1220 lined = datad + i * wpld;
1221 for (j = 0; j < w; j++) {
1223 dval = (l_uint8)(factor * (l_float32)sval + 0.5);
1228 tab = makeLogBase2Tab();
1229 factor = 255. / getLogBase2(max, tab);
1230 for (i = 0; i < h; i++) {
1231 lines = datas + i * wpls;
1232 lined = datad + i * wpld;
1233 for (j = 0; j < w; j++) {
1235 dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5);
1241 }
else if (d == 8) {
1242 if (type == L_LINEAR_SCALE) {
1243 factor = 255. / (l_float32)max;
1244 for (i = 0; i < h; i++) {
1245 lines = datas + i * wpls;
1246 lined = datad + i * wpld;
1247 for (j = 0; j < w; j++) {
1249 dval = (l_uint8)(factor * (l_float32)sval + 0.5);
1254 tab = makeLogBase2Tab();
1255 factor = 255. / getLogBase2(max, tab);
1256 for (i = 0; i < h; i++) {
1257 lines = datas + i * wpls;
1258 lined = datad + i * wpld;
1259 for (j = 0; j < w; j++) {
1261 dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5);
1267 }
else if (d == 16) {
1268 if (type == L_LINEAR_SCALE) {
1269 factor = 255. / (l_float32)max;
1270 for (i = 0; i < h; i++) {
1271 lines = datas + i * wpls;
1272 lined = datad + i * wpld;
1273 for (j = 0; j < w; j++) {
1275 dval = (l_uint8)(factor * (l_float32)sval + 0.5);
1280 tab = makeLogBase2Tab();
1281 factor = 255. / getLogBase2(max, tab);
1282 for (i = 0; i < h; i++) {
1283 lines = datas + i * wpls;
1284 lined = datad + i * wpld;
1285 for (j = 0; j < w; j++) {
1287 dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5);
1294 if (type == L_LINEAR_SCALE) {
1295 factor = 255. / (l_float32)max;
1296 for (i = 0; i < h; i++) {
1297 lines = datas + i * wpls;
1298 lined = datad + i * wpld;
1299 for (j = 0; j < w; j++) {
1301 dval = (l_uint8)(factor * (l_float32)sval + 0.5);
1306 tab = makeLogBase2Tab();
1307 factor = 255. / getLogBase2(max, tab);
1308 for (i = 0; i < h; i++) {
1309 lines = datas + i * wpls;
1310 lined = datad + i * wpld;
1311 for (j = 0; j < w; j++) {
1313 dval = (l_uint8)(factor * getLogBase2(sval, tab) + 0.5);
1346 l_int32 i, j, w, h, wpls, wpld, max;
1347 l_uint32 sval, dval, word;
1348 l_uint32 *datas, *datad;
1349 l_uint32 *lines, *lined;
1354 PROCNAME(
"pixMaxDynamicRangeRGB");
1356 if (!pixs || pixGetDepth(pixs) != 32)
1357 return (
PIX *)ERROR_PTR(
"pixs undefined or not 32 bpp", procName, NULL);
1358 if (type != L_LINEAR_SCALE && type != L_LOG_SCALE)
1359 return (
PIX *)ERROR_PTR(
"invalid type", procName, NULL);
1365 wpls = pixGetWpl(pixs);
1366 wpld = pixGetWpl(pixd);
1369 for (i = 0; i < h; i++) {
1370 lines = datas + i * wpls;
1371 for (j = 0; j < wpls; j++) {
1373 max = L_MAX(max, word >> 24);
1374 max = L_MAX(max, (word >> 16) & 0xff);
1375 max = L_MAX(max, (word >> 8) & 0xff);
1380 if (type == L_LINEAR_SCALE) {
1381 factor = 255. / (l_float32)max;
1382 for (i = 0; i < h; i++) {
1383 lines = datas + i * wpls;
1384 lined = datad + i * wpld;
1385 for (j = 0; j < w; j++) {
1392 tab = makeLogBase2Tab();
1393 factor = 255. / getLogBase2(max, tab);
1394 for (i = 0; i < h; i++) {
1395 lines = datas + i * wpls;
1396 lined = datad + i * wpld;
1397 for (j = 0; j < w; j++) {
1435 dval = ((l_uint8)(factor * (sval >> 24) + 0.5) << 24) |
1436 ((l_uint8)(factor * ((sval >> 16) & 0xff) + 0.5) << 16) |
1437 ((l_uint8)(factor * ((sval >> 8) & 0xff) + 0.5) << 8) |
1469 dval = ((l_uint8)(factor * getLogBase2(sval >> 24, tab) + 0.5) << 24) |
1470 ((l_uint8)(factor * getLogBase2(((sval >> 16) & 0xff), tab) + 0.5)
1472 ((l_uint8)(factor * getLogBase2(((sval >> 8) & 0xff), tab) + 0.5)
1488 makeLogBase2Tab(
void)
1494 PROCNAME(
"makeLogBase2Tab");
1496 if ((tab = (l_float32 *)LEPT_CALLOC(256,
sizeof(l_float32))) == NULL)
1497 return (l_float32 *)ERROR_PTR(
"tab not made", procName, NULL);
1499 log2 = (l_float32)log((l_float32)2);
1500 for (i = 0; i < 256; i++)
1501 tab[i] = (l_float32)log((l_float32)i) / log2;
1515 getLogBase2(l_int32 val,
1518 PROCNAME(
"getLogBase2");
1521 return ERROR_INT(
"logtab not defined", procName, 0);
1525 else if (val < 0x10000)
1526 return 8.0 + logtab[val >> 8];
1527 else if (val < 0x1000000)
1528 return 16.0 + logtab[val >> 16];
1530 return 24.0 + logtab[val >> 24];
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
l_ok pixMultConstAccumulate(PIX *pixs, l_float32 factor, l_uint32 offset)
pixMultConstAccumulate()
l_uint32 linearScaleRGBVal(l_uint32 sval, l_float32 factor)
linearScaleRGBVal()
PIX * pixMaxDynamicRange(PIX *pixs, l_int32 type)
pixMaxDynamicRange()
PIX * pixFinalAccumulateThreshold(PIX *pixs, l_uint32 offset, l_uint32 threshold)
pixFinalAccumulateThreshold()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
#define SET_DATA_QBIT(pdata, n, val)
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * pixAddRGB(PIX *pixs1, PIX *pixs2)
pixAddRGB()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixMaxDynamicRangeRGB(PIX *pixs, l_int32 type)
pixMaxDynamicRangeRGB()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
PIX * pixSubtractGray(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixSubtractGray()
PIX * pixAbsDifference(PIX *pixs1, PIX *pixs2)
pixAbsDifference()
PIX * pixInitAccumulate(l_int32 w, l_int32 h, l_uint32 offset)
pixInitAccumulate()
l_ok pixAccumulate(PIX *pixd, PIX *pixs, l_int32 op)
pixAccumulate()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
#define GET_DATA_BYTE(pdata, n)
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixFinalAccumulate(PIX *pixs, l_uint32 offset, l_int32 depth)
pixFinalAccumulate()
PIX * pixThresholdToValue(PIX *pixd, PIX *pixs, l_int32 threshval, l_int32 setval)
pixThresholdToValue()
l_uint32 logScaleRGBVal(l_uint32 sval, l_float32 *tab, l_float32 factor)
logScaleRGBVal()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixAddGray(PIX *pixd, PIX *pixs1, PIX *pixs2)
pixAddGray()
#define GET_DATA_TWO_BYTES(pdata, n)
l_ok pixMultConstantGray(PIX *pixs, l_float32 val)
pixMultConstantGray()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
PIX * pixMinOrMax(PIX *pixd, PIX *pixs1, PIX *pixs2, l_int32 type)
pixMinOrMax()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_int32 pixSizesEqual(const PIX *pix1, const PIX *pix2)
pixSizesEqual()
#define SET_DATA_TWO_BYTES(pdata, n, val)
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
#define SET_DATA_BIT(pdata, n)
l_ok pixAddConstantGray(PIX *pixs, l_int32 val)
pixAddConstantGray()