125 #include <config_auto.h>
130 #include "allheaders.h"
132 static void rotateAMColorLow(l_uint32 *datad, l_int32 w, l_int32 h,
133 l_int32 wpld, l_uint32 *datas, l_int32 wpls,
134 l_float32 angle, l_uint32 colorval);
135 static void rotateAMGrayLow(l_uint32 *datad, l_int32 w, l_int32 h,
136 l_int32 wpld, l_uint32 *datas, l_int32 wpls,
137 l_float32 angle, l_uint8 grayval);
138 static void rotateAMColorCornerLow(l_uint32 *datad, l_int32 w, l_int32 h,
139 l_int32 wpld, l_uint32 *datas,
140 l_int32 wpls, l_float32 angle,
142 static void rotateAMGrayCornerLow(l_uint32 *datad, l_int32 w, l_int32 h,
143 l_int32 wpld, l_uint32 *datas, l_int32 wpls,
144 l_float32 angle, l_uint8 grayval);
147 l_int32 wpld, l_uint32 *datas, l_int32 wpls,
148 l_float32 angle, l_uint32 colorval);
150 static const l_float32 MinAngleToRotate = 0.001;
178 PIX *pixt1, *pixt2, *pixd;
180 PROCNAME(
"pixRotateAM");
183 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
184 if (pixGetDepth(pixs) == 1)
185 return (
PIX *)ERROR_PTR(
"pixs is 1 bpp", procName, NULL);
187 if (L_ABS(angle) < MinAngleToRotate)
192 d = pixGetDepth(pixt1);
197 d = pixGetDepth(pixt2);
205 fillval = 0xffffff00;
239 l_int32 w, h, wpls, wpld;
240 l_uint32 *datas, *datad;
241 PIX *pix1, *pix2, *pixd;
243 PROCNAME(
"pixRotateAMColor");
246 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
247 if (pixGetDepth(pixs) != 32)
248 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", procName, NULL);
250 if (L_ABS(angle) < MinAngleToRotate)
255 wpls = pixGetWpl(pixs);
258 wpld = pixGetWpl(pixd);
260 rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval);
261 if (pixGetSpp(pixs) == 4) {
293 l_int32 w, h, wpls, wpld;
294 l_uint32 *datas, *datad;
297 PROCNAME(
"pixRotateAMGray");
300 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
301 if (pixGetDepth(pixs) != 8)
302 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", procName, NULL);
304 if (L_ABS(angle) < MinAngleToRotate)
309 wpls = pixGetWpl(pixs);
312 wpld = pixGetWpl(pixd);
314 rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval);
321 rotateAMColorLow(l_uint32 *datad,
330 l_int32 i, j, xcen, ycen, wm2, hm2;
331 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
332 l_int32 rval, gval, bval;
333 l_uint32 word00, word01, word10, word11;
334 l_uint32 *lines, *lined;
335 l_float32 sina, cosa;
341 sina = 16. * sin(angle);
342 cosa = 16. * cos(angle);
344 for (i = 0; i < h; i++) {
346 lined = datad + i * wpld;
347 for (j = 0; j < w; j++) {
349 xpm = (l_int32)(-xdif * cosa - ydif * sina);
350 ypm = (l_int32)(-ydif * cosa + xdif * sina);
351 xp = xcen + (xpm >> 4);
352 yp = ycen + (ypm >> 4);
357 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
358 *(lined + j) = colorval;
362 lines = datas + yp * wpls;
369 word00 = *(lines + xp);
370 word10 = *(lines + xp + 1);
371 word01 = *(lines + wpls + xp);
372 word11 = *(lines + wpls + xp + 1);
373 rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) +
374 xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) +
375 (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) +
376 xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256;
377 gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) +
378 xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) +
379 (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) +
380 xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256;
381 bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) +
382 xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) +
383 (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) +
384 xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256;
392 rotateAMGrayLow(l_uint32 *datad,
401 l_int32 i, j, xcen, ycen, wm2, hm2;
402 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
403 l_int32 v00, v01, v10, v11;
405 l_uint32 *lines, *lined;
406 l_float32 sina, cosa;
412 sina = 16. * sin(angle);
413 cosa = 16. * cos(angle);
415 for (i = 0; i < h; i++) {
417 lined = datad + i * wpld;
418 for (j = 0; j < w; j++) {
420 xpm = (l_int32)(-xdif * cosa - ydif * sina);
421 ypm = (l_int32)(-ydif * cosa + xdif * sina);
422 xp = xcen + (xpm >> 4);
423 yp = ycen + (ypm >> 4);
428 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
433 lines = datas + yp * wpls;
444 val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256);
476 PIX *pixt1, *pixt2, *pixd;
478 PROCNAME(
"pixRotateAMCorner");
481 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
483 if (L_ABS(angle) < MinAngleToRotate)
488 d = pixGetDepth(pixt1);
493 d = pixGetDepth(pixt2);
501 fillval = 0xffffff00;
535 l_int32 w, h, wpls, wpld;
536 l_uint32 *datas, *datad;
537 PIX *pix1, *pix2, *pixd;
539 PROCNAME(
"pixRotateAMColorCorner");
542 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
543 if (pixGetDepth(pixs) != 32)
544 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", procName, NULL);
546 if (L_ABS(angle) < MinAngleToRotate)
551 wpls = pixGetWpl(pixs);
554 wpld = pixGetWpl(pixd);
556 rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval);
557 if (pixGetSpp(pixs) == 4) {
589 l_int32 w, h, wpls, wpld;
590 l_uint32 *datas, *datad;
593 PROCNAME(
"pixRotateAMGrayCorner");
596 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
597 if (pixGetDepth(pixs) != 8)
598 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", procName, NULL);
600 if (L_ABS(angle) < MinAngleToRotate)
605 wpls = pixGetWpl(pixs);
608 wpld = pixGetWpl(pixd);
610 rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval);
617 rotateAMColorCornerLow(l_uint32 *datad,
626 l_int32 i, j, wm2, hm2;
627 l_int32 xpm, ypm, xp, yp, xf, yf;
628 l_int32 rval, gval, bval;
629 l_uint32 word00, word01, word10, word11;
630 l_uint32 *lines, *lined;
631 l_float32 sina, cosa;
635 sina = 16. * sin(angle);
636 cosa = 16. * cos(angle);
638 for (i = 0; i < h; i++) {
639 lined = datad + i * wpld;
640 for (j = 0; j < w; j++) {
641 xpm = (l_int32)(j * cosa + i * sina);
642 ypm = (l_int32)(i * cosa - j * sina);
649 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
650 *(lined + j) = colorval;
654 lines = datas + yp * wpls;
661 word00 = *(lines + xp);
662 word10 = *(lines + xp + 1);
663 word01 = *(lines + wpls + xp);
664 word11 = *(lines + wpls + xp + 1);
665 rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) +
666 xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) +
667 (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) +
668 xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256;
669 gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) +
670 xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) +
671 (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) +
672 xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256;
673 bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) +
674 xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) +
675 (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) +
676 xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256;
684 rotateAMGrayCornerLow(l_uint32 *datad,
693 l_int32 i, j, wm2, hm2;
694 l_int32 xpm, ypm, xp, yp, xf, yf;
695 l_int32 v00, v01, v10, v11;
697 l_uint32 *lines, *lined;
698 l_float32 sina, cosa;
702 sina = 16. * sin(angle);
703 cosa = 16. * cos(angle);
705 for (i = 0; i < h; i++) {
706 lined = datad + i * wpld;
707 for (j = 0; j < w; j++) {
708 xpm = (l_int32)(j * cosa + i * sina);
709 ypm = (l_int32)(i * cosa - j * sina);
716 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
721 lines = datas + yp * wpls;
732 val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256);
768 l_int32 w, h, wpls, wpld;
769 l_uint32 *datas, *datad;
772 PROCNAME(
"pixRotateAMColorFast");
775 return (
PIX *)ERROR_PTR(
"pixs not defined", procName, NULL);
776 if (pixGetDepth(pixs) != 32)
777 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", procName, NULL);
779 if (L_ABS(angle) < MinAngleToRotate)
784 wpls = pixGetWpl(pixs);
787 wpld = pixGetWpl(pixd);
872 l_int32 i, j, xcen, ycen, wm2, hm2;
873 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
874 l_uint32 word1, word2, word3, word4, red, blue, green;
875 l_uint32 *pword, *lines, *lined;
876 l_float32 sina, cosa;
882 sina = 4. * sin(angle);
883 cosa = 4. * cos(angle);
885 for (i = 0; i < h; i++) {
887 lined = datad + i * wpld;
888 for (j = 0; j < w; j++) {
890 xpm = (l_int32)(-xdif * cosa - ydif * sina);
891 ypm = (l_int32)(-ydif * cosa + xdif * sina);
892 xp = xcen + (xpm >> 2);
893 yp = ycen + (ypm >> 2);
898 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
899 *(lined + j) = colorval;
903 lines = datas + yp * wpls;
909 *(lined + j) = *pword;
913 word2 = *(pword + 1);
914 red = 3 * (word1 >> 24) + (word2 >> 24);
915 green = 3 * ((word1 >> 16) & 0xff) +
916 ((word2 >> 16) & 0xff);
917 blue = 3 * ((word1 >> 8) & 0xff) +
918 ((word2 >> 8) & 0xff);
919 *(lined + j) = ((red << 22) & 0xff000000) |
920 ((green << 14) & 0x00ff0000) |
921 ((blue << 6) & 0x0000ff00);
925 word2 = *(pword + 1);
926 red = (word1 >> 24) + (word2 >> 24);
927 green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff);
928 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff);
929 *(lined + j) = ((red << 23) & 0xff000000) |
930 ((green << 15) & 0x00ff0000) |
931 ((blue << 7) & 0x0000ff00);
935 word2 = *(pword + 1);
936 red = (word1 >> 24) + 3 * (word2 >> 24);
937 green = ((word1 >> 16) & 0xff) +
938 3 * ((word2 >> 16) & 0xff);
939 blue = ((word1 >> 8) & 0xff) +
940 3 * ((word2 >> 8) & 0xff);
941 *(lined + j) = ((red << 22) & 0xff000000) |
942 ((green << 14) & 0x00ff0000) |
943 ((blue << 6) & 0x0000ff00);
947 word3 = *(pword + wpls);
948 red = 3 * (word1 >> 24) + (word3 >> 24);
949 green = 3 * ((word1 >> 16) & 0xff) +
950 ((word3 >> 16) & 0xff);
951 blue = 3 * ((word1 >> 8) & 0xff) +
952 ((word3 >> 8) & 0xff);
953 *(lined + j) = ((red << 22) & 0xff000000) |
954 ((green << 14) & 0x00ff0000) |
955 ((blue << 6) & 0x0000ff00);
959 word2 = *(pword + 1);
960 word3 = *(pword + wpls);
961 word4 = *(pword + wpls + 1);
962 red = 9 * (word1 >> 24) + 3 * (word2 >> 24) +
963 3 * (word3 >> 24) + (word4 >> 24);
964 green = 9 * ((word1 >> 16) & 0xff) +
965 3 * ((word2 >> 16) & 0xff) +
966 3 * ((word3 >> 16) & 0xff) +
967 ((word4 >> 16) & 0xff);
968 blue = 9 * ((word1 >> 8) & 0xff) +
969 3 * ((word2 >> 8) & 0xff) +
970 3 * ((word3 >> 8) & 0xff) +
971 ((word4 >> 8) & 0xff);
972 *(lined + j) = ((red << 20) & 0xff000000) |
973 ((green << 12) & 0x00ff0000) |
974 ((blue << 4) & 0x0000ff00);
978 word2 = *(pword + 1);
979 word3 = *(pword + wpls);
980 word4 = *(pword + wpls + 1);
981 red = 3 * (word1 >> 24) + 3 * (word2 >> 24) +
982 (word3 >> 24) + (word4 >> 24);
983 green = 3 * ((word1 >> 16) & 0xff) +
984 3 * ((word2 >> 16) & 0xff) +
985 ((word3 >> 16) & 0xff) +
986 ((word4 >> 16) & 0xff);
987 blue = 3 * ((word1 >> 8) & 0xff) +
988 3 * ((word2 >> 8) & 0xff) +
989 ((word3 >> 8) & 0xff) +
990 ((word4 >> 8) & 0xff);
991 *(lined + j) = ((red << 21) & 0xff000000) |
992 ((green << 13) & 0x00ff0000) |
993 ((blue << 5) & 0x0000ff00);
997 word2 = *(pword + 1);
998 word3 = *(pword + wpls);
999 word4 = *(pword + wpls + 1);
1000 red = 3 * (word1 >> 24) + 9 * (word2 >> 24) +
1001 (word3 >> 24) + 3 * (word4 >> 24);
1002 green = 3 * ((word1 >> 16) & 0xff) +
1003 9 * ((word2 >> 16) & 0xff) +
1004 ((word3 >> 16) & 0xff) +
1005 3 * ((word4 >> 16) & 0xff);
1006 blue = 3 * ((word1 >> 8) & 0xff) +
1007 9 * ((word2 >> 8) & 0xff) +
1008 ((word3 >> 8) & 0xff) +
1009 3 * ((word4 >> 8) & 0xff);
1010 *(lined + j) = ((red << 20) & 0xff000000) |
1011 ((green << 12) & 0x00ff0000) |
1012 ((blue << 4) & 0x0000ff00);
1016 word3 = *(pword + wpls);
1017 red = (word1 >> 24) + (word3 >> 24);
1018 green = ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff);
1019 blue = ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff);
1020 *(lined + j) = ((red << 23) & 0xff000000) |
1021 ((green << 15) & 0x00ff0000) |
1022 ((blue << 7) & 0x0000ff00);
1026 word2 = *(pword + 1);
1027 word3 = *(pword + wpls);
1028 word4 = *(pword + wpls + 1);
1029 red = 3 * (word1 >> 24) + (word2 >> 24) +
1030 3 * (word3 >> 24) + (word4 >> 24);
1031 green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1032 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff);
1033 blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1034 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff);
1035 *(lined + j) = ((red << 21) & 0xff000000) |
1036 ((green << 13) & 0x00ff0000) |
1037 ((blue << 5) & 0x0000ff00);
1041 word2 = *(pword + 1);
1042 word3 = *(pword + wpls);
1043 word4 = *(pword + wpls + 1);
1044 red = (word1 >> 24) + (word2 >> 24) +
1045 (word3 >> 24) + (word4 >> 24);
1046 green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1047 ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff);
1048 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1049 ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff);
1050 *(lined + j) = ((red << 22) & 0xff000000) |
1051 ((green << 14) & 0x00ff0000) |
1052 ((blue << 6) & 0x0000ff00);
1056 word2 = *(pword + 1);
1057 word3 = *(pword + wpls);
1058 word4 = *(pword + wpls + 1);
1059 red = (word1 >> 24) + 3 * (word2 >> 24) +
1060 (word3 >> 24) + 3 * (word4 >> 24);
1061 green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) +
1062 ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1063 blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) +
1064 ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1065 *(lined + j) = ((red << 21) & 0xff000000) |
1066 ((green << 13) & 0x00ff0000) |
1067 ((blue << 5) & 0x0000ff00);
1071 word3 = *(pword + wpls);
1072 red = (word1 >> 24) + 3 * (word3 >> 24);
1073 green = ((word1 >> 16) & 0xff) +
1074 3 * ((word3 >> 16) & 0xff);
1075 blue = ((word1 >> 8) & 0xff) +
1076 3 * ((word3 >> 8) & 0xff);
1077 *(lined + j) = ((red << 22) & 0xff000000) |
1078 ((green << 14) & 0x00ff0000) |
1079 ((blue << 6) & 0x0000ff00);
1083 word2 = *(pword + 1);
1084 word3 = *(pword + wpls);
1085 word4 = *(pword + wpls + 1);
1086 red = 3 * (word1 >> 24) + (word2 >> 24) +
1087 9 * (word3 >> 24) + 3 * (word4 >> 24);
1088 green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1089 9 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1090 blue = 3 *((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1091 9 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1092 *(lined + j) = ((red << 20) & 0xff000000) |
1093 ((green << 12) & 0x00ff0000) |
1094 ((blue << 4) & 0x0000ff00);
1098 word2 = *(pword + 1);
1099 word3 = *(pword + wpls);
1100 word4 = *(pword + wpls + 1);
1101 red = (word1 >> 24) + (word2 >> 24) +
1102 3 * (word3 >> 24) + 3 * (word4 >> 24);
1103 green = ((word1 >> 16) & 0xff) +((word2 >> 16) & 0xff) +
1104 3 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1105 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1106 3 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1107 *(lined + j) = ((red << 21) & 0xff000000) |
1108 ((green << 13) & 0x00ff0000) |
1109 ((blue << 5) & 0x0000ff00);
1113 word2 = *(pword + 1);
1114 word3 = *(pword + wpls);
1115 word4 = *(pword + wpls + 1);
1116 red = (word1 >> 24) + 3 * (word2 >> 24) +
1117 3 * (word3 >> 24) + 9 * (word4 >> 24);
1118 green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) +
1119 3 * ((word3 >> 16) & 0xff) + 9 * ((word4 >> 16) & 0xff);
1120 blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) +
1121 3 * ((word3 >> 8) & 0xff) + 9 * ((word4 >> 8) & 0xff);
1122 *(lined + j) = ((red << 20) & 0xff000000) |
1123 ((green << 12) & 0x00ff0000) |
1124 ((blue << 4) & 0x0000ff00);
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
l_uint32 * pixGetData(PIX *pix)
pixGetData()
void pixDestroy(PIX **ppix)
pixDestroy()
l_ok pixGetDimensions(const PIX *pix, l_int32 *pw, l_int32 *ph, l_int32 *pd)
pixGetDimensions()
PIX * pixCreateTemplate(const PIX *pixs)
pixCreateTemplate()
PIX * pixClone(PIX *pixs)
pixClone()
PIX * pixGetRGBComponent(PIX *pixs, l_int32 comp)
pixGetRGBComponent()
l_ok composeRGBPixel(l_int32 rval, l_int32 gval, l_int32 bval, l_uint32 *ppixel)
composeRGBPixel()
l_ok pixSetRGBComponent(PIX *pixd, PIX *pixs, l_int32 comp)
pixSetRGBComponent()
@ REMOVE_CMAP_BASED_ON_SRC
PIX * pixRemoveColormap(PIX *pixs, l_int32 type)
pixRemoveColormap()
PIX * pixConvertTo8(PIX *pixs, l_int32 cmapflag)
pixConvertTo8()
PIX * pixRotateAM(PIX *pixs, l_float32 angle, l_int32 incolor)
pixRotateAM()
PIX * pixRotateAMCorner(PIX *pixs, l_float32 angle, l_int32 incolor)
pixRotateAMCorner()
PIX * pixRotateAMGrayCorner(PIX *pixs, l_float32 angle, l_uint8 grayval)
pixRotateAMGrayCorner()
static void rotateAMColorFastLow(l_uint32 *datad, l_int32 w, l_int32 h, l_int32 wpld, l_uint32 *datas, l_int32 wpls, l_float32 angle, l_uint32 colorval)
rotateAMColorFastLow()
PIX * pixRotateAMColor(PIX *pixs, l_float32 angle, l_uint32 colorval)
pixRotateAMColor()
PIX * pixRotateAMColorCorner(PIX *pixs, l_float32 angle, l_uint32 fillval)
pixRotateAMColorCorner()
PIX * pixRotateAMGray(PIX *pixs, l_float32 angle, l_uint8 grayval)
pixRotateAMGray()
PIX * pixRotateAMColorFast(PIX *pixs, l_float32 angle, l_uint32 colorval)
pixRotateAMColorFast()
void lept_stderr(const char *fmt,...)
lept_stderr()