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;
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)
190 d = pixGetDepth(pixt1);
195 d = pixGetDepth(pixt2);
203 fillval = 0xffffff00;
237 l_int32 w, h, wpls, wpld;
238 l_uint32 *datas, *datad;
239 PIX *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)
251 wpls = pixGetWpl(pixs);
254 wpld = pixGetWpl(pixd);
256 rotateAMColorLow(datad, w, h, wpld, datas, wpls, angle, colorval);
257 if (pixGetSpp(pixs) == 4) {
289 l_int32 w, h, wpls, wpld;
290 l_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)
303 wpls = pixGetWpl(pixs);
306 wpld = pixGetWpl(pixd);
308 rotateAMGrayLow(datad, w, h, wpld, datas, wpls, angle, grayval);
315 rotateAMColorLow(l_uint32 *datad,
324 l_int32 i, j, xcen, ycen, wm2, hm2;
325 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
326 l_int32 rval, gval, bval;
327 l_uint32 word00, word01, word10, word11;
328 l_uint32 *lines, *lined;
329 l_float32 sina, cosa;
335 sina = 16. * sin(angle);
336 cosa = 16. * 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;
386 rotateAMGrayLow(l_uint32 *datad,
395 l_int32 i, j, xcen, ycen, wm2, hm2;
396 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
397 l_int32 v00, v01, v10, v11;
399 l_uint32 *lines, *lined;
400 l_float32 sina, cosa;
406 sina = 16. * sin(angle);
407 cosa = 16. * 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);
470 PIX *pixt1, *pixt2, *pixd;
473 return (
PIX *)ERROR_PTR(
"pixs not defined", __func__, NULL);
475 if (L_ABS(angle) < MinAngleToRotate)
480 d = pixGetDepth(pixt1);
485 d = pixGetDepth(pixt2);
493 fillval = 0xffffff00;
527 l_int32 w, h, wpls, wpld;
528 l_uint32 *datas, *datad;
529 PIX *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)
541 wpls = pixGetWpl(pixs);
544 wpld = pixGetWpl(pixd);
546 rotateAMColorCornerLow(datad, w, h, wpld, datas, wpls, angle, fillval);
547 if (pixGetSpp(pixs) == 4) {
579 l_int32 w, h, wpls, wpld;
580 l_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)
593 wpls = pixGetWpl(pixs);
596 wpld = pixGetWpl(pixd);
598 rotateAMGrayCornerLow(datad, w, h, wpld, datas, wpls, angle, grayval);
605 rotateAMColorCornerLow(l_uint32 *datad,
614 l_int32 i, j, wm2, hm2;
615 l_int32 xpm, ypm, xp, yp, xf, yf;
616 l_int32 rval, gval, bval;
617 l_uint32 word00, word01, word10, word11;
618 l_uint32 *lines, *lined;
619 l_float32 sina, cosa;
623 sina = 16. * sin(angle);
624 cosa = 16. * 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;
672 rotateAMGrayCornerLow(l_uint32 *datad,
681 l_int32 i, j, wm2, hm2;
682 l_int32 xpm, ypm, xp, yp, xf, yf;
683 l_int32 v00, v01, v10, v11;
685 l_uint32 *lines, *lined;
686 l_float32 sina, cosa;
690 sina = 16. * sin(angle);
691 cosa = 16. * 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);
756 l_int32 w, h, wpls, wpld;
757 l_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)
770 wpls = pixGetWpl(pixs);
773 wpld = pixGetWpl(pixd);
858 l_int32 i, j, xcen, ycen, wm2, hm2;
859 l_int32 xdif, ydif, xpm, ypm, xp, yp, xf, yf;
860 l_uint32 word1, word2, word3, word4, red, blue, green;
861 l_uint32 *pword, *lines, *lined;
862 l_float32 sina, cosa;
868 sina = 4. * sin(angle);
869 cosa = 4. * 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);
#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()