105 #include "allheaders.h" 129 l_int32 w, h, d, i, j, val, wplt, wpld;
131 l_uint32 *datat, *linet;
132 l_float32 *datad, *lined;
136 PROCNAME(
"pixConvertToFPix");
139 return (
FPIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
142 if (pixGetColormap(pixs))
144 else if (pixGetDepth(pixs) == 32 && ncomps == 3)
149 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) {
151 return (
FPIX *)ERROR_PTR(
"invalid depth", procName, NULL);
156 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
159 wplt = pixGetWpl(pixt);
162 for (i = 0; i < h; i++) {
163 linet = datat + i * wplt;
164 lined = datad + i * wpld;
166 for (j = 0; j < w; j++) {
168 lined[j] = (l_float32)val;
171 for (j = 0; j < w; j++) {
173 lined[j] = (l_float32)val;
176 for (j = 0; j < w; j++) {
178 lined[j] = (l_float32)val;
181 for (j = 0; j < w; j++) {
183 lined[j] = (l_float32)val;
185 }
else if (d == 16) {
186 for (j = 0; j < w; j++) {
188 lined[j] = (l_float32)val;
191 for (j = 0; j < w; j++) {
193 lined[j] = (l_float32)uval;
222 l_int32 w, h, d, i, j, val, wplt, wpld;
224 l_uint32 *datat, *linet;
225 l_float64 *datad, *lined;
229 PROCNAME(
"pixConvertToDPix");
232 return (
DPIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
235 if (pixGetColormap(pixs))
237 else if (pixGetDepth(pixs) == 32 && ncomps == 3)
242 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) {
244 return (
DPIX *)ERROR_PTR(
"invalid depth", procName, NULL);
249 return (
DPIX *)ERROR_PTR(
"dpixd not made", procName, NULL);
252 wplt = pixGetWpl(pixt);
255 for (i = 0; i < h; i++) {
256 linet = datat + i * wplt;
257 lined = datad + i * wpld;
259 for (j = 0; j < w; j++) {
261 lined[j] = (l_float64)val;
264 for (j = 0; j < w; j++) {
266 lined[j] = (l_float64)val;
269 for (j = 0; j < w; j++) {
271 lined[j] = (l_float64)val;
274 for (j = 0; j < w; j++) {
276 lined[j] = (l_float64)val;
278 }
else if (d == 16) {
279 for (j = 0; j < w; j++) {
281 lined[j] = (l_float64)val;
284 for (j = 0; j < w; j++) {
286 lined[j] = (l_float64)uval;
325 l_int32 w, h, i, j, wpls, wpld;
326 l_uint32 vald, maxval;
328 l_float32 *datas, *lines;
329 l_uint32 *datad, *lined;
332 PROCNAME(
"fpixConvertToPix");
335 return (
PIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
337 return (
PIX *)ERROR_PTR(
"invalid negvals", procName, NULL);
338 if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32)
339 return (
PIX *)ERROR_PTR(
"outdepth not in {0,8,16,32}", procName, NULL);
348 for (i = 0; i < h && outdepth < 32; i++) {
349 lines = datas + i * wpls;
350 for (j = 0; j < w && outdepth < 32; j++) {
351 if (lines[j] > 65535.5)
353 else if (lines[j] > 255.5)
360 else if (outdepth == 16)
368 l_int32 overvals = 0;
369 for (i = 0; i < h; i++) {
370 lines = datas + i * wpls;
371 for (j = 0; j < w; j++) {
375 else if (val > maxval)
380 L_ERROR(
"Number of negative values: %d\n", procName, negs);
382 L_ERROR(
"Number of too-large values: %d\n", procName, overvals);
386 if ((pixd =
pixCreate(w, h, outdepth)) == NULL)
387 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
389 wpld = pixGetWpl(pixd);
390 for (i = 0; i < h; i++) {
391 lines = datas + i * wpls;
392 lined = datad + i * wpld;
393 for (j = 0; j < w; j++) {
396 vald = (l_uint32)(val + 0.5);
400 vald = (l_uint32)(-val + 0.5);
406 else if (outdepth == 16)
427 l_int32 i, j, w, h, wpls, wpld;
428 l_float32 factor, sval, maxval;
429 l_float32 *lines, *datas;
430 l_uint32 *lined, *datad;
433 PROCNAME(
"fpixDisplayMaxDynamicRange");
436 return (
PIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
443 for (i = 0; i < h; i++) {
444 lines = datas + i * wpls;
445 for (j = 0; j < w; j++) {
457 wpld = pixGetWpl(pixd);
458 factor = 255. / maxval;
459 for (i = 0; i < h; i++) {
460 lines = datas + i * wpls;
461 lined = datad + i * wpld;
462 for (j = 0; j < w; j++) {
464 if (sval < 0.0) sval = 0.0;
465 dval = (l_uint8)(factor * sval + 0.5);
483 l_int32 w, h, i, j, wpls, wpld;
485 l_float32 *datas, *lines;
486 l_float64 *datad, *lined;
489 PROCNAME(
"fpixConvertToDPix");
492 return (
DPIX *)ERROR_PTR(
"fpix not defined", procName, NULL);
496 return (
DPIX *)ERROR_PTR(
"dpix not made", procName, NULL);
502 for (i = 0; i < h; i++) {
503 lines = datas + i * wpls;
504 lined = datad + i * wpld;
505 for (j = 0; j < w; j++) {
544 l_int32 w, h, i, j, wpls, wpld, maxval;
547 l_float64 *datas, *lines;
548 l_uint32 *datad, *lined;
551 PROCNAME(
"dpixConvertToPix");
554 return (
PIX *)ERROR_PTR(
"dpixs not defined", procName, NULL);
556 return (
PIX *)ERROR_PTR(
"invalid negvals", procName, NULL);
557 if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32)
558 return (
PIX *)ERROR_PTR(
"outdepth not in {0,8,16,32}", procName, NULL);
567 for (i = 0; i < h && outdepth < 32; i++) {
568 lines = datas + i * wpls;
569 for (j = 0; j < w && outdepth < 32; j++) {
570 if (lines[j] > 65535.5)
572 else if (lines[j] > 255.5)
586 l_int32 overvals = 0;
587 for (i = 0; i < h; i++) {
588 lines = datas + i * wpls;
589 for (j = 0; j < w; j++) {
593 else if (val > maxval)
598 L_ERROR(
"Number of negative values: %d\n", procName, negs);
600 L_ERROR(
"Number of too-large values: %d\n", procName, overvals);
604 if ((pixd =
pixCreate(w, h, outdepth)) == NULL)
605 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
607 wpld = pixGetWpl(pixd);
608 for (i = 0; i < h; i++) {
609 lines = datas + i * wpls;
610 lined = datad + i * wpld;
611 for (j = 0; j < w; j++) {
614 vald = (l_uint32)(val + 0.5);
619 vald = (l_uint32)(-val + 0.5);
625 else if (outdepth == 16)
645 l_int32 w, h, i, j, wpls, wpld;
647 l_float32 *datad, *lined;
648 l_float64 *datas, *lines;
651 PROCNAME(
"dpixConvertToFPix");
654 return (
FPIX *)ERROR_PTR(
"dpix not defined", procName, NULL);
658 return (
FPIX *)ERROR_PTR(
"fpix not made", procName, NULL);
664 for (i = 0; i < h; i++) {
665 lines = datas + i * wpls;
666 lined = datad + i * wpld;
667 for (j = 0; j < w; j++) {
669 lined[j] = (l_float32)val;
696 l_int32 i, j, w, h, wpl, xminloc, yminloc;
697 l_float32 *data, *line;
700 PROCNAME(
"fpixGetMin");
702 if (!pminval && !pxminloc && !pyminloc)
703 return ERROR_INT(
"no return val requested", procName, 1);
704 if (pminval) *pminval = 0.0;
705 if (pxminloc) *pxminloc = 0;
706 if (pyminloc) *pyminloc = 0;
708 return ERROR_INT(
"fpix not defined", procName, 1);
716 for (i = 0; i < h; i++) {
717 line = data + i * wpl;
718 for (j = 0; j < w; j++) {
719 if (line[j] < minval) {
727 if (pminval) *pminval = minval;
728 if (pxminloc) *pxminloc = xminloc;
729 if (pyminloc) *pyminloc = yminloc;
749 l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc;
750 l_float32 *data, *line;
753 PROCNAME(
"fpixGetMax");
755 if (!pmaxval && !pxmaxloc && !pymaxloc)
756 return ERROR_INT(
"no return val requested", procName, 1);
757 if (pmaxval) *pmaxval = 0.0;
758 if (pxmaxloc) *pxmaxloc = 0;
759 if (pymaxloc) *pymaxloc = 0;
761 return ERROR_INT(
"fpix not defined", procName, 1);
769 for (i = 0; i < h; i++) {
770 line = data + i * wpl;
771 for (j = 0; j < w; j++) {
772 if (line[j] > maxval) {
780 if (pmaxval) *pmaxval = maxval;
781 if (pxmaxloc) *pxmaxloc = xmaxloc;
782 if (pymaxloc) *pymaxloc = ymaxloc;
802 l_int32 i, j, w, h, wpl, xminloc, yminloc;
803 l_float64 *data, *line;
806 PROCNAME(
"dpixGetMin");
808 if (!pminval && !pxminloc && !pyminloc)
809 return ERROR_INT(
"no return val requested", procName, 1);
810 if (pminval) *pminval = 0.0;
811 if (pxminloc) *pxminloc = 0;
812 if (pyminloc) *pyminloc = 0;
814 return ERROR_INT(
"dpix not defined", procName, 1);
822 for (i = 0; i < h; i++) {
823 line = data + i * wpl;
824 for (j = 0; j < w; j++) {
825 if (line[j] < minval) {
833 if (pminval) *pminval = minval;
834 if (pxminloc) *pxminloc = xminloc;
835 if (pyminloc) *pyminloc = yminloc;
855 l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc;
856 l_float64 *data, *line;
859 PROCNAME(
"dpixGetMax");
861 if (!pmaxval && !pxmaxloc && !pymaxloc)
862 return ERROR_INT(
"no return val requested", procName, 1);
863 if (pmaxval) *pmaxval = 0.0;
864 if (pxmaxloc) *pxmaxloc = 0;
865 if (pymaxloc) *pymaxloc = 0;
867 return ERROR_INT(
"dpix not defined", procName, 1);
875 for (i = 0; i < h; i++) {
876 line = data + i * wpl;
877 for (j = 0; j < w; j++) {
878 if (line[j] > maxval) {
886 if (pmaxval) *pmaxval = maxval;
887 if (pxmaxloc) *pxmaxloc = xmaxloc;
888 if (pymaxloc) *pymaxloc = ymaxloc;
920 l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld;
921 l_float32 val0, val1, val2, val3;
922 l_float32 *datas, *datad, *lines, *lined, *fract;
925 PROCNAME(
"fpixScaleByInteger");
928 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
931 wd = factor * (ws - 1) + 1;
932 hd = factor * (hs - 1) + 1;
938 fract = (l_float32 *)LEPT_CALLOC(factor,
sizeof(l_float32));
939 for (i = 0; i < factor; i++)
940 fract[i] = i / (l_float32)factor;
941 for (i = 0; i < hs - 1; i++) {
942 lines = datas + i * wpls;
943 for (j = 0; j < ws - 1; j++) {
946 val2 = lines[wpls + j];
947 val3 = lines[wpls + j + 1];
948 for (k = 0; k < factor; k++) {
949 lined = datad + (i * factor + k) * wpld;
950 for (m = 0; m < factor; m++) {
951 lined[j * factor + m] =
952 val0 * (1.0 - fract[m]) * (1.0 - fract[k]) +
953 val1 * fract[m] * (1.0 - fract[k]) +
954 val2 * (1.0 - fract[m]) * fract[k] +
955 val3 * fract[m] * fract[k];
962 for (i = 0; i < hs - 1; i++) {
963 lines = datas + i * wpls;
964 val0 = lines[ws - 1];
965 val1 = lines[wpls + ws - 1];
966 for (k = 0; k < factor; k++) {
967 lined = datad + (i * factor + k) * wpld;
968 lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k];
973 lines = datas + (hs - 1) * wpls;
974 lined = datad + (hd - 1) * wpld;
975 for (j = 0; j < ws - 1; j++) {
978 for (m = 0; m < factor; m++)
979 lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m];
980 lined[wd - 1] = lines[ws - 1];
1012 l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld;
1013 l_float64 val0, val1, val2, val3;
1014 l_float64 *datas, *datad, *lines, *lined, *fract;
1017 PROCNAME(
"dpixScaleByInteger");
1020 return (
DPIX *)ERROR_PTR(
"dpixs not defined", procName, NULL);
1023 wd = factor * (ws - 1) + 1;
1024 hd = factor * (hs - 1) + 1;
1030 fract = (l_float64 *)LEPT_CALLOC(factor,
sizeof(l_float64));
1031 for (i = 0; i < factor; i++)
1032 fract[i] = i / (l_float64)factor;
1033 for (i = 0; i < hs - 1; i++) {
1034 lines = datas + i * wpls;
1035 for (j = 0; j < ws - 1; j++) {
1037 val1 = lines[j + 1];
1038 val2 = lines[wpls + j];
1039 val3 = lines[wpls + j + 1];
1040 for (k = 0; k < factor; k++) {
1041 lined = datad + (i * factor + k) * wpld;
1042 for (m = 0; m < factor; m++) {
1043 lined[j * factor + m] =
1044 val0 * (1.0 - fract[m]) * (1.0 - fract[k]) +
1045 val1 * fract[m] * (1.0 - fract[k]) +
1046 val2 * (1.0 - fract[m]) * fract[k] +
1047 val3 * fract[m] * fract[k];
1054 for (i = 0; i < hs - 1; i++) {
1055 lines = datas + i * wpls;
1056 val0 = lines[ws - 1];
1057 val1 = lines[wpls + ws - 1];
1058 for (k = 0; k < factor; k++) {
1059 lined = datad + (i * factor + k) * wpld;
1060 lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k];
1065 lines = datas + (hs - 1) * wpls;
1066 lined = datad + (hd - 1) * wpld;
1067 for (j = 0; j < ws - 1; j++) {
1069 val1 = lines[j + 1];
1070 for (m = 0; m < factor; m++)
1071 lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m];
1072 lined[wd - 1] = lines[ws - 1];
1112 l_int32 i, j, ws, hs, w, h, wpls, wpld;
1113 l_float32 *datas, *datad, *lines, *lined;
1115 PROCNAME(
"fpixLinearCombination");
1118 return (
FPIX *)ERROR_PTR(
"fpixs1 not defined", procName, fpixd);
1120 return (
FPIX *)ERROR_PTR(
"fpixs2 not defined", procName, fpixd);
1121 if (fpixs1 == fpixs2)
1122 return (
FPIX *)ERROR_PTR(
"fpixs1 == fpixs2", procName, fpixd);
1123 if (fpixs2 == fpixd)
1124 return (
FPIX *)ERROR_PTR(
"fpixs2 == fpixd", procName, fpixd);
1126 if (fpixs1 != fpixd)
1137 for (i = 0; i < h; i++) {
1138 lines = datas + i * wpls;
1139 lined = datad + i * wpld;
1140 for (j = 0; j < w; j++)
1141 lined[j] = a * lined[j] + b * lines[j];
1169 l_int32 i, j, w, h, wpl;
1170 l_float32 *line, *data;
1172 PROCNAME(
"fpixAddMultConstant");
1175 return ERROR_INT(
"fpix not defined", procName, 1);
1177 if (addc == 0.0 && multc == 1.0)
1183 for (i = 0; i < h; i++) {
1184 line = data + i * wpl;
1186 for (j = 0; j < w; j++)
1188 }
else if (multc == 1.0) {
1189 for (j = 0; j < w; j++)
1192 for (j = 0; j < w; j++) {
1193 line[j] = multc * line[j] + addc;
1231 l_int32 i, j, ws, hs, w, h, wpls, wpld;
1232 l_float64 *datas, *datad, *lines, *lined;
1234 PROCNAME(
"dpixLinearCombination");
1237 return (
DPIX *)ERROR_PTR(
"dpixs1 not defined", procName, dpixd);
1239 return (
DPIX *)ERROR_PTR(
"dpixs2 not defined", procName, dpixd);
1240 if (dpixs1 == dpixs2)
1241 return (
DPIX *)ERROR_PTR(
"dpixs1 == dpixs2", procName, dpixd);
1242 if (dpixs2 == dpixd)
1243 return (
DPIX *)ERROR_PTR(
"dpixs2 == dpixd", procName, dpixd);
1245 if (dpixs1 != dpixd)
1256 for (i = 0; i < h; i++) {
1257 lines = datas + i * wpls;
1258 lined = datad + i * wpld;
1259 for (j = 0; j < w; j++)
1260 lined[j] = a * lined[j] + b * lines[j];
1288 l_int32 i, j, w, h, wpl;
1289 l_float64 *line, *data;
1291 PROCNAME(
"dpixAddMultConstant");
1294 return ERROR_INT(
"dpix not defined", procName, 1);
1296 if (addc == 0.0 && multc == 1.0)
1302 for (i = 0; i < h; i++) {
1303 line = data + i * wpl;
1305 for (j = 0; j < w; j++)
1307 }
else if (multc == 1.0) {
1308 for (j = 0; j < w; j++)
1311 for (j = 0; j < w; j++)
1312 line[j] = multc * line[j] + addc;
1335 l_float32 *data, *line;
1337 PROCNAME(
"fpixSetAllArbitrary");
1340 return ERROR_INT(
"fpix not defined", procName, 1);
1344 for (i = 0; i < h; i++) {
1345 line = data + i * w;
1346 for (j = 0; j < w; j++)
1347 *(line + j) = inval;
1366 l_float64 *data, *line;
1368 PROCNAME(
"dpixSetAllArbitrary");
1371 return ERROR_INT(
"dpix not defined", procName, 1);
1375 for (i = 0; i < h; i++) {
1376 line = data + i * w;
1377 for (j = 0; j < w; j++)
1378 *(line + j) = inval;
1407 l_int32 ws, hs, wd, hd;
1410 PROCNAME(
"fpixAddBorder");
1413 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1415 if (left <= 0 && right <= 0 && top <= 0 && bot <= 0)
1418 wd = ws + left + right;
1419 hd = hs + top + bot;
1421 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1443 l_int32 ws, hs, wd, hd;
1446 PROCNAME(
"fpixRemoveBorder");
1449 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1451 if (left <= 0 && right <= 0 && top <= 0 && bot <= 0)
1454 wd = ws - left - right;
1455 hd = hs - top - bot;
1456 if (wd <= 0 || hd <= 0)
1457 return (
FPIX *)ERROR_PTR(
"width & height not both > 0", procName, NULL);
1459 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1490 PROCNAME(
"fpixAddMirroredBorder");
1493 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1497 for (j = 0; j < left; j++)
1499 fpixd, left + j, top);
1500 for (j = 0; j < right; j++)
1502 fpixd, left + w - 1 - j, top);
1503 for (i = 0; i < top; i++)
1504 fpixRasterop(fpixd, 0, top - 1 - i, left + w + right, 1,
1506 for (i = 0; i < bot; i++)
1507 fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1,
1508 fpixd, 0, top + h - 1 - i);
1537 PROCNAME(
"fpixAddContinuedBorder");
1540 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1544 for (j = 0; j < left; j++)
1546 for (j = 0; j < right; j++)
1547 fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1, top);
1548 for (i = 0; i < top; i++)
1549 fpixRasterop(fpixd, 0, i, left + w + right, 1, fpixd, 0, top);
1550 for (i = 0; i < bot; i++)
1551 fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1,
1552 fpixd, 0, top + h - 1);
1579 l_int32 i, j, w, h, fullw, fullh;
1580 l_float32 val1, val2, del;
1583 PROCNAME(
"fpixAddSlopeBorder");
1586 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1592 for (i = top; i < top + h; i++) {
1596 for (j = 0; j < left; j++)
1601 fullw = left + w + right;
1602 for (i = top; i < top + h; i++) {
1606 for (j = left + w; j < fullw; j++)
1607 fpixSetPixel(fpixd, j, i, val1 + del * (j - left - w + 1));
1611 for (j = 0; j < fullw; j++) {
1615 for (i = 0; i < top; i++)
1620 fullh = top + h + bot;
1621 for (j = 0; j < fullw; j++) {
1625 for (i = top + h; i < fullh; i++)
1626 fpixSetPixel(fpixd, j, i, val1 + del * (i - top - h + 1));
1671 l_int32 fsw, fsh, fdw, fdh, dhangw, shangw, dhangh, shangh;
1672 l_int32 i, j, wpls, wpld;
1673 l_float32 *datas, *datad, *lines, *lined;
1675 PROCNAME(
"fpixRasterop");
1678 return ERROR_INT(
"fpixs not defined", procName, 1);
1680 return ERROR_INT(
"fpixd not defined", procName, 1);
1699 dhangw = dx + dw - fdw;
1702 shangw = sx + dw - fsw;
1717 dhangh = dy + dh - fdh;
1720 shangh = sy + dh - fsh;
1725 if ((dw <= 0) || (dh <= 0))
1735 datas += sy * wpls + sx;
1736 datad += dy * wpld + dx;
1737 for (i = 0; i < dh; i++) {
1738 lines = datas + i * wpls;
1739 lined = datad + i * wpld;
1740 for (j = 0; j < dw; j++) {
1765 PROCNAME(
"fpixRotateOrth");
1768 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1769 if (quads < 0 || quads > 3)
1770 return (
FPIX *)ERROR_PTR(
"quads not in {0,1,2,3}", procName, NULL);
1774 else if (quads == 1)
1776 else if (quads == 2)
1811 PROCNAME(
"fpixRotate180");
1814 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1817 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1818 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1844 l_int32 i, j, wd, hd, wpls, wpld;
1845 l_float32 *datas, *datad, *lines, *lined;
1848 PROCNAME(
"fpixRotate90");
1851 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1852 if (direction != 1 && direction != -1)
1853 return (
FPIX *)ERROR_PTR(
"invalid direction", procName, NULL);
1857 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1864 if (direction == 1) {
1865 for (i = 0; i < hd; i++) {
1866 lined = datad + i * wpld;
1867 lines = datas + (wd - 1) * wpls;
1868 for (j = 0; j < wd; j++) {
1869 lined[j] = lines[i];
1874 for (i = 0; i < hd; i++) {
1875 lined = datad + i * wpld;
1877 for (j = 0; j < wd; j++) {
1878 lined[j] = lines[hd - 1 - i];
1917 l_int32 i, j, w, h, wpl, bpl;
1918 l_float32 *line, *data, *buffer;
1920 PROCNAME(
"fpixFlipLR");
1923 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1928 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1929 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1934 if ((buffer = (l_float32 *)LEPT_CALLOC(wpl,
sizeof(l_float32))) == NULL) {
1936 return (
FPIX *)ERROR_PTR(
"buffer not made", procName, NULL);
1938 for (i = 0; i < h; i++) {
1939 line = data + i * wpl;
1940 memcpy(buffer, line, bpl);
1941 for (j = 0; j < w; j++)
1942 line[j] = buffer[w - 1 - j];
1978 l_int32 i, k, h, h2, wpl, bpl;
1979 l_float32 *linet, *lineb, *data, *buffer;
1981 PROCNAME(
"fpixFlipTB");
1984 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1987 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1988 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1993 if ((buffer = (l_float32 *)LEPT_CALLOC(wpl,
sizeof(l_float32))) == NULL) {
1995 return (
FPIX *)ERROR_PTR(
"buffer not made", procName, NULL);
1999 for (i = 0, k = h - 1; i < h2; i++, k--) {
2000 linet = data + i * wpl;
2001 lineb = data + k * wpl;
2002 memcpy(buffer, linet, bpl);
2003 memcpy(linet, lineb, bpl);
2004 memcpy(lineb, buffer, bpl);
2045 FPIX *fpixs2, *fpixd, *fpixd2;
2047 PROCNAME(
"fpixAffinePta");
2050 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2052 return (
FPIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
2054 return (
FPIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
2098 l_int32 i, j, w, h, wpld;
2100 l_float32 *datas, *datad, *lined;
2104 PROCNAME(
"fpixAffine");
2107 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2110 return (
FPIX *)ERROR_PTR(
"vc not defined", procName, NULL);
2119 for (i = 0; i < h; i++) {
2120 lined = datad + i * wpld;
2121 for (j = 0; j < w; j++) {
2164 FPIX *fpixs2, *fpixd, *fpixd2;
2166 PROCNAME(
"fpixProjectivePta");
2169 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2171 return (
FPIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
2173 return (
FPIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
2217 l_int32 i, j, w, h, wpld;
2219 l_float32 *datas, *datad, *lined;
2223 PROCNAME(
"fpixProjective");
2226 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2229 return (
FPIX *)ERROR_PTR(
"vc not defined", procName, NULL);
2238 for (i = 0; i < h; i++) {
2239 lined = datad + i * wpld;
2240 for (j = 0; j < w; j++) {
2279 l_int32 xpm, ypm, xp, yp, xf, yf;
2280 l_float32 v00, v01, v10, v11;
2283 PROCNAME(
"linearInterpolatePixelFloat");
2286 return ERROR_INT(
"&val not defined", procName, 1);
2289 return ERROR_INT(
"datas not defined", procName, 1);
2292 if (x < 0.0 || y < 0.0 || x > w - 2.0 || y > h - 2.0)
2295 xpm = (l_int32)(16.0 * x + 0.5);
2296 ypm = (l_int32)(16.0 * y + 0.5);
2303 if (xf < 0 || yf < 0)
2304 fprintf(stderr,
"xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf);
2308 lines = datas + yp * w;
2309 v00 = (16.0 - xf) * (16.0 - yf) * (*(lines + xp));
2310 v10 = xf * (16.0 - yf) * (*(lines + xp + 1));
2311 v01 = (16.0 - xf) * yf * (*(lines + w + xp));
2312 v11 = (l_float32)(xf) * yf * (*(lines + w + xp + 1));
2313 *pval = (v00 + v01 + v10 + v11) / 256.0;
2338 l_int32 i, j, w, h, wpls, wpld;
2339 l_float32 *datas, *lines;
2340 l_uint32 *datad, *lined;
2343 PROCNAME(
"fpixThresholdToPix");
2346 return (
PIX *)ERROR_PTR(
"fpix not defined", procName, NULL);
2353 wpld = pixGetWpl(pixd);
2354 for (i = 0; i < h; i++) {
2355 lines = datas + i * wpls;
2356 lined = datad + i * wpld;
2357 for (j = 0; j < w; j++) {
2358 if (lines[j] <= thresh)
2401 l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, zerodenom, onedenom;
2402 l_float32 fnum, fdenom;
2403 l_uint32 *datas, *lines;
2404 l_float32 *datad, *lined, *recip;
2407 PROCNAME(
"pixComponentFunction");
2409 if (!pix || pixGetDepth(pix) != 32)
2410 return (
FPIX *)ERROR_PTR(
"pix undefined or not 32 bpp", procName, NULL);
2414 wpls = pixGetWpl(pix);
2418 zerodenom = (rdenom == 0.0 && gdenom == 0.0 && bdenom == 0.0) ? 1: 0;
2419 onedenom = ((rdenom == 1.0 && gdenom == 0.0 && bdenom == 0.0) ||
2420 (rdenom == 0.0 && gdenom == 1.0 && bdenom == 0.0) ||
2421 (rdenom == 0.0 && gdenom == 0.0 && bdenom == 1.0)) ? 1 : 0;
2424 recip = (l_float32 *)LEPT_CALLOC(256,
sizeof(l_float32));
2426 for (i = 1; i < 256; i++)
2427 recip[i] = 1.0 / (l_float32)i;
2429 for (i = 0; i < h; i++) {
2430 lines = datas + i * wpls;
2431 lined = datad + i * wpld;
2433 for (j = 0; j < w; j++) {
2435 lined[j] = rnum * rval + gnum * gval + bnum * bval;
2437 }
else if (onedenom && rdenom == 1.0) {
2438 for (j = 0; j < w; j++) {
2441 = recip[rval] * (rnum * rval + gnum * gval + bnum * bval);
2443 }
else if (onedenom && gdenom == 1.0) {
2444 for (j = 0; j < w; j++) {
2447 = recip[gval] * (rnum * rval + gnum * gval + bnum * bval);
2449 }
else if (onedenom && bdenom == 1.0) {
2450 for (j = 0; j < w; j++) {
2453 = recip[bval] * (rnum * rval + gnum * gval + bnum * bval);
2456 for (j = 0; j < w; j++) {
2458 fnum = rnum * rval + gnum * gval + bnum * bval;
2459 fdenom = rdenom * rval + gdenom * gval + bdenom * bval;
2460 lined[j] = (fdenom == 0) ? 256.0 * fnum : fnum / fdenom;
l_ok fpixGetMax(FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc)
fpixGetMax()
l_ok fpixCopyResolution(FPIX *fpixd, FPIX *fpixs)
fpixCopyResolution()
DPIX * pixConvertToDPix(PIX *pixs, l_int32 ncomps)
pixConvertToDPix()
PIX * pixConvertRGBToLuminance(PIX *pixs)
pixConvertRGBToLuminance()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
l_ok dpixGetMax(DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc)
dpixGetMax()
PIX * fpixThresholdToPix(FPIX *fpix, l_float32 thresh)
fpixThresholdToPix()
l_ok fpixGetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval)
fpixGetPixel()
DPIX * dpixCreate(l_int32 width, l_int32 height)
dpixCreate()
DPIX * dpixScaleByInteger(DPIX *dpixs, l_int32 factor)
dpixScaleByInteger()
l_ok affineXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp)
affineXformPt()
l_float64 * dpixGetData(DPIX *dpix)
dpixGetData()
FPIX * fpixAddContinuedBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixAddContinuedBorder()
PIX * dpixConvertToPix(DPIX *dpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag)
dpixConvertToPix()
FPIX * fpixAddMirroredBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixAddMirroredBorder()
l_int32 dpixGetWpl(DPIX *dpix)
dpixGetWpl()
DPIX * fpixConvertToDPix(FPIX *fpix)
fpixConvertToDPix()
l_ok dpixSetAllArbitrary(DPIX *dpix, l_float64 inval)
dpixSetAllArbitrary()
#define GET_DATA_FOUR_BYTES(pdata, n)
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
FPIX * fpixProjectivePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval)
fpixProjectivePta()
l_ok fpixAddMultConstant(FPIX *fpix, l_float32 addc, l_float32 multc)
fpixAddMultConstant()
l_ok fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph)
fpixGetDimensions()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
PIX * fpixConvertToPix(FPIX *fpixs, l_int32 outdepth, l_int32 negvals, l_int32 errorflag)
fpixConvertToPix()
DPIX * dpixCopy(DPIX *dpixd, DPIX *dpixs)
dpixCopy()
#define GET_DATA_BIT(pdata, n)
l_ok fpixRasterop(FPIX *fpixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, FPIX *fpixs, l_int32 sx, l_int32 sy)
fpixRasterop()
l_ok fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
FPIX * fpixAffinePta(FPIX *fpixs, PTA *ptad, PTA *ptas, l_int32 border, l_float32 inval)
fpixAffinePta()
PIX * fpixDisplayMaxDynamicRange(FPIX *fpixs)
fpixDisplayMaxDynamicRange()
FPIX * fpixAddSlopeBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixAddSlopeBorder()
FPIX * fpixAffine(FPIX *fpixs, l_float32 *vc, l_float32 inval)
fpixAffine()
l_ok fpixGetMin(FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc)
fpixGetMin()
FPIX * pixComponentFunction(PIX *pix, l_float32 rnum, l_float32 gnum, l_float32 bnum, l_float32 rdenom, l_float32 gdenom, l_float32 bdenom)
pixComponentFunction()
FPIX * fpixLinearCombination(FPIX *fpixd, FPIX *fpixs1, FPIX *fpixs2, l_float32 a, l_float32 b)
fpixLinearCombination()
PTA * ptaClone(PTA *pta)
ptaClone()
FPIX * fpixFlipTB(FPIX *fpixd, FPIX *fpixs)
fpixFlipTB()
DPIX * dpixLinearCombination(DPIX *dpixd, DPIX *dpixs1, DPIX *dpixs2, l_float32 a, l_float32 b)
dpixLinearCombination()
l_ok projectiveXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp)
projectiveXformPt()
FPIX * fpixRotateOrth(FPIX *fpixs, l_int32 quads)
fpixRotateOrth()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
l_ok dpixGetMin(DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc)
dpixGetMin()
l_ok dpixAddMultConstant(DPIX *dpix, l_float64 addc, l_float64 multc)
dpixAddMultConstant()
#define GET_DATA_BYTE(pdata, n)
l_int32 fpixGetWpl(FPIX *fpix)
fpixGetWpl()
FPIX * fpixClone(FPIX *fpix)
fpixClone()
PIX * pixClone(PIX *pixs)
pixClone()
FPIX * fpixRotate90(FPIX *fpixs, l_int32 direction)
fpixRotate90()
l_ok getAffineXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc)
getAffineXformCoeffs()
void pixDestroy(PIX **ppix)
pixDestroy()
FPIX * fpixScaleByInteger(FPIX *fpixs, l_int32 factor)
fpixScaleByInteger()
l_float32 * fpixGetData(FPIX *fpix)
fpixGetData()
FPIX * fpixRotate180(FPIX *fpixd, FPIX *fpixs)
fpixRotate180()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
FPIX * pixConvertToFPix(PIX *pixs, l_int32 ncomps)
pixConvertToFPix()
FPIX * dpixConvertToFPix(DPIX *dpix)
dpixConvertToFPix()
l_ok getProjectiveXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc)
getProjectiveXformCoeffs()
l_ok dpixGetDimensions(DPIX *dpix, l_int32 *pw, l_int32 *ph)
dpixGetDimensions()
#define SET_DATA_FOUR_BYTES(pdata, n, val)
FPIX * fpixCreateTemplate(FPIX *fpixs)
fpixCreateTemplate()
FPIX * fpixCreate(l_int32 width, l_int32 height)
fpixCreate()
#define GET_DATA_TWO_BYTES(pdata, n)
#define GET_DATA_DIBIT(pdata, n)
FPIX * fpixFlipLR(FPIX *fpixd, FPIX *fpixs)
pixFlipLR()
void ptaDestroy(PTA **ppta)
ptaDestroy()
FPIX * fpixRemoveBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixRemoveBorder()
FPIX * fpixCopy(FPIX *fpixd, FPIX *fpixs)
fpixCopy()
FPIX * fpixAddBorder(FPIX *fpixs, l_int32 left, l_int32 right, l_int32 top, l_int32 bot)
fpixAddBorder()
PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
ptaTransform()
l_ok fpixSetAllArbitrary(FPIX *fpix, l_float32 inval)
fpixSetAllArbitrary()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
#define SET_DATA_TWO_BYTES(pdata, n, val)
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
l_ok linearInterpolatePixelFloat(l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval)
linearInterpolatePixelFloat()
FPIX * fpixProjective(FPIX *fpixs, l_float32 *vc, l_float32 inval)
fpixProjective()
#define SET_DATA_BIT(pdata, n)