103 #include "allheaders.h" 127 l_int32 w, h, d, i, j, val, wplt, wpld;
129 l_uint32 *datat, *linet;
130 l_float32 *datad, *lined;
134 PROCNAME(
"pixConvertToFPix");
137 return (
FPIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
140 if (pixGetColormap(pixs))
142 else if (pixGetDepth(pixs) == 32 && ncomps == 3)
147 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) {
149 return (
FPIX *)ERROR_PTR(
"invalid depth", procName, NULL);
154 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
157 wplt = pixGetWpl(pixt);
160 for (i = 0; i < h; i++) {
161 linet = datat + i * wplt;
162 lined = datad + i * wpld;
164 for (j = 0; j < w; j++) {
166 lined[j] = (l_float32)val;
169 for (j = 0; j < w; j++) {
171 lined[j] = (l_float32)val;
174 for (j = 0; j < w; j++) {
176 lined[j] = (l_float32)val;
179 for (j = 0; j < w; j++) {
181 lined[j] = (l_float32)val;
183 }
else if (d == 16) {
184 for (j = 0; j < w; j++) {
186 lined[j] = (l_float32)val;
189 for (j = 0; j < w; j++) {
191 lined[j] = (l_float32)uval;
220 l_int32 w, h, d, i, j, val, wplt, wpld;
222 l_uint32 *datat, *linet;
223 l_float64 *datad, *lined;
227 PROCNAME(
"pixConvertToDPix");
230 return (
DPIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
233 if (pixGetColormap(pixs))
235 else if (pixGetDepth(pixs) == 32 && ncomps == 3)
240 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 16 && d != 32) {
242 return (
DPIX *)ERROR_PTR(
"invalid depth", procName, NULL);
247 return (
DPIX *)ERROR_PTR(
"dpixd not made", procName, NULL);
250 wplt = pixGetWpl(pixt);
253 for (i = 0; i < h; i++) {
254 linet = datat + i * wplt;
255 lined = datad + i * wpld;
257 for (j = 0; j < w; j++) {
259 lined[j] = (l_float64)val;
262 for (j = 0; j < w; j++) {
264 lined[j] = (l_float64)val;
267 for (j = 0; j < w; j++) {
269 lined[j] = (l_float64)val;
272 for (j = 0; j < w; j++) {
274 lined[j] = (l_float64)val;
276 }
else if (d == 16) {
277 for (j = 0; j < w; j++) {
279 lined[j] = (l_float64)val;
282 for (j = 0; j < w; j++) {
284 lined[j] = (l_float64)uval;
323 l_int32 w, h, i, j, wpls, wpld;
324 l_uint32 vald, maxval;
326 l_float32 *datas, *lines;
327 l_uint32 *datad, *lined;
330 PROCNAME(
"fpixConvertToPix");
333 return (
PIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
335 return (
PIX *)ERROR_PTR(
"invalid negvals", procName, NULL);
336 if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32)
337 return (
PIX *)ERROR_PTR(
"outdepth not in {0,8,16,32}", procName, NULL);
346 for (i = 0; i < h && outdepth < 32; i++) {
347 lines = datas + i * wpls;
348 for (j = 0; j < w && outdepth < 32; j++) {
349 if (lines[j] > 65535.5)
351 else if (lines[j] > 255.5)
358 else if (outdepth == 16)
366 l_int32 overvals = 0;
367 for (i = 0; i < h; i++) {
368 lines = datas + i * wpls;
369 for (j = 0; j < w; j++) {
373 else if (val > maxval)
378 L_ERROR(
"Number of negative values: %d\n", procName, negs);
380 L_ERROR(
"Number of too-large values: %d\n", procName, overvals);
384 if ((pixd =
pixCreate(w, h, outdepth)) == NULL)
385 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
387 wpld = pixGetWpl(pixd);
388 for (i = 0; i < h; i++) {
389 lines = datas + i * wpls;
390 lined = datad + i * wpld;
391 for (j = 0; j < w; j++) {
394 vald = (l_uint32)(val + 0.5);
398 vald = (l_uint32)(-val + 0.5);
404 else if (outdepth == 16)
425 l_int32 i, j, w, h, wpls, wpld;
426 l_float32 factor, sval, maxval;
427 l_float32 *lines, *datas;
428 l_uint32 *lined, *datad;
431 PROCNAME(
"fpixDisplayMaxDynamicRange");
434 return (
PIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
441 for (i = 0; i < h; i++) {
442 lines = datas + i * wpls;
443 for (j = 0; j < w; j++) {
455 wpld = pixGetWpl(pixd);
456 factor = 255. / maxval;
457 for (i = 0; i < h; i++) {
458 lines = datas + i * wpls;
459 lined = datad + i * wpld;
460 for (j = 0; j < w; j++) {
462 if (sval < 0.0) sval = 0.0;
463 dval = (l_uint8)(factor * sval + 0.5);
481 l_int32 w, h, i, j, wpls, wpld;
483 l_float32 *datas, *lines;
484 l_float64 *datad, *lined;
487 PROCNAME(
"fpixConvertToDPix");
490 return (
DPIX *)ERROR_PTR(
"fpix not defined", procName, NULL);
494 return (
DPIX *)ERROR_PTR(
"dpix not made", procName, NULL);
500 for (i = 0; i < h; i++) {
501 lines = datas + i * wpls;
502 lined = datad + i * wpld;
503 for (j = 0; j < w; j++) {
542 l_int32 w, h, i, j, wpls, wpld, maxval;
545 l_float64 *datas, *lines;
546 l_uint32 *datad, *lined;
549 PROCNAME(
"dpixConvertToPix");
552 return (
PIX *)ERROR_PTR(
"dpixs not defined", procName, NULL);
554 return (
PIX *)ERROR_PTR(
"invalid negvals", procName, NULL);
555 if (outdepth != 0 && outdepth != 8 && outdepth != 16 && outdepth != 32)
556 return (
PIX *)ERROR_PTR(
"outdepth not in {0,8,16,32}", procName, NULL);
565 for (i = 0; i < h && outdepth < 32; i++) {
566 lines = datas + i * wpls;
567 for (j = 0; j < w && outdepth < 32; j++) {
568 if (lines[j] > 65535.5)
570 else if (lines[j] > 255.5)
584 l_int32 overvals = 0;
585 for (i = 0; i < h; i++) {
586 lines = datas + i * wpls;
587 for (j = 0; j < w; j++) {
591 else if (val > maxval)
596 L_ERROR(
"Number of negative values: %d\n", procName, negs);
598 L_ERROR(
"Number of too-large values: %d\n", procName, overvals);
602 if ((pixd =
pixCreate(w, h, outdepth)) == NULL)
603 return (
PIX *)ERROR_PTR(
"pixd not made", procName, NULL);
605 wpld = pixGetWpl(pixd);
606 for (i = 0; i < h; i++) {
607 lines = datas + i * wpls;
608 lined = datad + i * wpld;
609 for (j = 0; j < w; j++) {
612 vald = (l_uint32)(val + 0.5);
617 vald = (l_uint32)(-val + 0.5);
623 else if (outdepth == 16)
643 l_int32 w, h, i, j, wpls, wpld;
645 l_float32 *datad, *lined;
646 l_float64 *datas, *lines;
649 PROCNAME(
"dpixConvertToFPix");
652 return (
FPIX *)ERROR_PTR(
"dpix not defined", procName, NULL);
656 return (
FPIX *)ERROR_PTR(
"fpix not made", procName, NULL);
662 for (i = 0; i < h; i++) {
663 lines = datas + i * wpls;
664 lined = datad + i * wpld;
665 for (j = 0; j < w; j++) {
667 lined[j] = (l_float32)val;
694 l_int32 i, j, w, h, wpl, xminloc, yminloc;
695 l_float32 *data, *line;
698 PROCNAME(
"fpixGetMin");
700 if (!pminval && !pxminloc && !pyminloc)
701 return ERROR_INT(
"no return val requested", procName, 1);
702 if (pminval) *pminval = 0.0;
703 if (pxminloc) *pxminloc = 0;
704 if (pyminloc) *pyminloc = 0;
706 return ERROR_INT(
"fpix not defined", procName, 1);
714 for (i = 0; i < h; i++) {
715 line = data + i * wpl;
716 for (j = 0; j < w; j++) {
717 if (line[j] < minval) {
725 if (pminval) *pminval = minval;
726 if (pxminloc) *pxminloc = xminloc;
727 if (pyminloc) *pyminloc = yminloc;
747 l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc;
748 l_float32 *data, *line;
751 PROCNAME(
"fpixGetMax");
753 if (!pmaxval && !pxmaxloc && !pymaxloc)
754 return ERROR_INT(
"no return val requested", procName, 1);
755 if (pmaxval) *pmaxval = 0.0;
756 if (pxmaxloc) *pxmaxloc = 0;
757 if (pymaxloc) *pymaxloc = 0;
759 return ERROR_INT(
"fpix not defined", procName, 1);
767 for (i = 0; i < h; i++) {
768 line = data + i * wpl;
769 for (j = 0; j < w; j++) {
770 if (line[j] > maxval) {
778 if (pmaxval) *pmaxval = maxval;
779 if (pxmaxloc) *pxmaxloc = xmaxloc;
780 if (pymaxloc) *pymaxloc = ymaxloc;
800 l_int32 i, j, w, h, wpl, xminloc, yminloc;
801 l_float64 *data, *line;
804 PROCNAME(
"dpixGetMin");
806 if (!pminval && !pxminloc && !pyminloc)
807 return ERROR_INT(
"no return val requested", procName, 1);
808 if (pminval) *pminval = 0.0;
809 if (pxminloc) *pxminloc = 0;
810 if (pyminloc) *pyminloc = 0;
812 return ERROR_INT(
"dpix not defined", procName, 1);
820 for (i = 0; i < h; i++) {
821 line = data + i * wpl;
822 for (j = 0; j < w; j++) {
823 if (line[j] < minval) {
831 if (pminval) *pminval = minval;
832 if (pxminloc) *pxminloc = xminloc;
833 if (pyminloc) *pyminloc = yminloc;
853 l_int32 i, j, w, h, wpl, xmaxloc, ymaxloc;
854 l_float64 *data, *line;
857 PROCNAME(
"dpixGetMax");
859 if (!pmaxval && !pxmaxloc && !pymaxloc)
860 return ERROR_INT(
"no return val requested", procName, 1);
861 if (pmaxval) *pmaxval = 0.0;
862 if (pxmaxloc) *pxmaxloc = 0;
863 if (pymaxloc) *pymaxloc = 0;
865 return ERROR_INT(
"dpix not defined", procName, 1);
873 for (i = 0; i < h; i++) {
874 line = data + i * wpl;
875 for (j = 0; j < w; j++) {
876 if (line[j] > maxval) {
884 if (pmaxval) *pmaxval = maxval;
885 if (pxmaxloc) *pxmaxloc = xmaxloc;
886 if (pymaxloc) *pymaxloc = ymaxloc;
918 l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld;
919 l_float32 val0, val1, val2, val3;
920 l_float32 *datas, *datad, *lines, *lined, *fract;
923 PROCNAME(
"fpixScaleByInteger");
926 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
929 wd = factor * (ws - 1) + 1;
930 hd = factor * (hs - 1) + 1;
936 fract = (l_float32 *)LEPT_CALLOC(factor,
sizeof(l_float32));
937 for (i = 0; i < factor; i++)
938 fract[i] = i / (l_float32)factor;
939 for (i = 0; i < hs - 1; i++) {
940 lines = datas + i * wpls;
941 for (j = 0; j < ws - 1; j++) {
944 val2 = lines[wpls + j];
945 val3 = lines[wpls + j + 1];
946 for (k = 0; k < factor; k++) {
947 lined = datad + (i * factor + k) * wpld;
948 for (m = 0; m < factor; m++) {
949 lined[j * factor + m] =
950 val0 * (1.0 - fract[m]) * (1.0 - fract[k]) +
951 val1 * fract[m] * (1.0 - fract[k]) +
952 val2 * (1.0 - fract[m]) * fract[k] +
953 val3 * fract[m] * fract[k];
960 for (i = 0; i < hs - 1; i++) {
961 lines = datas + i * wpls;
962 val0 = lines[ws - 1];
963 val1 = lines[wpls + ws - 1];
964 for (k = 0; k < factor; k++) {
965 lined = datad + (i * factor + k) * wpld;
966 lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k];
971 lines = datas + (hs - 1) * wpls;
972 lined = datad + (hd - 1) * wpld;
973 for (j = 0; j < ws - 1; j++) {
976 for (m = 0; m < factor; m++)
977 lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m];
978 lined[wd - 1] = lines[ws - 1];
1010 l_int32 i, j, k, m, ws, hs, wd, hd, wpls, wpld;
1011 l_float64 val0, val1, val2, val3;
1012 l_float64 *datas, *datad, *lines, *lined, *fract;
1015 PROCNAME(
"dpixScaleByInteger");
1018 return (
DPIX *)ERROR_PTR(
"dpixs not defined", procName, NULL);
1021 wd = factor * (ws - 1) + 1;
1022 hd = factor * (hs - 1) + 1;
1028 fract = (l_float64 *)LEPT_CALLOC(factor,
sizeof(l_float64));
1029 for (i = 0; i < factor; i++)
1030 fract[i] = i / (l_float64)factor;
1031 for (i = 0; i < hs - 1; i++) {
1032 lines = datas + i * wpls;
1033 for (j = 0; j < ws - 1; j++) {
1035 val1 = lines[j + 1];
1036 val2 = lines[wpls + j];
1037 val3 = lines[wpls + j + 1];
1038 for (k = 0; k < factor; k++) {
1039 lined = datad + (i * factor + k) * wpld;
1040 for (m = 0; m < factor; m++) {
1041 lined[j * factor + m] =
1042 val0 * (1.0 - fract[m]) * (1.0 - fract[k]) +
1043 val1 * fract[m] * (1.0 - fract[k]) +
1044 val2 * (1.0 - fract[m]) * fract[k] +
1045 val3 * fract[m] * fract[k];
1052 for (i = 0; i < hs - 1; i++) {
1053 lines = datas + i * wpls;
1054 val0 = lines[ws - 1];
1055 val1 = lines[wpls + ws - 1];
1056 for (k = 0; k < factor; k++) {
1057 lined = datad + (i * factor + k) * wpld;
1058 lined[wd - 1] = val0 * (1.0 - fract[k]) + val1 * fract[k];
1063 lines = datas + (hs - 1) * wpls;
1064 lined = datad + (hd - 1) * wpld;
1065 for (j = 0; j < ws - 1; j++) {
1067 val1 = lines[j + 1];
1068 for (m = 0; m < factor; m++)
1069 lined[j * factor + m] = val0 * (1.0 - fract[m]) + val1 * fract[m];
1070 lined[wd - 1] = lines[ws - 1];
1110 l_int32 i, j, ws, hs, w, h, wpls, wpld;
1111 l_float32 *datas, *datad, *lines, *lined;
1113 PROCNAME(
"fpixLinearCombination");
1116 return (
FPIX *)ERROR_PTR(
"fpixs1 not defined", procName, fpixd);
1118 return (
FPIX *)ERROR_PTR(
"fpixs2 not defined", procName, fpixd);
1119 if (fpixs1 == fpixs2)
1120 return (
FPIX *)ERROR_PTR(
"fpixs1 == fpixs2", procName, fpixd);
1121 if (fpixs2 == fpixd)
1122 return (
FPIX *)ERROR_PTR(
"fpixs2 == fpixd", procName, fpixd);
1124 if (fpixs1 != fpixd)
1135 for (i = 0; i < h; i++) {
1136 lines = datas + i * wpls;
1137 lined = datad + i * wpld;
1138 for (j = 0; j < w; j++)
1139 lined[j] = a * lined[j] + b * lines[j];
1167 l_int32 i, j, w, h, wpl;
1168 l_float32 *line, *data;
1170 PROCNAME(
"fpixAddMultConstant");
1173 return ERROR_INT(
"fpix not defined", procName, 1);
1175 if (addc == 0.0 && multc == 1.0)
1181 for (i = 0; i < h; i++) {
1182 line = data + i * wpl;
1184 for (j = 0; j < w; j++)
1186 }
else if (multc == 1.0) {
1187 for (j = 0; j < w; j++)
1190 for (j = 0; j < w; j++) {
1191 line[j] = multc * line[j] + addc;
1229 l_int32 i, j, ws, hs, w, h, wpls, wpld;
1230 l_float64 *datas, *datad, *lines, *lined;
1232 PROCNAME(
"dpixLinearCombination");
1235 return (
DPIX *)ERROR_PTR(
"dpixs1 not defined", procName, dpixd);
1237 return (
DPIX *)ERROR_PTR(
"dpixs2 not defined", procName, dpixd);
1238 if (dpixs1 == dpixs2)
1239 return (
DPIX *)ERROR_PTR(
"dpixs1 == dpixs2", procName, dpixd);
1240 if (dpixs2 == dpixd)
1241 return (
DPIX *)ERROR_PTR(
"dpixs2 == dpixd", procName, dpixd);
1243 if (dpixs1 != dpixd)
1254 for (i = 0; i < h; i++) {
1255 lines = datas + i * wpls;
1256 lined = datad + i * wpld;
1257 for (j = 0; j < w; j++)
1258 lined[j] = a * lined[j] + b * lines[j];
1286 l_int32 i, j, w, h, wpl;
1287 l_float64 *line, *data;
1289 PROCNAME(
"dpixAddMultConstant");
1292 return ERROR_INT(
"dpix not defined", procName, 1);
1294 if (addc == 0.0 && multc == 1.0)
1300 for (i = 0; i < h; i++) {
1301 line = data + i * wpl;
1303 for (j = 0; j < w; j++)
1305 }
else if (multc == 1.0) {
1306 for (j = 0; j < w; j++)
1309 for (j = 0; j < w; j++)
1310 line[j] = multc * line[j] + addc;
1333 l_float32 *data, *line;
1335 PROCNAME(
"fpixSetAllArbitrary");
1338 return ERROR_INT(
"fpix not defined", procName, 1);
1342 for (i = 0; i < h; i++) {
1343 line = data + i * w;
1344 for (j = 0; j < w; j++)
1345 *(line + j) = inval;
1364 l_float64 *data, *line;
1366 PROCNAME(
"dpixSetAllArbitrary");
1369 return ERROR_INT(
"dpix not defined", procName, 1);
1373 for (i = 0; i < h; i++) {
1374 line = data + i * w;
1375 for (j = 0; j < w; j++)
1376 *(line + j) = inval;
1405 l_int32 ws, hs, wd, hd;
1408 PROCNAME(
"fpixAddBorder");
1411 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1413 if (left <= 0 && right <= 0 && top <= 0 && bot <= 0)
1416 wd = ws + left + right;
1417 hd = hs + top + bot;
1419 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1441 l_int32 ws, hs, wd, hd;
1444 PROCNAME(
"fpixRemoveBorder");
1447 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1449 if (left <= 0 && right <= 0 && top <= 0 && bot <= 0)
1452 wd = ws - left - right;
1453 hd = hs - top - bot;
1454 if (wd <= 0 || hd <= 0)
1455 return (
FPIX *)ERROR_PTR(
"width & height not both > 0", procName, NULL);
1457 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1488 PROCNAME(
"fpixAddMirroredBorder");
1491 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1495 for (j = 0; j < left; j++)
1497 fpixd, left + j, top);
1498 for (j = 0; j < right; j++)
1500 fpixd, left + w - 1 - j, top);
1501 for (i = 0; i < top; i++)
1502 fpixRasterop(fpixd, 0, top - 1 - i, left + w + right, 1,
1504 for (i = 0; i < bot; i++)
1505 fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1,
1506 fpixd, 0, top + h - 1 - i);
1535 PROCNAME(
"fpixAddContinuedBorder");
1538 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1542 for (j = 0; j < left; j++)
1544 for (j = 0; j < right; j++)
1545 fpixRasterop(fpixd, left + w + j, top, 1, h, fpixd, left + w - 1, top);
1546 for (i = 0; i < top; i++)
1547 fpixRasterop(fpixd, 0, i, left + w + right, 1, fpixd, 0, top);
1548 for (i = 0; i < bot; i++)
1549 fpixRasterop(fpixd, 0, top + h + i, left + w + right, 1,
1550 fpixd, 0, top + h - 1);
1577 l_int32 i, j, w, h, fullw, fullh;
1578 l_float32 val1, val2, del;
1581 PROCNAME(
"fpixAddSlopeBorder");
1584 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1590 for (i = top; i < top + h; i++) {
1594 for (j = 0; j < left; j++)
1599 fullw = left + w + right;
1600 for (i = top; i < top + h; i++) {
1604 for (j = left + w; j < fullw; j++)
1605 fpixSetPixel(fpixd, j, i, val1 + del * (j - left - w + 1));
1609 for (j = 0; j < fullw; j++) {
1613 for (i = 0; i < top; i++)
1618 fullh = top + h + bot;
1619 for (j = 0; j < fullw; j++) {
1623 for (i = top + h; i < fullh; i++)
1624 fpixSetPixel(fpixd, j, i, val1 + del * (i - top - h + 1));
1669 l_int32 fsw, fsh, fdw, fdh, dhangw, shangw, dhangh, shangh;
1670 l_int32 i, j, wpls, wpld;
1671 l_float32 *datas, *datad, *lines, *lined;
1673 PROCNAME(
"fpixRasterop");
1676 return ERROR_INT(
"fpixs not defined", procName, 1);
1678 return ERROR_INT(
"fpixd not defined", procName, 1);
1697 dhangw = dx + dw - fdw;
1700 shangw = sx + dw - fsw;
1715 dhangh = dy + dh - fdh;
1718 shangh = sy + dh - fsh;
1723 if ((dw <= 0) || (dh <= 0))
1733 datas += sy * wpls + sx;
1734 datad += dy * wpld + dx;
1735 for (i = 0; i < dh; i++) {
1736 lines = datas + i * wpls;
1737 lined = datad + i * wpld;
1738 for (j = 0; j < dw; j++) {
1763 PROCNAME(
"fpixRotateOrth");
1766 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1767 if (quads < 0 || quads > 3)
1768 return (
FPIX *)ERROR_PTR(
"quads not in {0,1,2,3}", procName, NULL);
1772 else if (quads == 1)
1774 else if (quads == 2)
1809 PROCNAME(
"fpixRotate180");
1812 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1815 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1816 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1842 l_int32 i, j, wd, hd, wpls, wpld;
1843 l_float32 *datas, *datad, *lines, *lined;
1846 PROCNAME(
"fpixRotate90");
1849 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1850 if (direction != 1 && direction != -1)
1851 return (
FPIX *)ERROR_PTR(
"invalid direction", procName, NULL);
1855 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1862 if (direction == 1) {
1863 for (i = 0; i < hd; i++) {
1864 lined = datad + i * wpld;
1865 lines = datas + (wd - 1) * wpls;
1866 for (j = 0; j < wd; j++) {
1867 lined[j] = lines[i];
1872 for (i = 0; i < hd; i++) {
1873 lined = datad + i * wpld;
1875 for (j = 0; j < wd; j++) {
1876 lined[j] = lines[hd - 1 - i];
1915 l_int32 i, j, w, h, wpl, bpl;
1916 l_float32 *line, *data, *buffer;
1918 PROCNAME(
"fpixFlipLR");
1921 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1926 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1927 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1932 if ((buffer = (l_float32 *)LEPT_CALLOC(wpl,
sizeof(l_float32))) == NULL) {
1934 return (
FPIX *)ERROR_PTR(
"buffer not made", procName, NULL);
1936 for (i = 0; i < h; i++) {
1937 line = data + i * wpl;
1938 memcpy(buffer, line, bpl);
1939 for (j = 0; j < w; j++)
1940 line[j] = buffer[w - 1 - j];
1976 l_int32 i, k, h, h2, wpl, bpl;
1977 l_float32 *linet, *lineb, *data, *buffer;
1979 PROCNAME(
"fpixFlipTB");
1982 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
1985 if ((fpixd =
fpixCopy(fpixd, fpixs)) == NULL)
1986 return (
FPIX *)ERROR_PTR(
"fpixd not made", procName, NULL);
1991 if ((buffer = (l_float32 *)LEPT_CALLOC(wpl,
sizeof(l_float32))) == NULL) {
1993 return (
FPIX *)ERROR_PTR(
"buffer not made", procName, NULL);
1997 for (i = 0, k = h - 1; i < h2; i++, k--) {
1998 linet = data + i * wpl;
1999 lineb = data + k * wpl;
2000 memcpy(buffer, linet, bpl);
2001 memcpy(linet, lineb, bpl);
2002 memcpy(lineb, buffer, bpl);
2043 FPIX *fpixs2, *fpixd, *fpixd2;
2045 PROCNAME(
"fpixAffinePta");
2048 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2050 return (
FPIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
2052 return (
FPIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
2096 l_int32 i, j, w, h, wpld;
2098 l_float32 *datas, *datad, *lined;
2102 PROCNAME(
"fpixAffine");
2105 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2108 return (
FPIX *)ERROR_PTR(
"vc not defined", procName, NULL);
2117 for (i = 0; i < h; i++) {
2118 lined = datad + i * wpld;
2119 for (j = 0; j < w; j++) {
2162 FPIX *fpixs2, *fpixd, *fpixd2;
2164 PROCNAME(
"fpixProjectivePta");
2167 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2169 return (
FPIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
2171 return (
FPIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
2215 l_int32 i, j, w, h, wpld;
2217 l_float32 *datas, *datad, *lined;
2221 PROCNAME(
"fpixProjective");
2224 return (
FPIX *)ERROR_PTR(
"fpixs not defined", procName, NULL);
2227 return (
FPIX *)ERROR_PTR(
"vc not defined", procName, NULL);
2236 for (i = 0; i < h; i++) {
2237 lined = datad + i * wpld;
2238 for (j = 0; j < w; j++) {
2277 l_int32 xpm, ypm, xp, yp, xf, yf;
2278 l_float32 v00, v01, v10, v11;
2281 PROCNAME(
"linearInterpolatePixelFloat");
2284 return ERROR_INT(
"&val not defined", procName, 1);
2287 return ERROR_INT(
"datas not defined", procName, 1);
2290 if (x < 0.0 || y < 0.0 || x > w - 2.0 || y > h - 2.0)
2293 xpm = (l_int32)(16.0 * x + 0.5);
2294 ypm = (l_int32)(16.0 * y + 0.5);
2301 if (xf < 0 || yf < 0)
2302 fprintf(stderr,
"xp = %d, yp = %d, xf = %d, yf = %d\n", xp, yp, xf, yf);
2306 lines = datas + yp * w;
2307 v00 = (16.0 - xf) * (16.0 - yf) * (*(lines + xp));
2308 v10 = xf * (16.0 - yf) * (*(lines + xp + 1));
2309 v01 = (16.0 - xf) * yf * (*(lines + w + xp));
2310 v11 = (l_float32)(xf) * yf * (*(lines + w + xp + 1));
2311 *pval = (v00 + v01 + v10 + v11) / 256.0;
2336 l_int32 i, j, w, h, wpls, wpld;
2337 l_float32 *datas, *lines;
2338 l_uint32 *datad, *lined;
2341 PROCNAME(
"fpixThresholdToPix");
2344 return (
PIX *)ERROR_PTR(
"fpix not defined", procName, NULL);
2351 wpld = pixGetWpl(pixd);
2352 for (i = 0; i < h; i++) {
2353 lines = datas + i * wpls;
2354 lined = datad + i * wpld;
2355 for (j = 0; j < w; j++) {
2356 if (lines[j] <= thresh)
2399 l_int32 i, j, w, h, wpls, wpld, rval, gval, bval, zerodenom, onedenom;
2400 l_float32 fnum, fdenom;
2401 l_uint32 *datas, *lines;
2402 l_float32 *datad, *lined, *recip;
2405 PROCNAME(
"pixComponentFunction");
2407 if (!pix || pixGetDepth(pix) != 32)
2408 return (
FPIX *)ERROR_PTR(
"pix undefined or not 32 bpp", procName, NULL);
2412 wpls = pixGetWpl(pix);
2416 zerodenom = (rdenom == 0.0 && gdenom == 0.0 && bdenom == 0.0) ? 1: 0;
2417 onedenom = ((rdenom == 1.0 && gdenom == 0.0 && bdenom == 0.0) ||
2418 (rdenom == 0.0 && gdenom == 1.0 && bdenom == 0.0) ||
2419 (rdenom == 0.0 && gdenom == 0.0 && bdenom == 1.0)) ? 1 : 0;
2422 recip = (l_float32 *)LEPT_CALLOC(256,
sizeof(l_float32));
2424 for (i = 1; i < 256; i++)
2425 recip[i] = 1.0 / (l_float32)i;
2427 for (i = 0; i < h; i++) {
2428 lines = datas + i * wpls;
2429 lined = datad + i * wpld;
2431 for (j = 0; j < w; j++) {
2433 lined[j] = rnum * rval + gnum * gval + bnum * bval;
2435 }
else if (onedenom && rdenom == 1.0) {
2436 for (j = 0; j < w; j++) {
2439 = recip[rval] * (rnum * rval + gnum * gval + bnum * bval);
2441 }
else if (onedenom && gdenom == 1.0) {
2442 for (j = 0; j < w; j++) {
2445 = recip[gval] * (rnum * rval + gnum * gval + bnum * bval);
2447 }
else if (onedenom && bdenom == 1.0) {
2448 for (j = 0; j < w; j++) {
2451 = recip[bval] * (rnum * rval + gnum * gval + bnum * bval);
2454 for (j = 0; j < w; j++) {
2456 fnum = rnum * rval + gnum * gval + bnum * bval;
2457 fdenom = rdenom * rval + gdenom * gval + bdenom * bval;
2458 lined[j] = (fdenom == 0) ? 256.0 * fnum : fnum / fdenom;
DPIX * pixConvertToDPix(PIX *pixs, l_int32 ncomps)
pixConvertToDPix()
PIX * pixConvertRGBToLuminance(PIX *pixs)
pixConvertRGBToLuminance()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * fpixThresholdToPix(FPIX *fpix, l_float32 thresh)
fpixThresholdToPix()
DPIX * dpixCreate(l_int32 width, l_int32 height)
dpixCreate()
l_int32 fpixGetMax(FPIX *fpix, l_float32 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc)
fpixGetMax()
DPIX * dpixScaleByInteger(DPIX *dpixs, l_int32 factor)
dpixScaleByInteger()
l_int32 fpixAddMultConstant(FPIX *fpix, l_float32 addc, l_float32 multc)
fpixAddMultConstant()
l_int32 fpixGetMin(FPIX *fpix, l_float32 *pminval, l_int32 *pxminloc, l_int32 *pyminloc)
fpixGetMin()
l_int32 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_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()
l_int32 dpixGetMin(DPIX *dpix, l_float64 *pminval, l_int32 *pxminloc, l_int32 *pyminloc)
dpixGetMin()
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_int32 linearInterpolatePixelFloat(l_float32 *datas, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_float32 inval, l_float32 *pval)
linearInterpolatePixelFloat()
#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_uint32 * pixGetData(PIX *pix)
pixGetData()
l_int32 dpixGetMax(DPIX *dpix, l_float64 *pmaxval, l_int32 *pxmaxloc, l_int32 *pymaxloc)
dpixGetMax()
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_int32 fpixGetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 *pval)
fpixGetPixel()
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_int32 dpixGetDimensions(DPIX *dpix, l_int32 *pw, l_int32 *ph)
dpixGetDimensions()
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_int32 getAffineXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc)
getAffineXformCoeffs()
FPIX * fpixRotateOrth(FPIX *fpixs, l_int32 quads)
fpixRotateOrth()
l_int32 fpixSetAllArbitrary(FPIX *fpix, l_float32 inval)
fpixSetAllArbitrary()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
#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()
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_int32 fpixCopyResolution(FPIX *fpixd, FPIX *fpixs)
fpixCopyResolution()
l_int32 fpixGetDimensions(FPIX *fpix, l_int32 *pw, l_int32 *ph)
fpixGetDimensions()
FPIX * pixConvertToFPix(PIX *pixs, l_int32 ncomps)
pixConvertToFPix()
FPIX * dpixConvertToFPix(DPIX *dpix)
dpixConvertToFPix()
l_int32 affineXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp)
affineXformPt()
#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)
l_int32 dpixSetAllArbitrary(DPIX *dpix, l_float64 inval)
dpixSetAllArbitrary()
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_int32 fpixSetPixel(FPIX *fpix, l_int32 x, l_int32 y, l_float32 val)
fpixSetPixel()
l_int32 pixGetDimensions(PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_int32 projectiveXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp)
projectiveXformPt()
l_int32 getProjectiveXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc)
getProjectiveXformCoeffs()
void fpixDestroy(FPIX **pfpix)
fpixDestroy()
l_int32 dpixAddMultConstant(DPIX *dpix, l_float64 addc, l_float64 multc)
dpixAddMultConstant()
#define SET_DATA_TWO_BYTES(pdata, n, val)
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
FPIX * fpixProjective(FPIX *fpixs, l_float32 *vc, l_float32 inval)
fpixProjective()
#define SET_DATA_BIT(pdata, n)