112 #include <config_auto.h> 117 #include "allheaders.h" 119 extern l_float32 AlphaMaskBorderVals[2];
152 PROCNAME(
"pixProjectiveSampledPta");
155 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
157 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
159 return (
PIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
161 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
163 return (
PIX *)ERROR_PTR(
"ptas count not 4", procName, NULL);
165 return (
PIX *)ERROR_PTR(
"ptad count not 4", procName, NULL);
198 l_int32 i, j, w, h, d, x, y, wpls, wpld, color, cmapindex;
200 l_uint32 *datas, *datad, *lines, *lined;
204 PROCNAME(
"pixProjectiveSampled");
207 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
209 return (
PIX *)ERROR_PTR(
"vc not defined", procName, NULL);
211 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
213 if (d != 1 && d != 2 && d != 4 && d != 8 && d != 32)
214 return (
PIX *)ERROR_PTR(
"depth not 1, 2, 4, 8 or 16", procName, NULL);
218 if ((cmap = pixGetColormap(pixs)) != NULL) {
236 wpls = pixGetWpl(pixs);
238 wpld = pixGetWpl(pixd);
239 for (i = 0; i < h; i++) {
240 lined = datad + i * wpld;
241 for (j = 0; j < w; j++) {
243 if (x < 0 || y < 0 || x >=w || y >= h)
245 lines = datas + y * wpls;
252 }
else if (d == 32) {
294 PIX *pixt1, *pixt2, *pixd;
296 PROCNAME(
"pixProjectivePta");
299 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
301 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
303 return (
PIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
305 return (
PIX *)ERROR_PTR(
"invalid incolor", procName, NULL);
307 return (
PIX *)ERROR_PTR(
"ptas count not 4", procName, NULL);
309 return (
PIX *)ERROR_PTR(
"ptad count not 4", procName, NULL);
311 if (pixGetDepth(pixs) == 1)
316 d = pixGetDepth(pixt1);
321 d = pixGetDepth(pixt2);
329 colorval = 0xffffff00;
363 PIX *pixt1, *pixt2, *pixd;
365 PROCNAME(
"pixProjective");
368 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
370 return (
PIX *)ERROR_PTR(
"vc not defined", procName, NULL);
372 if (pixGetDepth(pixs) == 1)
377 d = pixGetDepth(pixt1);
382 d = pixGetDepth(pixt2);
390 colorval = 0xffffff00;
421 PROCNAME(
"pixProjectivePtaColor");
424 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
426 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
428 return (
PIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
429 if (pixGetDepth(pixs) != 32)
430 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", procName, NULL);
432 return (
PIX *)ERROR_PTR(
"ptas count not 4", procName, NULL);
434 return (
PIX *)ERROR_PTR(
"ptad count not 4", procName, NULL);
458 l_int32 i, j, w, h, d, wpls, wpld;
460 l_uint32 *datas, *datad, *lined;
462 PIX *pix1, *pix2, *pixd;
464 PROCNAME(
"pixProjectiveColor");
467 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
470 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", procName, NULL);
472 return (
PIX *)ERROR_PTR(
"vc not defined", procName, NULL);
475 wpls = pixGetWpl(pixs);
479 wpld = pixGetWpl(pixd);
482 for (i = 0; i < h; i++) {
483 lined = datad + i * wpld;
484 for (j = 0; j < w; j++) {
494 if (pixGetSpp(pixs) == 4) {
524 PROCNAME(
"pixProjectivePtaGray");
527 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
529 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
531 return (
PIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
532 if (pixGetDepth(pixs) != 8)
533 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", procName, NULL);
535 return (
PIX *)ERROR_PTR(
"ptas count not 4", procName, NULL);
537 return (
PIX *)ERROR_PTR(
"ptad count not 4", procName, NULL);
562 l_int32 i, j, w, h, wpls, wpld, val;
563 l_uint32 *datas, *datad, *lined;
567 PROCNAME(
"pixProjectiveGray");
570 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
572 if (pixGetDepth(pixs) != 8)
573 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", procName, NULL);
575 return (
PIX *)ERROR_PTR(
"vc not defined", procName, NULL);
578 wpls = pixGetWpl(pixs);
582 wpld = pixGetWpl(pixd);
585 for (i = 0; i < h; i++) {
586 lined = datad + i * wpld;
587 for (j = 0; j < w; j++) {
655 PIX *pixd, *pixb1, *pixb2, *pixg2, *pixga;
658 PROCNAME(
"pixProjectivePtaWithAlpha");
661 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
663 if (d != 32 && pixGetColormap(pixs) == NULL)
664 return (
PIX *)ERROR_PTR(
"pixs not cmapped or 32 bpp", procName, NULL);
665 if (pixg && pixGetDepth(pixg) != 8) {
666 L_WARNING(
"pixg not 8 bpp; using 'fract' transparent alpha\n",
670 if (!pixg && (fract < 0.0 || fract > 1.0)) {
671 L_WARNING(
"invalid fract; using 1.0 (fully transparent)\n", procName);
674 if (!pixg && fract == 0.0)
675 L_WARNING(
"fully opaque alpha; image will not be blended\n", procName);
677 return (
PIX *)ERROR_PTR(
"ptad not defined", procName, NULL);
679 return (
PIX *)ERROR_PTR(
"ptas not defined", procName, NULL);
700 if (ws > 10 && hs > 10) {
702 (l_int32)(255.0 * fract * AlphaMaskBorderVals[0]));
704 (l_int32)(255.0 * fract * AlphaMaskBorderVals[1]));
783 l_float32 x1, y1, x2, y2, x3, y3, x4, y4;
787 PROCNAME(
"getProjectiveXformCoeffs");
790 return ERROR_INT(
"ptas not defined", procName, 1);
792 return ERROR_INT(
"ptad not defined", procName, 1);
794 return ERROR_INT(
"&vc not defined", procName, 1);
796 b = (l_float32 *)LEPT_CALLOC(8,
sizeof(l_float32));
807 for (i = 0; i < 8; i++)
808 a[i] = (l_float32 *)LEPT_CALLOC(8,
sizeof(l_float32));
812 a[0][6] = -x1 * b[0];
813 a[0][7] = -y1 * b[0];
817 a[1][6] = -x1 * b[1];
818 a[1][7] = -y1 * b[1];
822 a[2][6] = -x2 * b[2];
823 a[2][7] = -y2 * b[2];
827 a[3][6] = -x2 * b[3];
828 a[3][7] = -y2 * b[3];
832 a[4][6] = -x3 * b[4];
833 a[4][7] = -y3 * b[4];
837 a[5][6] = -x3 * b[5];
838 a[5][7] = -y3 * b[5];
842 a[6][6] = -x4 * b[6];
843 a[6][7] = -y4 * b[6];
847 a[7][6] = -x4 * b[7];
848 a[7][7] = -y4 * b[7];
852 for (i = 0; i < 8; i++)
883 PROCNAME(
"projectiveXformSampledPt");
886 return ERROR_INT(
"vc not defined", procName, 1);
888 if ((denom = vc[6] * x + vc[7] * y + 1.0) == 0.0)
889 return ERROR_INT(
"denom = 0.0", procName, 1);
890 factor = 1.0 / denom;
891 *pxp = (l_int32)(factor * (vc[0] * x + vc[1] * y + vc[2]) + 0.5);
892 *pyp = (l_int32)(factor * (vc[3] * x + vc[4] * y + vc[5]) + 0.5);
921 PROCNAME(
"projectiveXformPt");
924 return ERROR_INT(
"vc not defined", procName, 1);
926 if ((denom = vc[6] * x + vc[7] * y + 1.0) == 0.0)
927 return ERROR_INT(
"denom = 0.0", procName, 1);
928 factor = 1.0 / denom;
929 *pxp = factor * (vc[0] * x + vc[1] * y + vc[2]);
930 *pyp = factor * (vc[3] * x + vc[4] * y + vc[5]);
l_int32 gaussjordan(l_float32 **a, l_float32 *b, l_int32 n)
gaussjordan()
PIX * pixProjectivePtaColor(PIX *pixs, PTA *ptad, PTA *ptas, l_uint32 colorval)
pixProjectivePtaColor()
PIX * pixProjectiveSampled(PIX *pixs, l_float32 *vc, l_int32 incolor)
pixProjectiveSampled()
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * pixProjectivePtaGray(PIX *pixs, PTA *ptad, PTA *ptas, l_uint8 grayval)
pixProjectivePtaGray()
l_ok pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixSetRGBComponent()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
PIX * pixProjective(PIX *pixs, l_float32 *vc, l_int32 incolor)
pixProjective()
l_ok projectiveXformSampledPt(l_float32 *vc, l_int32 x, l_int32 y, l_int32 *pxp, l_int32 *pyp)
projectiveXformSampledPt()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixCreate(l_int32 width, l_int32 height, l_int32 depth)
pixCreate()
l_ok pixSetAll(PIX *pix)
pixSetAll()
#define SET_DATA_QBIT(pdata, n, val)
l_int32 ptaGetCount(PTA *pta)
ptaGetCount()
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()
#define GET_DATA_BIT(pdata, n)
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
PIX * pixAddBorder(PIX *pixs, l_int32 npix, l_uint32 val)
pixAddBorder()
#define SET_DATA_DIBIT(pdata, n, val)
l_ok linearInterpolatePixelColor(l_uint32 *datas, l_int32 wpls, l_int32 w, l_int32 h, l_float32 x, l_float32 y, l_uint32 colorval, l_uint32 *pval)
linearInterpolatePixelColor()
l_ok pixSetAllArbitrary(PIX *pix, l_uint32 val)
pixSetAllArbitrary()
PIX * pixProjectivePtaWithAlpha(PIX *pixs, PTA *ptad, PTA *ptas, PIX *pixg, l_float32 fract, l_int32 border)
pixProjectivePtaWithAlpha()
PIX * pixProjectivePta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor)
pixProjectivePta()
PIX * pixProjectiveGray(PIX *pixs, l_float32 *vc, l_uint8 grayval)
pixProjectiveGray()
l_ok pixClearAll(PIX *pix)
pixClearAll()
l_ok pixSetBorderRingVal(PIX *pixs, l_int32 dist, l_uint32 val)
pixSetBorderRingVal()
l_ok projectiveXformPt(l_float32 *vc, l_int32 x, l_int32 y, l_float32 *pxp, l_float32 *pyp)
projectiveXformPt()
l_ok ptaGetPt(PTA *pta, l_int32 index, l_float32 *px, l_float32 *py)
ptaGetPt()
#define SET_DATA_BYTE(pdata, n, val)
#define GET_DATA_QBIT(pdata, n)
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BIT_VAL(pdata, n, val)
PIX * pixClone(PIX *pixs)
pixClone()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
l_ok getProjectiveXformCoeffs(PTA *ptas, PTA *ptad, l_float32 **pvc)
getProjectiveXformCoeffs()
l_ok pixcmapAddBlackOrWhite(PIXCMAP *cmap, l_int32 color, l_int32 *pindex)
pixcmapAddBlackOrWhite()
#define GET_DATA_DIBIT(pdata, n)
void ptaDestroy(PTA **ppta)
ptaDestroy()
PIX * pixResizeToMatch(PIX *pixs, PIX *pixt, l_int32 w, l_int32 h)
pixResizeToMatch()
PTA * ptaTransform(PTA *ptas, l_int32 shiftx, l_int32 shifty, l_float32 scalex, l_float32 scaley)
ptaTransform()
PIX * pixProjectiveSampledPta(PIX *pixs, PTA *ptad, PTA *ptas, l_int32 incolor)
pixProjectiveSampledPta()
PIX * pixProjectiveColor(PIX *pixs, l_float32 *vc, l_uint32 colorval)
pixProjectiveColor()