125#include <config_auto.h>
130#include "allheaders.h"
132static 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);
135static 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);
138static 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,
142static 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);
150static const l_float32 MinAngleToRotate = 0.001f;
178PIX *pixt1, *pixt2, *pixd;
181 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
182 if (pixGetDepth(pixs) == 1)
183 return (
PIX *)ERROR_PTR(
"pixs is 1 bpp", __func__, NULL);
185 if (L_ABS(angle) < MinAngleToRotate)
186 return pixClone(pixs);
190 d = pixGetDepth(pixt1);
192 pixt2 = pixConvertTo8(pixt1, FALSE);
194 pixt2 = pixClone(pixt1);
195 d = pixGetDepth(pixt2);
203 fillval = 0xffffff00;
237l_int32 w, h, wpls, wpld;
238l_uint32 *datas, *datad;
239PIX *pix1, *pix2, *pixd;
242 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
243 if (pixGetDepth(pixs) != 32)
244 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", __func__, NULL);
246 if (L_ABS(angle) < MinAngleToRotate)
247 return pixClone(pixs);
249 pixGetDimensions(pixs, &w, &h, NULL);
250 datas = pixGetData(pixs);
251 wpls = pixGetWpl(pixs);
252 pixd = pixCreateTemplate(pixs);
253 datad = pixGetData(pixd);
254 wpld = pixGetWpl(pixd);
256 rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval);
257 if (pixGetSpp(pixs) == 4) {
289l_int32 w, h, wpls, wpld;
290l_uint32 *datas, *datad;
294 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
295 if (pixGetDepth(pixs) != 8)
296 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", __func__, NULL);
298 if (L_ABS(angle) < MinAngleToRotate)
299 return pixClone(pixs);
301 pixGetDimensions(pixs, &w, &h, NULL);
302 datas = pixGetData(pixs);
303 wpls = pixGetWpl(pixs);
304 pixd = pixCreateTemplate(pixs);
305 datad = pixGetData(pixd);
306 wpld = pixGetWpl(pixd);
308 rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval);
315rotateAMColorLow(l_uint32 *datad,
324l_int32 i, j, xcen, ycen, wm2, hm2;
325l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
326l_int32 rval, gval, bval;
327l_uint32 word00, word01, word10, word11;
328l_uint32 *lines, *lined;
335 sina = 16.f * sin(angle);
336 cosa = 16.f * cos(angle);
338 for (i = 0; i < h; i++) {
340 lined = datad + i * wpld;
341 for (j = 0; j < w; j++) {
343 xpm = (l_int32)(-xdif * cosa - ydif * sina);
344 ypm = (l_int32)(-ydif * cosa + xdif * sina);
345 xp = xcen + (xpm >> 4);
346 yp = ycen + (ypm >> 4);
351 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
352 *(lined + j) = colorval;
356 lines = datas + yp * wpls;
363 word00 = *(lines + xp);
364 word10 = *(lines + xp + 1);
365 word01 = *(lines + wpls + xp);
366 word11 = *(lines + wpls + xp + 1);
367 rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) +
368 xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) +
369 (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) +
370 xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256;
371 gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) +
372 xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) +
373 (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) +
374 xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256;
375 bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) +
376 xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) +
377 (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) +
378 xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256;
379 composeRGBPixel(rval, gval, bval, lined + j);
386rotateAMGrayLow(l_uint32 *datad,
395l_int32 i, j, xcen, ycen, wm2, hm2;
396l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
397l_int32 v00, v01, v10, v11;
399l_uint32 *lines, *lined;
406 sina = 16.f * sin(angle);
407 cosa = 16.f * cos(angle);
409 for (i = 0; i < h; i++) {
411 lined = datad + i * wpld;
412 for (j = 0; j < w; j++) {
414 xpm = (l_int32)(-xdif * cosa - ydif * sina);
415 ypm = (l_int32)(-ydif * cosa + xdif * sina);
416 xp = xcen + (xpm >> 4);
417 yp = ycen + (ypm >> 4);
422 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
427 lines = datas + yp * wpls;
438 val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256);
470PIX *pixt1, *pixt2, *pixd;
473 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
475 if (L_ABS(angle) < MinAngleToRotate)
476 return pixClone(pixs);
480 d = pixGetDepth(pixt1);
482 pixt2 = pixConvertTo8(pixt1, FALSE);
484 pixt2 = pixClone(pixt1);
485 d = pixGetDepth(pixt2);
493 fillval = 0xffffff00;
527l_int32 w, h, wpls, wpld;
528l_uint32 *datas, *datad;
529PIX *pix1, *pix2, *pixd;
532 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
533 if (pixGetDepth(pixs) != 32)
534 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", __func__, NULL);
536 if (L_ABS(angle) < MinAngleToRotate)
537 return pixClone(pixs);
539 pixGetDimensions(pixs, &w, &h, NULL);
540 datas = pixGetData(pixs);
541 wpls = pixGetWpl(pixs);
542 pixd = pixCreateTemplate(pixs);
543 datad = pixGetData(pixd);
544 wpld = pixGetWpl(pixd);
546 rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval);
547 if (pixGetSpp(pixs) == 4) {
579l_int32 w, h, wpls, wpld;
580l_uint32 *datas, *datad;
584 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
585 if (pixGetDepth(pixs) != 8)
586 return (
PIX *)ERROR_PTR(
"pixs must be 8 bpp", __func__, NULL);
588 if (L_ABS(angle) < MinAngleToRotate)
589 return pixClone(pixs);
591 pixGetDimensions(pixs, &w, &h, NULL);
592 datas = pixGetData(pixs);
593 wpls = pixGetWpl(pixs);
594 pixd = pixCreateTemplate(pixs);
595 datad = pixGetData(pixd);
596 wpld = pixGetWpl(pixd);
598 rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval);
605rotateAMColorCornerLow(l_uint32 *datad,
614l_int32 i, j, wm2, hm2;
615l_int32 xpm, ypm, xp, yp, xf, yf;
616l_int32 rval, gval, bval;
617l_uint32 word00, word01, word10, word11;
618l_uint32 *lines, *lined;
623 sina = 16.f * sin(angle);
624 cosa = 16.f * cos(angle);
626 for (i = 0; i < h; i++) {
627 lined = datad + i * wpld;
628 for (j = 0; j < w; j++) {
629 xpm = (l_int32)(j * cosa + i * sina);
630 ypm = (l_int32)(i * cosa - j * sina);
637 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
638 *(lined + j) = colorval;
642 lines = datas + yp * wpls;
649 word00 = *(lines + xp);
650 word10 = *(lines + xp + 1);
651 word01 = *(lines + wpls + xp);
652 word11 = *(lines + wpls + xp + 1);
653 rval = ((16 - xf) * (16 - yf) * ((word00 >> L_RED_SHIFT) & 0xff) +
654 xf * (16 - yf) * ((word10 >> L_RED_SHIFT) & 0xff) +
655 (16 - xf) * yf * ((word01 >> L_RED_SHIFT) & 0xff) +
656 xf * yf * ((word11 >> L_RED_SHIFT) & 0xff) + 128) / 256;
657 gval = ((16 - xf) * (16 - yf) * ((word00 >> L_GREEN_SHIFT) & 0xff) +
658 xf * (16 - yf) * ((word10 >> L_GREEN_SHIFT) & 0xff) +
659 (16 - xf) * yf * ((word01 >> L_GREEN_SHIFT) & 0xff) +
660 xf * yf * ((word11 >> L_GREEN_SHIFT) & 0xff) + 128) / 256;
661 bval = ((16 - xf) * (16 - yf) * ((word00 >> L_BLUE_SHIFT) & 0xff) +
662 xf * (16 - yf) * ((word10 >> L_BLUE_SHIFT) & 0xff) +
663 (16 - xf) * yf * ((word01 >> L_BLUE_SHIFT) & 0xff) +
664 xf * yf * ((word11 >> L_BLUE_SHIFT) & 0xff) + 128) / 256;
665 composeRGBPixel(rval, gval, bval, lined + j);
672rotateAMGrayCornerLow(l_uint32 *datad,
681l_int32 i, j, wm2, hm2;
682l_int32 xpm, ypm, xp, yp, xf, yf;
683l_int32 v00, v01, v10, v11;
685l_uint32 *lines, *lined;
690 sina = 16.f * sin(angle);
691 cosa = 16.f * cos(angle);
693 for (i = 0; i < h; i++) {
694 lined = datad + i * wpld;
695 for (j = 0; j < w; j++) {
696 xpm = (l_int32)(j * cosa + i * sina);
697 ypm = (l_int32)(i * cosa - j * sina);
704 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
709 lines = datas + yp * wpls;
720 val = (l_uint8)((v00 + v01 + v10 + v11 + 128) / 256);
756l_int32 w, h, wpls, wpld;
757l_uint32 *datas, *datad;
761 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
762 if (pixGetDepth(pixs) != 32)
763 return (
PIX *)ERROR_PTR(
"pixs must be 32 bpp", __func__, NULL);
765 if (L_ABS(angle) < MinAngleToRotate)
766 return pixClone(pixs);
768 pixGetDimensions(pixs, &w, &h, NULL);
769 datas = pixGetData(pixs);
770 wpls = pixGetWpl(pixs);
771 pixd = pixCreateTemplate(pixs);
772 datad = pixGetData(pixd);
773 wpld = pixGetWpl(pixd);
858l_int32 i, j, xcen, ycen, wm2, hm2;
859l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
860l_uint32 word1, word2, word3, word4, red, blue, green;
861l_uint32 *pword, *lines, *lined;
868 sina = 4.f * sin(angle);
869 cosa = 4.f * cos(angle);
871 for (i = 0; i < h; i++) {
873 lined = datad + i * wpld;
874 for (j = 0; j < w; j++) {
876 xpm = (l_int32)(-xdif * cosa - ydif * sina);
877 ypm = (l_int32)(-ydif * cosa + xdif * sina);
878 xp = xcen + (xpm >> 2);
879 yp = ycen + (ypm >> 2);
884 if (xp < 0 || yp < 0 || xp > wm2 || yp > hm2) {
885 *(lined + j) = colorval;
889 lines = datas + yp * wpls;
895 *(lined + j) = *pword;
899 word2 = *(pword + 1);
900 red = 3 * (word1 >> 24) + (word2 >> 24);
901 green = 3 * ((word1 >> 16) & 0xff) +
902 ((word2 >> 16) & 0xff);
903 blue = 3 * ((word1 >> 8) & 0xff) +
904 ((word2 >> 8) & 0xff);
905 *(lined + j) = ((red << 22) & 0xff000000) |
906 ((green << 14) & 0x00ff0000) |
907 ((blue << 6) & 0x0000ff00);
911 word2 = *(pword + 1);
912 red = (word1 >> 24) + (word2 >> 24);
913 green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff);
914 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff);
915 *(lined + j) = ((red << 23) & 0xff000000) |
916 ((green << 15) & 0x00ff0000) |
917 ((blue << 7) & 0x0000ff00);
921 word2 = *(pword + 1);
922 red = (word1 >> 24) + 3 * (word2 >> 24);
923 green = ((word1 >> 16) & 0xff) +
924 3 * ((word2 >> 16) & 0xff);
925 blue = ((word1 >> 8) & 0xff) +
926 3 * ((word2 >> 8) & 0xff);
927 *(lined + j) = ((red << 22) & 0xff000000) |
928 ((green << 14) & 0x00ff0000) |
929 ((blue << 6) & 0x0000ff00);
933 word3 = *(pword + wpls);
934 red = 3 * (word1 >> 24) + (word3 >> 24);
935 green = 3 * ((word1 >> 16) & 0xff) +
936 ((word3 >> 16) & 0xff);
937 blue = 3 * ((word1 >> 8) & 0xff) +
938 ((word3 >> 8) & 0xff);
939 *(lined + j) = ((red << 22) & 0xff000000) |
940 ((green << 14) & 0x00ff0000) |
941 ((blue << 6) & 0x0000ff00);
945 word2 = *(pword + 1);
946 word3 = *(pword + wpls);
947 word4 = *(pword + wpls + 1);
948 red = 9 * (word1 >> 24) + 3 * (word2 >> 24) +
949 3 * (word3 >> 24) + (word4 >> 24);
950 green = 9 * ((word1 >> 16) & 0xff) +
951 3 * ((word2 >> 16) & 0xff) +
952 3 * ((word3 >> 16) & 0xff) +
953 ((word4 >> 16) & 0xff);
954 blue = 9 * ((word1 >> 8) & 0xff) +
955 3 * ((word2 >> 8) & 0xff) +
956 3 * ((word3 >> 8) & 0xff) +
957 ((word4 >> 8) & 0xff);
958 *(lined + j) = ((red << 20) & 0xff000000) |
959 ((green << 12) & 0x00ff0000) |
960 ((blue << 4) & 0x0000ff00);
964 word2 = *(pword + 1);
965 word3 = *(pword + wpls);
966 word4 = *(pword + wpls + 1);
967 red = 3 * (word1 >> 24) + 3 * (word2 >> 24) +
968 (word3 >> 24) + (word4 >> 24);
969 green = 3 * ((word1 >> 16) & 0xff) +
970 3 * ((word2 >> 16) & 0xff) +
971 ((word3 >> 16) & 0xff) +
972 ((word4 >> 16) & 0xff);
973 blue = 3 * ((word1 >> 8) & 0xff) +
974 3 * ((word2 >> 8) & 0xff) +
975 ((word3 >> 8) & 0xff) +
976 ((word4 >> 8) & 0xff);
977 *(lined + j) = ((red << 21) & 0xff000000) |
978 ((green << 13) & 0x00ff0000) |
979 ((blue << 5) & 0x0000ff00);
983 word2 = *(pword + 1);
984 word3 = *(pword + wpls);
985 word4 = *(pword + wpls + 1);
986 red = 3 * (word1 >> 24) + 9 * (word2 >> 24) +
987 (word3 >> 24) + 3 * (word4 >> 24);
988 green = 3 * ((word1 >> 16) & 0xff) +
989 9 * ((word2 >> 16) & 0xff) +
990 ((word3 >> 16) & 0xff) +
991 3 * ((word4 >> 16) & 0xff);
992 blue = 3 * ((word1 >> 8) & 0xff) +
993 9 * ((word2 >> 8) & 0xff) +
994 ((word3 >> 8) & 0xff) +
995 3 * ((word4 >> 8) & 0xff);
996 *(lined + j) = ((red << 20) & 0xff000000) |
997 ((green << 12) & 0x00ff0000) |
998 ((blue << 4) & 0x0000ff00);
1002 word3 = *(pword + wpls);
1003 red = (word1 >> 24) + (word3 >> 24);
1004 green = ((word1 >> 16) & 0xff) + ((word3 >> 16) & 0xff);
1005 blue = ((word1 >> 8) & 0xff) + ((word3 >> 8) & 0xff);
1006 *(lined + j) = ((red << 23) & 0xff000000) |
1007 ((green << 15) & 0x00ff0000) |
1008 ((blue << 7) & 0x0000ff00);
1012 word2 = *(pword + 1);
1013 word3 = *(pword + wpls);
1014 word4 = *(pword + wpls + 1);
1015 red = 3 * (word1 >> 24) + (word2 >> 24) +
1016 3 * (word3 >> 24) + (word4 >> 24);
1017 green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1018 3 * ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff);
1019 blue = 3 * ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1020 3 * ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff);
1021 *(lined + j) = ((red << 21) & 0xff000000) |
1022 ((green << 13) & 0x00ff0000) |
1023 ((blue << 5) & 0x0000ff00);
1027 word2 = *(pword + 1);
1028 word3 = *(pword + wpls);
1029 word4 = *(pword + wpls + 1);
1030 red = (word1 >> 24) + (word2 >> 24) +
1031 (word3 >> 24) + (word4 >> 24);
1032 green = ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1033 ((word3 >> 16) & 0xff) + ((word4 >> 16) & 0xff);
1034 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1035 ((word3 >> 8) & 0xff) + ((word4 >> 8) & 0xff);
1036 *(lined + j) = ((red << 22) & 0xff000000) |
1037 ((green << 14) & 0x00ff0000) |
1038 ((blue << 6) & 0x0000ff00);
1042 word2 = *(pword + 1);
1043 word3 = *(pword + wpls);
1044 word4 = *(pword + wpls + 1);
1045 red = (word1 >> 24) + 3 * (word2 >> 24) +
1046 (word3 >> 24) + 3 * (word4 >> 24);
1047 green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) +
1048 ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1049 blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) +
1050 ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1051 *(lined + j) = ((red << 21) & 0xff000000) |
1052 ((green << 13) & 0x00ff0000) |
1053 ((blue << 5) & 0x0000ff00);
1057 word3 = *(pword + wpls);
1058 red = (word1 >> 24) + 3 * (word3 >> 24);
1059 green = ((word1 >> 16) & 0xff) +
1060 3 * ((word3 >> 16) & 0xff);
1061 blue = ((word1 >> 8) & 0xff) +
1062 3 * ((word3 >> 8) & 0xff);
1063 *(lined + j) = ((red << 22) & 0xff000000) |
1064 ((green << 14) & 0x00ff0000) |
1065 ((blue << 6) & 0x0000ff00);
1069 word2 = *(pword + 1);
1070 word3 = *(pword + wpls);
1071 word4 = *(pword + wpls + 1);
1072 red = 3 * (word1 >> 24) + (word2 >> 24) +
1073 9 * (word3 >> 24) + 3 * (word4 >> 24);
1074 green = 3 * ((word1 >> 16) & 0xff) + ((word2 >> 16) & 0xff) +
1075 9 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1076 blue = 3 *((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1077 9 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1078 *(lined + j) = ((red << 20) & 0xff000000) |
1079 ((green << 12) & 0x00ff0000) |
1080 ((blue << 4) & 0x0000ff00);
1084 word2 = *(pword + 1);
1085 word3 = *(pword + wpls);
1086 word4 = *(pword + wpls + 1);
1087 red = (word1 >> 24) + (word2 >> 24) +
1088 3 * (word3 >> 24) + 3 * (word4 >> 24);
1089 green = ((word1 >> 16) & 0xff) +((word2 >> 16) & 0xff) +
1090 3 * ((word3 >> 16) & 0xff) + 3 * ((word4 >> 16) & 0xff);
1091 blue = ((word1 >> 8) & 0xff) + ((word2 >> 8) & 0xff) +
1092 3 * ((word3 >> 8) & 0xff) + 3 * ((word4 >> 8) & 0xff);
1093 *(lined + j) = ((red << 21) & 0xff000000) |
1094 ((green << 13) & 0x00ff0000) |
1095 ((blue << 5) & 0x0000ff00);
1099 word2 = *(pword + 1);
1100 word3 = *(pword + wpls);
1101 word4 = *(pword + wpls + 1);
1102 red = (word1 >> 24) + 3 * (word2 >> 24) +
1103 3 * (word3 >> 24) + 9 * (word4 >> 24);
1104 green = ((word1 >> 16) & 0xff) + 3 * ((word2 >> 16) & 0xff) +
1105 3 * ((word3 >> 16) & 0xff) + 9 * ((word4 >> 16) & 0xff);
1106 blue = ((word1 >> 8) & 0xff) + 3 * ((word2 >> 8) & 0xff) +
1107 3 * ((word3 >> 8) & 0xff) + 9 * ((word4 >> 8) & 0xff);
1108 *(lined + j) = ((red << 20) & 0xff000000) |
1109 ((green << 12) & 0x00ff0000) |
1110 ((blue << 4) & 0x0000ff00);
1113 lept_stderr(
"shouldn't get here\n");
#define GET_DATA_BYTE(pdata, n)
#define SET_DATA_BYTE(pdata, n, val)
@ REMOVE_CMAP_BASED_ON_SRC
PIX * pixRotateAMColorCorner(PIX *pixs, l_float32 angle, l_uint32 fillval)
pixRotateAMColorCorner()
PIX * pixRotateAMCorner(PIX *pixs, l_float32 angle, l_int32 incolor)
pixRotateAMCorner()
PIX * pixRotateAMGray(PIX *pixs, l_float32 angle, l_uint8 grayval)
pixRotateAMGray()
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 * pixRotateAMColorFast(PIX *pixs, l_float32 angle, l_uint32 colorval)
pixRotateAMColorFast()
PIX * pixRotateAM(PIX *pixs, l_float32 angle, l_int32 incolor)
pixRotateAM()
PIX * pixRotateAMGrayCorner(PIX *pixs, l_float32 angle, l_uint8 grayval)
pixRotateAMGrayCorner()
PIX * pixRotateAMColor(PIX *pixs, l_float32 angle, l_uint32 colorval)
pixRotateAMColor()