66 #include "allheaders.h" 68 static l_float64 *generateRandomNumberArray(l_int32 size);
70 l_float32 xfreq, l_float32 yfreq,
71 l_float64 *randa, l_int32 nx, l_int32 ny,
72 l_int32 xp, l_int32 yp,
73 l_float32 *px, l_float32 *py);
75 #define USE_SIN_TABLE 0 79 static const l_float32 L_DEFAULT_RED_WEIGHT = 0.0;
80 static const l_float32 L_DEFAULT_GREEN_WEIGHT = 0.7;
81 static const l_float32 L_DEFAULT_BLUE_WEIGHT = 0.3;
115 l_float32 xmag[] = {7.0f, 5.0f, 4.0f, 3.0f};
116 l_float32 ymag[] = {10.0f, 8.0f, 6.0f, 5.0f};
117 l_float32 xfreq[] = {0.12f, 0.10f, 0.10f, 0.11f};
118 l_float32 yfreq[] = {0.15f, 0.13f, 0.13f, 0.11f};
119 PIX *pixg, *pixgb, *pixw, *pixd;
121 PROCNAME(
"pixSimpleCaptcha");
124 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
125 if (nterms < 1 || nterms > 4)
126 return (
PIX *)ERROR_PTR(
"nterms must be in {1,2,3,4}", procName, NULL);
132 nterms, nterms, seed, 255);
191 l_int32 w, h, d, i, j, wpls, wpld, val;
192 l_uint32 *datas, *datad, *lined;
197 PROCNAME(
"pixRandomHarmonicWarp");
200 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
203 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
211 randa = generateRandomNumberArray(5 * (nx + ny));
214 wpls = pixGetWpl(pixs);
216 wpld = pixGetWpl(pixd);
218 for (i = 0; i < h; i++) {
219 lined = datad + i * wpld;
220 for (j = 0; j < w; j++) {
237 generateRandomNumberArray(l_int32 size)
242 PROCNAME(
"generateRandomNumberArray");
244 if ((randa = (l_float64 *)LEPT_CALLOC(size,
sizeof(l_float64))) == NULL)
245 return (l_float64 *)ERROR_PTR(
"calloc fail for randa", procName, NULL);
248 for (i = 0; i < size; i++)
249 randa[i] = 0.5 * (1.0 + (l_float64)rand() / (l_float64)RAND_MAX);
274 l_float64 twopi, x, y, anglex, angley;
277 for (i = 0, x = xp; i < nx; i++) {
278 anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2];
279 angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4];
280 x += xmag * randa[3 * i] * sin(anglex) * sin(angley);
282 for (i = nx, y = yp; i < nx + ny; i++) {
283 angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2];
284 anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4];
285 y += ymag * randa[3 * i] * sin(angley) * sin(anglex);
298 static l_int32 applyWarpTransformLUT(l_float32 xmag, l_float32 ymag,
299 l_float32 xfreq, l_float32 yfreq,
300 l_float64 *randa, l_int32 nx, l_int32 ny,
301 l_int32 xp, l_int32 yp, l_float32 *lut,
302 l_int32 npts, l_float32 *px, l_float32 *py);
303 static l_int32 makeSinLUT(l_int32 npts,
NUMA **pna);
304 static l_float32 getSinFromLUT(l_float32 *tab, l_int32 npts,
328 pixRandomHarmonicWarpLUT(
PIX *pixs,
338 l_int32 w, h, d, i, j, wpls, wpld, val, npts;
339 l_uint32 *datas, *datad, *lined;
346 PROCNAME(
"pixRandomHarmonicWarp");
349 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
352 return (
PIX *)ERROR_PTR(
"pixs not 8 bpp", procName, NULL);
360 randa = generateRandomNumberArray(5 * (nx + ny));
363 wpls = pixGetWpl(pixs);
365 wpld = pixGetWpl(pixd);
368 makeSinLUT(npts, &na);
370 for (i = 0; i < h; i++) {
371 lined = datad + i * wpld;
372 for (j = 0; j < w; j++) {
373 applyWarpTransformLUT(xmag, ymag, xfreq, yfreq, randa, nx, ny,
374 j, i, lut, npts, &x, &y);
394 applyWarpTransformLUT(l_float32 xmag,
409 l_float64 twopi, x, y, anglex, angley, sanglex, sangley;
412 for (i = 0, x = xp; i < nx; i++) {
413 anglex = xfreq * randa[3 * i + 1] * xp + twopi * randa[3 * i + 2];
414 angley = yfreq * randa[3 * i + 3] * yp + twopi * randa[3 * i + 4];
415 sanglex = getSinFromLUT(lut, npts, anglex);
416 sangley = getSinFromLUT(lut, npts, angley);
417 x += xmag * randa[3 * i] * sanglex * sangley;
419 for (i = nx, y = yp; i < nx + ny; i++) {
420 angley = yfreq * randa[3 * i + 1] * yp + twopi * randa[3 * i + 2];
421 anglex = xfreq * randa[3 * i + 3] * xp + twopi * randa[3 * i + 4];
422 sanglex = getSinFromLUT(lut, npts, anglex);
423 sangley = getSinFromLUT(lut, npts, angley);
424 y += ymag * randa[3 * i] * sangley * sanglex;
434 makeSinLUT(l_int32 npts,
438 l_float32 delx, fval;
441 PROCNAME(
"makeSinLUT");
444 return ERROR_INT(
"&na not defined", procName, 1);
447 return ERROR_INT(
"npts < 2", procName, 1);
451 delx = 3.14159265 / (l_float32)npts;
453 for (i = 0; i < n / 2; i++)
455 for (i = 0; i < n / 2; i++) {
466 getSinFromLUT(l_float32 *tab,
471 l_float32 twopi, invtwopi, findex, diff;
475 invtwopi = 0.1591549;
477 radang += twopi * (1.0 - (l_int32)(-radang * invtwopi));
478 else if (radang > 0.0)
479 radang -= twopi * (l_int32)(radang * invtwopi);
482 findex = (2.0 * (l_float32)npts) * (radang * invtwopi);
483 index = (l_int32)findex;
484 if (index == 2 * npts)
486 diff = findex - index;
487 return (1.0 - diff) * tab[index] + diff * tab[index + 1];
594 l_int32 w, h, zshift;
596 BOX *boxleft, *boxright;
597 PIX *pix1, *pix2, *pix3, *pix4, *pixr, *pixg, *pixb;
598 PIX *pixv1, *pixv2, *pixv3, *pixv4;
602 PROCNAME(
"pixWarpStereoscopic");
605 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
614 boxright =
boxCreate(w / 2, 0, w - w / 2, h);
615 if (ybendt != 0 || ybendb != 0) {
674 if (zshiftt == 0 && zshiftb == 0) {
676 }
else if (zshiftt == zshiftb) {
679 angle = (l_float32)(zshiftb - zshiftt) /
680 L_MAX(1.0, (l_float32)pixGetHeight(pixrs));
681 zshift = (zshiftt + zshiftb) / 2;
742 PROCNAME(
"pixStretchHorizontal");
745 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
746 d = pixGetDepth(pixs);
747 if (d != 1 && d != 8 && d != 32)
748 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", procName, NULL);
750 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
752 return (
PIX *)ERROR_PTR(
"invalid type", procName, NULL);
754 return (
PIX *)ERROR_PTR(
"invalid operation", procName, NULL);
756 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
758 L_WARNING(
"Using sampling for 1 bpp\n", procName);
791 l_int32 i, j, jd, w, wm, h, d, wpls, wpld, val;
792 l_uint32 *datas, *datad, *lines, *lined;
795 PROCNAME(
"pixStretchHorizontalSampled");
798 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
800 if (d != 1 && d != 8 && d != 32)
801 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", procName, NULL);
803 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
805 return (
PIX *)ERROR_PTR(
"invalid type", procName, NULL);
807 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
813 wpls = pixGetWpl(pixs);
814 wpld = pixGetWpl(pixd);
816 for (jd = 0; jd < w; jd++) {
819 j = jd - (hmax * (wm - jd)) / wm;
821 j = jd - (hmax * (wm - jd) * (wm - jd)) / (wm * wm);
824 j = jd - (hmax * jd) / wm;
826 j = jd - (hmax * jd * jd) / (wm * wm);
828 if (j < 0 || j > w - 1)
continue;
833 for (i = 0; i < h; i++) {
834 lines = datas + i * wpls;
835 lined = datad + i * wpld;
842 for (i = 0; i < h; i++) {
843 lines = datas + i * wpls;
844 lined = datad + i * wpld;
850 for (i = 0; i < h; i++) {
851 lines = datas + i * wpls;
852 lined = datad + i * wpld;
853 lined[jd] = lines[j];
857 L_ERROR(
"invalid depth: %d\n", procName, d);
889 l_int32 i, j, jd, jp, jf, w, wm, h, d, wpls, wpld, val, rval, gval, bval;
890 l_uint32 word0, word1;
891 l_uint32 *datas, *datad, *lines, *lined;
894 PROCNAME(
"pixStretchHorizontalLI");
897 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
899 if (d != 8 && d != 32)
900 return (
PIX *)ERROR_PTR(
"pixs not 8 or 32 bpp", procName, NULL);
902 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
904 return (
PIX *)ERROR_PTR(
"invalid type", procName, NULL);
906 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
913 wpls = pixGetWpl(pixs);
914 wpld = pixGetWpl(pixd);
916 for (jd = 0; jd < w; jd++) {
919 j = 64 * jd - 64 * (hmax * (wm - jd)) / wm;
921 j = 64 * jd - 64 * (hmax * (wm - jd) * (wm - jd)) / (wm * wm);
924 j = 64 * jd - 64 * (hmax * jd) / wm;
926 j = 64 * jd - 64 * (hmax * jd * jd) / (wm * wm);
930 if (jp < 0 || jp > wm)
continue;
936 for (i = 0; i < h; i++) {
937 lines = datas + i * wpls;
938 lined = datad + i * wpld;
944 for (i = 0; i < h; i++) {
945 lines = datas + i * wpls;
946 lined = datad + i * wpld;
954 for (i = 0; i < h; i++) {
955 lines = datas + i * wpls;
956 lined = datad + i * wpld;
957 word0 = *(lines + jp);
958 word1 = *(lines + jp + 1);
959 rval = ((63 - jf) * ((word0 >> L_RED_SHIFT) & 0xff) +
960 jf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63;
961 gval = ((63 - jf) * ((word0 >> L_GREEN_SHIFT) & 0xff) +
962 jf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63;
963 bval = ((63 - jf) * ((word0 >> L_BLUE_SHIFT) & 0xff) +
964 jf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63;
968 for (i = 0; i < h; i++) {
969 lines = datas + i * wpls;
970 lined = datad + i * wpld;
971 lined[jd] = lines[jp];
976 L_ERROR(
"invalid depth: %d\n", procName, d);
1028 PROCNAME(
"pixQuadraticVShear");
1031 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1033 if (d != 1 && d != 8 && d != 32)
1034 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", procName, NULL);
1036 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
1038 return (
PIX *)ERROR_PTR(
"invalid operation", procName, NULL);
1040 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
1042 if (vmaxt == 0 && vmaxb == 0)
1046 L_WARNING(
"no interpolation for 1 bpp; using sampling\n", procName);
1079 l_int32 i, j, id, w, h, d, wm, hm, wpls, wpld, val;
1080 l_uint32 *datas, *datad, *lines, *lined;
1081 l_float32 delrowt, delrowb, denom1, denom2, dely;
1084 PROCNAME(
"pixQuadraticVShearSampled");
1087 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1089 if (d != 1 && d != 8 && d != 32)
1090 return (
PIX *)ERROR_PTR(
"pixs not 1, 8 or 32 bpp", procName, NULL);
1092 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
1094 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
1096 if (vmaxt == 0 && vmaxb == 0)
1103 wpls = pixGetWpl(pixs);
1104 wpld = pixGetWpl(pixd);
1107 denom1 = 1. / (l_float32)h;
1108 denom2 = 1. / (l_float32)(wm * wm);
1109 for (j = 0; j < w; j++) {
1111 delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2;
1112 delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2;
1114 delrowt = (l_float32)(vmaxt * j * j) * denom2;
1115 delrowb = (l_float32)(vmaxb * j * j) * denom2;
1120 for (
id = 0;
id < h;
id++) {
1121 dely = (delrowt * (hm - id) + delrowb *
id) * denom1;
1122 i =
id - (l_int32)(dely + 0.5);
1123 if (i < 0 || i > hm)
continue;
1124 lines = datas + i * wpls;
1125 lined = datad +
id * wpld;
1132 for (
id = 0;
id < h;
id++) {
1133 dely = (delrowt * (hm - id) + delrowb *
id) * denom1;
1134 i =
id - (l_int32)(dely + 0.5);
1135 if (i < 0 || i > hm)
continue;
1136 lines = datas + i * wpls;
1137 lined = datad +
id * wpld;
1143 for (
id = 0;
id < h;
id++) {
1144 dely = (delrowt * (hm - id) + delrowb *
id) * denom1;
1145 i =
id - (l_int32)(dely + 0.5);
1146 if (i < 0 || i > hm)
continue;
1147 lines = datas + i * wpls;
1148 lined = datad +
id * wpld;
1149 lined[j] = lines[j];
1153 L_ERROR(
"invalid depth: %d\n", procName, d);
1185 l_int32 i, j, id, yp, yf, w, h, d, wm, hm, wpls, wpld;
1186 l_int32 val, rval, gval, bval;
1187 l_uint32 word0, word1;
1188 l_uint32 *datas, *datad, *lines, *lined;
1189 l_float32 delrowt, delrowb, denom1, denom2, dely;
1193 PROCNAME(
"pixQuadraticVShearLI");
1196 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
1199 return (
PIX *)ERROR_PTR(
"pixs is 1 bpp", procName, NULL);
1200 cmap = pixGetColormap(pixs);
1201 if (d != 8 && d != 32 && !cmap)
1202 return (
PIX *)ERROR_PTR(
"pixs not 8, 32 bpp, or cmap", procName, NULL);
1204 return (
PIX *)ERROR_PTR(
"invalid direction", procName, NULL);
1206 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
1208 if (vmaxt == 0 && vmaxb == 0)
1216 d = pixGetDepth(pix);
1217 if (d != 8 && d != 32) {
1219 return (
PIX *)ERROR_PTR(
"invalid depth", procName, NULL);
1227 wpls = pixGetWpl(pix);
1228 wpld = pixGetWpl(pixd);
1231 denom1 = 1.0 / (l_float32)h;
1232 denom2 = 1.0 / (l_float32)(wm * wm);
1233 for (j = 0; j < w; j++) {
1235 delrowt = (l_float32)(vmaxt * (wm - j) * (wm - j)) * denom2;
1236 delrowb = (l_float32)(vmaxb * (wm - j) * (wm - j)) * denom2;
1238 delrowt = (l_float32)(vmaxt * j * j) * denom2;
1239 delrowb = (l_float32)(vmaxb * j * j) * denom2;
1244 for (
id = 0;
id < h;
id++) {
1245 dely = (delrowt * (hm - id) + delrowb *
id) * denom1;
1246 i = 64 *
id - (l_int32)(64.0 * dely);
1249 if (yp < 0 || yp > hm)
continue;
1250 lines = datas + yp * wpls;
1251 lined = datad +
id * wpld;
1262 for (
id = 0;
id < h;
id++) {
1263 dely = (delrowt * (hm - id) + delrowb *
id) * denom1;
1264 i = 64 *
id - (l_int32)(64.0 * dely);
1267 if (yp < 0 || yp > hm)
continue;
1268 lines = datas + yp * wpls;
1269 lined = datad +
id * wpld;
1271 word0 = *(lines + j);
1272 word1 = *(lines + wpls + j);
1273 rval = ((63 - yf) * ((word0 >> L_RED_SHIFT) & 0xff) +
1274 yf * ((word1 >> L_RED_SHIFT) & 0xff) + 31) / 63;
1275 gval = ((63 - yf) * ((word0 >> L_GREEN_SHIFT) & 0xff) +
1276 yf * ((word1 >> L_GREEN_SHIFT) & 0xff) + 31) / 63;
1277 bval = ((63 - yf) * ((word0 >> L_BLUE_SHIFT) & 0xff) +
1278 yf * ((word1 >> L_BLUE_SHIFT) & 0xff) + 31) / 63;
1281 lined[j] = lines[j];
1286 L_ERROR(
"invalid depth: %d\n", procName, d);
1338 l_int32 i, j, w, h, wpl1, wpl2, rval, gval, bval;
1339 l_uint32 word1, word2;
1340 l_uint32 *data1, *data2, *datad, *line1, *line2, *lined;
1344 PROCNAME(
"pixStereoFromPair");
1347 return (
PIX *)ERROR_PTR(
"pix1, pix2 not both defined", procName, NULL);
1348 if (pixGetDepth(pix1) != 32 || pixGetDepth(pix2) != 32)
1349 return (
PIX *)ERROR_PTR(
"pix1, pix2 not both 32 bpp", procName, NULL);
1353 if (rwt == 0.0 && gwt == 0.0 && bwt == 0.0) {
1354 rwt = L_DEFAULT_RED_WEIGHT;
1355 gwt = L_DEFAULT_GREEN_WEIGHT;
1356 bwt = L_DEFAULT_BLUE_WEIGHT;
1358 sum = rwt + gwt + bwt;
1359 if (L_ABS(sum - 1.0) > 0.0001) {
1360 L_WARNING(
"weights don't sum to 1; maintaining ratios\n", procName);
1371 wpl1 = pixGetWpl(pix1);
1372 wpl2 = pixGetWpl(pix2);
1373 for (i = 0; i < h; i++) {
1374 line1 = data1 + i * wpl1;
1375 line2 = data2 + i * wpl2;
1376 lined = datad + i * wpl1;
1377 for (j = 0; j < w; j++) {
1378 word1 = *(line1 + j);
1379 word2 = *(line2 + j);
1380 rval = (l_int32)(rwt * ((word1 >> L_RED_SHIFT) & 0xff) +
1381 gwt * ((word1 >> L_GREEN_SHIFT) & 0xff) +
1382 bwt * ((word1 >> L_BLUE_SHIFT) & 0xff) + 0.5);
1383 gval = (word2 >> L_GREEN_SHIFT) & 0xff;
1384 bval = (word2 >> L_BLUE_SHIFT) & 0xff;
PIX * pixWarpStereoscopic(PIX *pixs, l_int32 zbend, l_int32 zshiftt, l_int32 zshiftb, l_int32 ybendt, l_int32 ybendb, l_int32 redleft)
pixWarpStereoscopic()
l_ok numaGetFValue(NUMA *na, l_int32 index, l_float32 *pval)
numaGetFValue()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * pixConvertTo32(PIX *pixs)
pixConvertTo32()
l_ok numaAddNumber(NUMA *na, l_float32 val)
numaAddNumber()
PIX * pixSimpleCaptcha(PIX *pixs, l_int32 border, l_int32 nterms, l_uint32 seed, l_uint32 color, l_int32 cmapflag)
pixSimpleCaptcha()
l_ok pixRasterop(PIX *pixd, l_int32 dx, l_int32 dy, l_int32 dw, l_int32 dh, l_int32 op, PIX *pixs, l_int32 sx, l_int32 sy)
pixRasterop()
PIX * pixQuadraticVShearLI(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor)
pixQuadraticVShearLI()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
PIX * pixHShearLI(PIX *pixs, l_int32 yloc, l_float32 radang, l_int32 incolor)
pixHShearLI()
NUMA * numaCreate(l_int32 n)
numaCreate()
l_uint32 * pixGetData(PIX *pix)
pixGetData()
l_ok linearInterpolatePixelGray(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_int32 grayval, l_int32 *pval)
linearInterpolatePixelGray()
PIX * pixStretchHorizontalSampled(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor)
pixStretchHorizontalSampled()
static l_int32 applyWarpTransform(l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_float64 *randa, l_int32 nx, l_int32 ny, l_int32 xp, l_int32 yp, l_float32 *px, l_float32 *py)
applyWarpTransform()
#define GET_DATA_BIT(pdata, n)
PIX * pixCreateTemplate(PIX *pixs)
pixCreateTemplate()
PIX * pixColorizeGray(PIX *pixs, l_uint32 color, l_int32 cmapflag)
pixColorizeGray()
PIX * pixClipRectangle(PIX *pixs, BOX *box, BOX **pboxc)
pixClipRectangle()
PIX * pixQuadraticVShear(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 operation, l_int32 incolor)
pixQuadraticVShear()
PIX * pixStretchHorizontalLI(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 incolor)
pixStretchHorizontalLI()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
#define SET_DATA_BYTE(pdata, n, val)
l_ok pixSetBlackOrWhite(PIX *pixs, l_int32 op)
pixSetBlackOrWhite()
PIX * pixStereoFromPair(PIX *pix1, PIX *pix2, l_float32 rwt, l_float32 gwt, l_float32 bwt)
pixStereoFromPair()
#define GET_DATA_BYTE(pdata, n)
l_ok numaSetParameters(NUMA *na, l_float32 startx, l_float32 delx)
numaSetParameters()
PIX * pixCreateRGBImage(PIX *pixr, PIX *pixg, PIX *pixb)
pixCreateRGBImage()
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
PIX * pixQuadraticVShearSampled(PIX *pixs, l_int32 dir, l_int32 vmaxt, l_int32 vmaxb, l_int32 incolor)
pixQuadraticVShearSampled()
PIX * pixRandomHarmonicWarp(PIX *pixs, l_float32 xmag, l_float32 ymag, l_float32 xfreq, l_float32 yfreq, l_int32 nx, l_int32 ny, l_uint32 seed, l_int32 grayval)
pixRandomHarmonicWarp()
void numaDestroy(NUMA **pna)
numaDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_float32 * numaGetFArray(NUMA *na, l_int32 copyflag)
numaGetFArray()
PIX * pixStretchHorizontal(PIX *pixs, l_int32 dir, l_int32 type, l_int32 hmax, l_int32 operation, l_int32 incolor)
pixStretchHorizontal()
PIX * pixCopy(PIX *pixd, PIX *pixs)
pixCopy()
void boxDestroy(BOX **pbox)
boxDestroy()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
PIX * pixTranslate(PIX *pixd, PIX *pixs, l_int32 hshift, l_int32 vshift, l_int32 incolor)
pixTranslate()
BOX * boxCreate(l_int32 x, l_int32 y, l_int32 w, l_int32 h)
boxCreate()
#define SET_DATA_BIT(pdata, n)