99 #include "allheaders.h" 116 PROCNAME(
"pixcmapCreate");
118 if (depth != 1 && depth != 2 && depth !=4 && depth != 8)
119 return (
PIXCMAP *)ERROR_PTR(
"depth not in {1,2,4,8}", procName, NULL);
123 cmap->
nalloc = 1 << depth;
163 l_int32 red[256], green[256], blue[256];
166 PROCNAME(
"pixcmapCreateRandom");
168 if (depth != 2 && depth != 4 && depth != 8)
169 return (
PIXCMAP *)ERROR_PTR(
"depth not in {2, 4, 8}", procName, NULL);
170 if (hasblack != 0) hasblack = 1;
171 if (haswhite != 0) haswhite = 1;
174 ncolors = 1 << depth;
177 for (i = hasblack; i < ncolors - haswhite; i++) {
178 red[i] = (l_uint32)rand() & 0xff;
179 green[i] = (l_uint32)rand() & 0xff;
180 blue[i] = (l_uint32)rand() & 0xff;
207 l_int32 maxlevels, i, val;
210 PROCNAME(
"pixcmapCreateLinear");
212 if (d != 1 && d != 2 && d !=4 && d != 8)
213 return (
PIXCMAP *)ERROR_PTR(
"d not in {1, 2, 4, 8}", procName, NULL);
215 if (nlevels < 2 || nlevels > maxlevels)
216 return (
PIXCMAP *)ERROR_PTR(
"invalid nlevels", procName, NULL);
219 for (i = 0; i < nlevels; i++) {
220 val = (255 * i) / (nlevels - 1);
236 l_int32 nbytes, valid;
239 PROCNAME(
"pixcmapCopy");
242 return (
PIXCMAP *)ERROR_PTR(
"cmaps not defined", procName, NULL);
245 return (
PIXCMAP *)ERROR_PTR(
"invalid cmap", procName, NULL);
249 cmapd->
array = (
void *)LEPT_CALLOC(1, nbytes);
269 PROCNAME(
"pixcmapDestroy");
272 L_WARNING(
"ptr address is null!\n", procName);
276 if ((cmap = *pcmap) == NULL)
279 LEPT_FREE(cmap->
array);
298 PROCNAME(
"pixcmapIsValid");
301 return ERROR_INT(
"&valid not defined", procName, 1);
304 return ERROR_INT(
"cmap not defined", procName, 1);
306 return ERROR_INT(
"cmap array not defined", procName, 1);
308 if (d !=1 && d != 2 && d != 4 && d != 8) {
309 L_ERROR(
"invalid cmap depth: %d\n", procName, d);
313 L_ERROR(
"invalid cmap nalloc: %d\n", procName, cmap->
nalloc);
316 if (cmap->
n < 0 || cmap->
n > 256 || cmap->
n > cmap->
nalloc) {
317 L_ERROR(
"invalid cmap n: %d (nalloc = %d)\n", procName,
348 PROCNAME(
"pixcmapAddColor");
351 return ERROR_INT(
"cmap not defined", procName, 1);
353 return ERROR_INT(
"no free color entries", procName, 1);
356 cta[cmap->
n].
red = rval;
357 cta[cmap->
n].
green = gval;
358 cta[cmap->
n].
blue = bval;
387 PROCNAME(
"pixcmapAddRGBA");
390 return ERROR_INT(
"cmap not defined", procName, 1);
392 return ERROR_INT(
"no free color entries", procName, 1);
395 cta[cmap->
n].
red = rval;
396 cta[cmap->
n].
green = gval;
397 cta[cmap->
n].
blue = bval;
398 cta[cmap->
n].
alpha = aval;
429 PROCNAME(
"pixcmapAddNewColor");
432 return ERROR_INT(
"&index not defined", procName, 1);
435 return ERROR_INT(
"cmap not defined", procName, 1);
443 L_WARNING(
"no free color entries\n", procName);
478 PROCNAME(
"pixcmapAddNearestColor");
481 return ERROR_INT(
"&index not defined", procName, 1);
484 return ERROR_INT(
"cmap not defined", procName, 1);
527 PROCNAME(
"pixcmapUsableColor");
530 return ERROR_INT(
"&usable not defined", procName, 1);
533 return ERROR_INT(
"cmap not defined", procName, 1);
572 PROCNAME(
"pixcmapAddBlackOrWhite");
574 if (pindex) *pindex = 0;
576 return ERROR_INT(
"cmap not defined", procName, 1);
611 PROCNAME(
"pixcmapSetBlackAndWhite");
614 return ERROR_INT(
"cmap not defined", procName, 1);
637 PROCNAME(
"pixcmapGetCount");
640 return ERROR_INT(
"cmap not defined", procName, 0);
654 PROCNAME(
"pixcmapGetFreeCount");
657 return ERROR_INT(
"cmap not defined", procName, 0);
658 return (cmap->
nalloc - cmap->
n);
671 PROCNAME(
"pixcmapGetDepth");
674 return ERROR_INT(
"cmap not defined", procName, 0);
697 PROCNAME(
"pixcmapGetMinDepth");
700 return ERROR_INT(
"&mindepth not defined", procName, 1);
703 return ERROR_INT(
"cmap not defined", procName, 1);
708 else if (ncolors <= 16)
730 PROCNAME(
"pixcmapClear");
733 return ERROR_INT(
"cmap not defined", procName, 1);
759 PROCNAME(
"pixcmapGetColor");
761 if (!prval || !pgval || !pbval)
762 return ERROR_INT(
"&rval, &gval, &bval not all defined", procName, 1);
763 *prval = *pgval = *pbval = 0;
765 return ERROR_INT(
"cmap not defined", procName, 1);
766 if (index < 0 || index >= cmap->
n)
767 return ERROR_INT(
"index out of bounds", procName, 1);
770 *prval = cta[index].
red;
771 *pgval = cta[index].
green;
772 *pbval = cta[index].
blue;
795 l_int32 rval, gval, bval;
797 PROCNAME(
"pixcmapGetColor32");
800 return ERROR_INT(
"&val32 not defined", procName, 1);
804 return ERROR_INT(
"rgb values not found", procName, 1);
828 PROCNAME(
"pixcmapGetRGBA");
830 if (!prval || !pgval || !pbval || !paval)
831 return ERROR_INT(
"&rval, &gval, &bval, &aval not all defined",
833 *prval = *pgval = *pbval = *paval = 0;
835 return ERROR_INT(
"cmap not defined", procName, 1);
836 if (index < 0 || index >= cmap->
n)
837 return ERROR_INT(
"index out of bounds", procName, 1);
840 *prval = cta[index].
red;
841 *pgval = cta[index].
green;
842 *pbval = cta[index].
blue;
843 *paval = cta[index].
alpha;
861 l_int32 rval, gval, bval, aval;
863 PROCNAME(
"pixcmapGetRGBA32");
866 return ERROR_INT(
"&val32 not defined", procName, 1);
870 return ERROR_INT(
"rgba values not found", procName, 1);
901 PROCNAME(
"pixcmapResetColor");
904 return ERROR_INT(
"cmap not defined", procName, 1);
905 if (index < 0 || index >= cmap->
n)
906 return ERROR_INT(
"index out of bounds", procName, 1);
909 cta[index].
red = rval;
910 cta[index].
green = gval;
911 cta[index].
blue = bval;
912 cta[index].
alpha = 255;
940 PROCNAME(
"pixcmapSetAlpha");
943 return ERROR_INT(
"cmap not defined", procName, 1);
944 if (index < 0 || index >= cmap->
n)
945 return ERROR_INT(
"index out of bounds", procName, 1);
948 cta[index].
alpha = aval;
972 PROCNAME(
"pixcmapGetIndex");
975 return ERROR_INT(
"&index not defined", procName, 1);
978 return ERROR_INT(
"cmap not defined", procName, 1);
982 for (i = 0; i <
n; i++) {
983 if (rval == cta[i].red &&
984 gval == cta[i].green &&
985 bval == cta[i].blue) {
1006 l_int32 *rmap, *gmap, *bmap;
1008 PROCNAME(
"pixcmapHasColor");
1011 return ERROR_INT(
"&color not defined", procName, 1);
1014 return ERROR_INT(
"cmap not defined", procName, 1);
1017 return ERROR_INT(
"colormap arrays not made", procName, 1);
1019 for (i = 0; i <
n; i++) {
1020 if ((rmap[i] != gmap[i]) || (rmap[i] != bmap[i])) {
1047 PROCNAME(
"pixcmapIsOpaque");
1050 return ERROR_INT(
"&opaque not defined", procName, 1);
1053 return ERROR_INT(
"cmap not defined", procName, 1);
1057 for (i = 0; i <
n; i++) {
1058 if (cta[i].alpha != 255) {
1077 l_int32 *pblackwhite)
1079 l_int32 val0, val1, hascolor;
1082 PROCNAME(
"pixcmapIsBlackAndWhite");
1085 return ERROR_INT(
"&blackwhite not defined", procName, 1);
1086 *pblackwhite = FALSE;
1088 return ERROR_INT(
"cmap not defined", procName, 1);
1093 if (hascolor)
return 0;
1098 if ((val0 == 0 && val1 == 255) || (val0 == 255 && val1 == 0))
1099 *pblackwhite = TRUE;
1120 l_int32
n, i, rval, gval, bval, count;
1123 PROCNAME(
"pixcmapCountGrayColors");
1126 return ERROR_INT(
"&ngray not defined", procName, 1);
1129 return ERROR_INT(
"cmap not defined", procName, 1);
1131 array = (l_int32 *)LEPT_CALLOC(256,
sizeof(l_int32));
1134 for (i = 0; i <
n; i++) {
1136 if ((rval == gval) && (rval == bval) && (array[rval] == 0)) {
1162 l_int32
n, i, rval, gval, bval, rankindex;
1165 PROCNAME(
"pixcmapGetRankIntensity");
1168 return ERROR_INT(
"&index not defined", procName, 1);
1171 return ERROR_INT(
"cmap not defined", procName, 1);
1172 if (rankval < 0.0 || rankval > 1.0)
1173 return ERROR_INT(
"rankval not in [0.0 ... 1.0]", procName, 1);
1177 for (i = 0; i <
n; i++) {
1182 rankindex = (l_int32)(rankval * (
n - 1) + 0.5);
1215 l_int32 i,
n, delta, dist, mindist;
1218 PROCNAME(
"pixcmapGetNearestIndex");
1221 return ERROR_INT(
"&index not defined", procName, 1);
1224 return ERROR_INT(
"cmap not defined", procName, 1);
1227 return ERROR_INT(
"cta not defined(!)", procName, 1);
1230 mindist = 3 * 255 * 255 + 1;
1231 for (i = 0; i <
n; i++) {
1232 delta = cta[i].
red - rval;
1233 dist = delta * delta;
1234 delta = cta[i].
green - gval;
1235 dist += delta * delta;
1236 delta = cta[i].
blue - bval;
1237 dist += delta * delta;
1238 if (dist < mindist) {
1271 l_int32 i,
n, dist, mindist;
1274 PROCNAME(
"pixcmapGetNearestGrayIndex");
1277 return ERROR_INT(
"&index not defined", procName, 1);
1280 return ERROR_INT(
"cmap not defined", procName, 1);
1281 if (val < 0 || val > 255)
1282 return ERROR_INT(
"val not in [0 ... 255]", procName, 1);
1285 return ERROR_INT(
"cta not defined(!)", procName, 1);
1289 for (i = 0; i <
n; i++) {
1290 dist = cta[i].
green - val;
1292 if (dist < mindist) {
1327 l_int32
n, delta, dist;
1330 PROCNAME(
"pixcmapGetDistanceToColor");
1333 return ERROR_INT(
"&dist not defined", procName, 1);
1336 return ERROR_INT(
"cmap not defined", procName, 1);
1339 return ERROR_INT(
"invalid index", procName, 1);
1342 return ERROR_INT(
"cta not defined(!)", procName, 1);
1344 delta = cta[index].
red - rval;
1345 dist = delta * delta;
1346 delta = cta[index].
green - gval;
1347 dist += delta * delta;
1348 delta = cta[index].
blue - bval;
1349 dist += delta * delta;
1383 l_int32 i,
n, imin, imax, minval, maxval, rval, gval, bval, aveval;
1385 PROCNAME(
"pixcmapGetRangeValues");
1387 if (pminval) *pminval = UNDEF;
1388 if (pmaxval) *pmaxval = UNDEF;
1389 if (pminindex) *pminindex = UNDEF;
1390 if (pmaxindex) *pmaxindex = UNDEF;
1391 if (!pminval && !pmaxval && !pminindex && !pmaxindex)
1392 return ERROR_INT(
"no result requested", procName, 1);
1394 return ERROR_INT(
"cmap not defined", procName, 1);
1401 for (i = 0; i <
n; i++) {
1404 if (rval < minval) {
1408 if (rval > maxval) {
1413 if (gval < minval) {
1417 if (gval > maxval) {
1422 if (bval < minval) {
1426 if (bval > maxval) {
1431 aveval = (rval + gval + bval) / 3;
1432 if (aveval < minval) {
1436 if (aveval > maxval) {
1441 return ERROR_INT(
"invalid selection", procName, 1);
1445 if (pminval) *pminval = minval;
1446 if (pmaxval) *pmaxval = maxval;
1447 if (pminindex) *pminindex = imin;
1448 if (pmaxindex) *pmaxindex = imax;
1474 l_int32 i, rval, gval, bval;
1479 for (i = 0; i < 256; i++) {
1481 gval + (i * (255 - gval)) / 255,
1482 bval + (i * (255 - bval)) / 255);
1509 l_int32 i,
n, rval, gval, bval, val;
1513 PROCNAME(
"pixcmapColorToGray");
1516 return (
PIXCMAP *)ERROR_PTR(
"cmaps not defined", procName, NULL);
1517 if (rwt < 0.0 || gwt < 0.0 || bwt < 0.0)
1518 return (
PIXCMAP *)ERROR_PTR(
"weights not all >= 0.0", procName, NULL);
1522 sum = rwt + gwt + bwt;
1524 L_WARNING(
"all weights zero; setting equal to 1/3\n", procName);
1525 rwt = gwt = bwt = 0.33333;
1528 if (L_ABS(sum - 1.0) > 0.0001) {
1529 L_WARNING(
"weights don't sum to 1; maintaining ratios\n", procName);
1536 return (
PIXCMAP *)ERROR_PTR(
"cmapd not made", procName, NULL);
1538 for (i = 0; i <
n; i++) {
1540 val = (l_int32)(rwt * rval + gwt * gval + bwt * bval + 0.5);
1563 l_int32 i,
n, rval, gval, bval;
1566 PROCNAME(
"pixcmapConvertTo4");
1569 return (
PIXCMAP *)ERROR_PTR(
"cmaps not defined", procName, NULL);
1571 return (
PIXCMAP *)ERROR_PTR(
"cmaps not for 2 bpp pix", procName, NULL);
1575 for (i = 0; i <
n; i++) {
1598 l_int32 i,
n, depth, rval, gval, bval;
1601 PROCNAME(
"pixcmapConvertTo8");
1604 return (
PIXCMAP *)ERROR_PTR(
"cmaps not defined", procName, NULL);
1607 if (depth != 2 && depth != 4)
1608 return (
PIXCMAP *)ERROR_PTR(
"cmaps not 2 or 4 bpp", procName, NULL);
1612 for (i = 0; i <
n; i++) {
1635 PROCNAME(
"pixcmapRead");
1638 return (
PIXCMAP *)ERROR_PTR(
"filename not defined", procName, NULL);
1641 return (
PIXCMAP *)ERROR_PTR(
"stream not opened", procName, NULL);
1645 return (
PIXCMAP *)ERROR_PTR(
"cmap not read", procName, NULL);
1659 l_int32 rval, gval, bval, aval, ignore;
1660 l_int32 i, index, ret, depth, ncolors;
1663 PROCNAME(
"pixcmapReadStream");
1666 return (
PIXCMAP *)ERROR_PTR(
"stream not defined", procName, NULL);
1668 ret = fscanf(fp,
"\nPixcmap: depth = %d bpp; %d colors\n",
1671 (depth != 1 && depth != 2 && depth != 4 && depth != 8) ||
1672 (ncolors < 2 || ncolors > 256))
1673 return (
PIXCMAP *)ERROR_PTR(
"invalid cmap size", procName, NULL);
1674 ignore = fscanf(fp,
"Color R-val G-val B-val Alpha\n");
1675 ignore = fscanf(fp,
"----------------------------------------\n");
1678 for (i = 0; i < ncolors; i++) {
1679 if (fscanf(fp,
"%3d %3d %3d %3d %3d\n",
1680 &index, &rval, &gval, &bval, &aval) != 5) {
1682 return (
PIXCMAP *)ERROR_PTR(
"invalid entry", procName, NULL);
1704 PROCNAME(
"pixcmapReadMem");
1707 return (
PIXCMAP *)ERROR_PTR(
"data not defined", procName, NULL);
1709 return (
PIXCMAP *)ERROR_PTR(
"stream not opened", procName, NULL);
1713 if (!cmap) L_ERROR(
"cmap not read\n", procName);
1732 PROCNAME(
"pixcmapWrite");
1735 return ERROR_INT(
"filename not defined", procName, 1);
1737 return ERROR_INT(
"cmap not defined", procName, 1);
1740 return ERROR_INT(
"stream not opened", procName, 1);
1744 return ERROR_INT(
"cmap not written to stream", procName, 1);
1761 l_int32 *rmap, *gmap, *bmap, *amap;
1764 PROCNAME(
"pixcmapWriteStream");
1767 return ERROR_INT(
"stream not defined", procName, 1);
1769 return ERROR_INT(
"cmap not defined", procName, 1);
1772 return ERROR_INT(
"colormap arrays not made", procName, 1);
1774 fprintf(fp,
"\nPixcmap: depth = %d bpp; %d colors\n", cmap->
depth, cmap->
n);
1775 fprintf(fp,
"Color R-val G-val B-val Alpha\n");
1776 fprintf(fp,
"----------------------------------------\n");
1777 for (i = 0; i < cmap->
n; i++)
1778 fprintf(fp,
"%3d %3d %3d %3d %3d\n",
1779 i, rmap[i], gmap[i], bmap[i], amap[i]);
1811 PROCNAME(
"pixcmapWriteMem");
1813 if (pdata) *pdata = NULL;
1814 if (psize) *psize = 0;
1816 return ERROR_INT(
"&data not defined", procName, 1);
1818 return ERROR_INT(
"&size not defined", procName, 1);
1820 return ERROR_INT(
"cmap not defined", procName, 1);
1823 if ((fp = open_memstream((
char **)pdata, psize)) == NULL)
1824 return ERROR_INT(
"stream not opened", procName, 1);
1827 L_INFO(
"work-around: writing to a temp file\n", procName);
1830 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1832 if ((fp = tmpfile()) == NULL)
1833 return ERROR_INT(
"tmpfile stream not opened", procName, 1);
1862 l_int32 *rmap, *gmap, *bmap, *amap;
1866 PROCNAME(
"pixcmapToArrays");
1868 if (!prmap || !pgmap || !pbmap)
1869 return ERROR_INT(
"&rmap, &gmap, &bmap not all defined", procName, 1);
1870 *prmap = *pgmap = *pbmap = NULL;
1871 if (pamap) *pamap = NULL;
1873 return ERROR_INT(
"cmap not defined", procName, 1);
1876 if (((rmap = (l_int32 *)LEPT_CALLOC(ncolors,
sizeof(l_int32))) == NULL) ||
1877 ((gmap = (l_int32 *)LEPT_CALLOC(ncolors,
sizeof(l_int32))) == NULL) ||
1878 ((bmap = (l_int32 *)LEPT_CALLOC(ncolors,
sizeof(l_int32))) == NULL))
1879 return ERROR_INT(
"calloc fail for *map", procName, 1);
1884 amap = (l_int32 *)LEPT_CALLOC(ncolors,
sizeof(l_int32));
1889 for (i = 0; i < ncolors; i++) {
1890 rmap[i] = cta[i].
red;
1891 gmap[i] = cta[i].
green;
1892 bmap[i] = cta[i].
blue;
1894 amap[i] = cta[i].
alpha;
1914 l_int32 i, ncolors, rval, gval, bval, aval;
1917 PROCNAME(
"pixcmapToRGBTable");
1920 return ERROR_INT(
"&tab not defined", procName, 1);
1923 return ERROR_INT(
"cmap not defined", procName, 1);
1927 *pncolors = ncolors;
1928 if ((tab = (l_uint32 *)LEPT_CALLOC(ncolors,
sizeof(l_uint32))) == NULL)
1929 return ERROR_INT(
"tab not made", procName, 1);
1932 for (i = 0; i < ncolors; i++) {
1960 l_int32 i, ncolors, rval, gval, bval, aval;
1963 PROCNAME(
"pixcmapSerializeToMemory");
1966 return ERROR_INT(
"&data not defined", procName, 1);
1969 return ERROR_INT(
"&ncolors not defined", procName, 1);
1972 return ERROR_INT(
"cmap not defined", procName, 1);
1973 if (cpc != 3 && cpc != 4)
1974 return ERROR_INT(
"cpc not 3 or 4", procName, 1);
1977 *pncolors = ncolors;
1978 if ((data = (l_uint8 *)LEPT_CALLOC((
size_t)cpc * ncolors,
sizeof(l_uint8)))
1980 return ERROR_INT(
"data not made", procName, 1);
1983 for (i = 0; i < ncolors; i++) {
1985 data[cpc * i] = rval;
1986 data[cpc * i + 1] = gval;
1987 data[cpc * i + 2] = bval;
1989 data[cpc * i + 3] = aval;
2008 l_int32 i, d, rval, gval, bval, aval;
2011 PROCNAME(
"pixcmapDeserializeFromMemory");
2014 return (
PIXCMAP *)ERROR_PTR(
"data not defined", procName, NULL);
2015 if (cpc != 3 && cpc != 4)
2016 return (
PIXCMAP *)ERROR_PTR(
"cpc not 3 or 4", procName, NULL);
2018 return (
PIXCMAP *)ERROR_PTR(
"no entries", procName, NULL);
2020 return (
PIXCMAP *)ERROR_PTR(
"ncolors > 256", procName, NULL);
2024 else if (ncolors > 4)
2026 else if (ncolors > 2)
2031 for (i = 0; i < ncolors; i++) {
2032 rval = data[cpc * i];
2033 gval = data[cpc * i + 1];
2034 bval = data[cpc * i + 2];
2036 aval = data[cpc * i + 3];
2068 l_int32 i, j, hexbytes;
2069 char *hexdata = NULL;
2072 PROCNAME(
"pixcmapConvertToHex");
2075 return (
char *)ERROR_PTR(
"data not defined", procName, NULL);
2077 return (
char *)ERROR_PTR(
"no colors", procName, NULL);
2079 hexbytes = 2 + (2 * 3 + 1) * ncolors + 2;
2080 hexdata = (
char *)LEPT_CALLOC(hexbytes,
sizeof(
char));
2084 for (i = 0; i < ncolors; i++) {
2085 j = 2 + (2 * 3 + 1) * i;
2086 snprintf(buf,
sizeof(buf),
"%02x", data[3 * i]);
2087 hexdata[j] = buf[0];
2088 hexdata[j + 1] = buf[1];
2089 snprintf(buf,
sizeof(buf),
"%02x", data[3 * i + 1]);
2090 hexdata[j + 2] = buf[0];
2091 hexdata[j + 3] = buf[1];
2092 snprintf(buf,
sizeof(buf),
"%02x", data[3 * i + 2]);
2093 hexdata[j + 4] = buf[0];
2094 hexdata[j + 5] = buf[1];
2095 hexdata[j + 6] =
' ';
2097 hexdata[j + 7] =
'>';
2098 hexdata[j + 8] =
'\0';
2128 l_int32 rval, gval, bval, trval, tgval, tbval, i, ncolors;
2131 PROCNAME(
"pixcmapGammaTRC");
2134 return ERROR_INT(
"cmap not defined", procName, 1);
2136 L_WARNING(
"gamma must be > 0.0; setting to 1.0\n", procName);
2139 if (minval >= maxval)
2140 return ERROR_INT(
"minval not < maxval", procName, 1);
2142 if (gamma == 1.0 && minval == 0 && maxval == 255)
2145 if ((nag =
numaGammaTRC(gamma, minval, maxval)) == NULL)
2146 return ERROR_INT(
"nag not made", procName, 1);
2149 for (i = 0; i < ncolors; i++) {
2181 l_int32 i, ncolors, rval, gval, bval, trval, tgval, tbval;
2184 PROCNAME(
"pixcmapContrastTRC");
2187 return ERROR_INT(
"cmap not defined", procName, 1);
2189 L_WARNING(
"factor must be >= 0.0; setting to 0.0\n", procName);
2194 return ERROR_INT(
"nac not made", procName, 1);
2197 for (i = 0; i < ncolors; i++) {
2233 l_int32 i, ncolors, rval, gval, bval;
2235 PROCNAME(
"pixcmapShiftIntensity");
2238 return ERROR_INT(
"cmap not defined", procName, 1);
2239 if (fraction < -1.0 || fraction > 1.0)
2240 return ERROR_INT(
"fraction not in [-1.0, 1.0]", procName, 1);
2243 for (i = 0; i < ncolors; i++) {
2247 (l_int32)((1.0 + fraction) * rval),
2248 (l_int32)((1.0 + fraction) * gval),
2249 (l_int32)((1.0 + fraction) * bval));
2252 rval + (l_int32)(fraction * (255 - rval)),
2253 gval + (l_int32)(fraction * (255 - gval)),
2254 bval + (l_int32)(fraction * (255 - bval)));
2284 l_int32 i, ncolors, rval, gval, bval;
2287 PROCNAME(
"pixcmapShiftByComponent");
2290 return ERROR_INT(
"cmap not defined", procName, 1);
2293 for (i = 0; i < ncolors; i++) {
l_ok pixcmapCountGrayColors(PIXCMAP *cmap, l_int32 *pngray)
pixcmapCountGrayColors()
l_int32 pixcmapGetDepth(PIXCMAP *cmap)
pixcmapGetDepth()
NUMA * numaGetSortIndex(NUMA *na, l_int32 sortorder)
numaGetSortIndex()
l_ok pixcmapGetMinDepth(PIXCMAP *cmap, l_int32 *pmindepth)
pixcmapGetMinDepth()
char * pixcmapConvertToHex(l_uint8 *data, l_int32 ncolors)
pixcmapConvertToHex()
PIXCMAP * pixcmapReadStream(FILE *fp)
pixcmapReadStream()
l_ok pixcmapWriteMem(l_uint8 **pdata, size_t *psize, PIXCMAP *cmap)
pixcmapWriteMem()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIXCMAP * pixcmapConvertTo8(PIXCMAP *cmaps)
pixcmapConvertTo8()
NUMA * numaGammaTRC(l_float32 gamma, l_int32 minval, l_int32 maxval)
numaGammaTRC()
l_ok pixcmapGetNearestIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapGetNearestIndex()
PIXCMAP * pixcmapGrayToColor(l_uint32 color)
pixcmapGrayToColor()
PIXCMAP * pixcmapRead(const char *filename)
pixcmapRead()
l_ok pixcmapWriteStream(FILE *fp, PIXCMAP *cmap)
pixcmapWriteStream()
l_ok pixcmapWrite(const char *filename, PIXCMAP *cmap)
pixcmapWrite()
l_ok pixcmapSerializeToMemory(PIXCMAP *cmap, l_int32 cpc, l_int32 *pncolors, l_uint8 **pdata)
pixcmapSerializeToMemory()
l_ok pixcmapIsBlackAndWhite(PIXCMAP *cmap, l_int32 *pblackwhite)
pixcmapIsBlackAndWhite()
FILE * fopenReadFromMemory(const l_uint8 *data, size_t size)
fopenReadFromMemory()
void pixcmapDestroy(PIXCMAP **pcmap)
pixcmapDestroy()
NUMA * numaCreate(l_int32 n)
numaCreate()
PIXCMAP * pixcmapReadMem(const l_uint8 *data, size_t size)
pixcmapReadMem()
PIXCMAP * pixcmapConvertTo4(PIXCMAP *cmaps)
pixcmapConvertTo4()
l_ok pixcmapGetRangeValues(PIXCMAP *cmap, l_int32 select, l_int32 *pminval, l_int32 *pmaxval, l_int32 *pminindex, l_int32 *pmaxindex)
pixcmapGetRangeValues()
PIXCMAP * pixcmapCreateLinear(l_int32 d, l_int32 nlevels)
pixcmapCreateLinear()
l_ok pixcmapShiftIntensity(PIXCMAP *cmap, l_float32 fraction)
pixcmapShiftIntensity()
l_ok pixcmapGetRGBA32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32)
pixcmapGetRGBA32()
l_ok pixelShiftByComponent(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 srcval, l_uint32 dstval, l_uint32 *ppixel)
pixelShiftByComponent()
PIXCMAP * pixcmapCreate(l_int32 depth)
pixcmapCreate()
l_ok pixcmapGetNearestGrayIndex(PIXCMAP *cmap, l_int32 val, l_int32 *pindex)
pixcmapGetNearestGrayIndex()
l_int32 pixcmapGetIndex(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapGetIndex()
l_ok numaGetIValue(NUMA *na, l_int32 index, l_int32 *pival)
numaGetIValue()
l_ok pixcmapToArrays(PIXCMAP *cmap, l_int32 **prmap, l_int32 **pgmap, l_int32 **pbmap, l_int32 **pamap)
pixcmapToArrays()
PIXCMAP * pixcmapColorToGray(PIXCMAP *cmaps, l_float32 rwt, l_float32 gwt, l_float32 bwt)
pixcmapColorToGray()
l_ok pixcmapContrastTRC(PIXCMAP *cmap, l_float32 factor)
pixcmapContrastTRC()
l_ok pixcmapGetColor(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
pixcmapGetColor()
l_ok pixcmapIsValid(PIXCMAP *cmap, l_int32 *pvalid)
pixcmapIsValid()
l_ok composeRGBAPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval, l_uint32 *ppixel)
composeRGBAPixel()
l_ok pixcmapAddNewColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapAddNewColor()
FILE * fopenWriteWinTempfile()
fopenWriteWinTempfile()
l_ok pixcmapSetBlackAndWhite(PIXCMAP *cmap, l_int32 setblack, l_int32 setwhite)
pixcmapSetBlackAndWhite()
PIXCMAP * pixcmapDeserializeFromMemory(l_uint8 *data, l_int32 cpc, l_int32 ncolors)
pixcmapDeserializeFromMemory()
l_int32 pixcmapGetFreeCount(PIXCMAP *cmap)
pixcmapGetFreeCount()
l_ok pixcmapShiftByComponent(PIXCMAP *cmap, l_uint32 srcval, l_uint32 dstval)
pixcmapShiftByComponent()
l_ok pixcmapIsOpaque(PIXCMAP *cmap, l_int32 *popaque)
pixcmapIsOpaque()
l_ok pixcmapAddNearestColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pindex)
pixcmapAddNearestColor()
l_ok pixcmapSetAlpha(PIXCMAP *cmap, l_int32 index, l_int32 aval)
pixcmapSetAlpha()
NUMA * numaContrastTRC(l_float32 factor)
numaContrastTRC()
l_ok pixcmapResetColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapResetColor()
l_ok pixcmapHasColor(PIXCMAP *cmap, l_int32 *pcolor)
pixcmapHasColor()
void numaDestroy(NUMA **pna)
numaDestroy()
FILE * fopenWriteStream(const char *filename, const char *modestring)
fopenWriteStream()
l_ok pixcmapUsableColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pusable)
pixcmapUsableColor()
FILE * fopenReadStream(const char *filename)
fopenReadStream()
l_uint8 * l_binaryReadStream(FILE *fp, size_t *pnbytes)
l_binaryReadStream()
l_ok pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex)
pixcmapAddBlackOrWhite()
l_ok pixcmapGetColor32(PIXCMAP *cmap, l_int32 index, l_uint32 *pval32)
pixcmapGetColor32()
l_ok pixcmapToRGBTable(PIXCMAP *cmap, l_uint32 **ptab, l_int32 *pncolors)
pixcmapToRGBTable()
l_int32 pixcmapGetCount(PIXCMAP *cmap)
pixcmapGetCount()
PIXCMAP * pixcmapCopy(PIXCMAP *cmaps)
pixcmapCopy()
l_ok pixcmapGetRGBA(PIXCMAP *cmap, l_int32 index, l_int32 *prval, l_int32 *pgval, l_int32 *pbval, l_int32 *paval)
pixcmapGetRGBA()
l_ok pixcmapGetDistanceToColor(PIXCMAP *cmap, l_int32 index, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 *pdist)
pixcmapGetDistanceToColor()
l_ok pixcmapAddColor(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval)
pixcmapAddColor()
void extractRGBValues(l_uint32 pixel, l_int32 *prval, l_int32 *pgval, l_int32 *pbval)
extractRGBValues()
l_ok pixcmapGammaTRC(PIXCMAP *cmap, l_float32 gamma, l_int32 minval, l_int32 maxval)
pixcmapGammaTRC()
l_ok pixcmapAddRGBA(PIXCMAP *cmap, l_int32 rval, l_int32 gval, l_int32 bval, l_int32 aval)
pixcmapAddRGBA()
l_ok pixcmapGetRankIntensity(PIXCMAP *cmap, l_float32 rankval, l_int32 *pindex)
pixcmapGetRankIntensity()
l_ok pixcmapClear(PIXCMAP *cmap)
pixcmapClear()
PIXCMAP * pixcmapCreateRandom(l_int32 depth, l_int32 hasblack, l_int32 haswhite)
pixcmapCreateRandom()