OLD | NEW |
1 // Copyright 2014 PDFium Authors. All rights reserved. | 1 // Copyright 2014 PDFium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com | 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
6 | 6 |
7 #include "core/include/fxge/fx_ge.h" | 7 #include "core/include/fxge/fx_ge.h" |
8 #include "core/include/fxcodec/fx_codec.h" | 8 #include "core/include/fxcodec/fx_codec.h" |
9 #include "dib_int.h" | 9 #include "dib_int.h" |
10 | 10 |
(...skipping 719 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
730 } | 730 } |
731 void _CompositeRow_Argb2Argb(uint8_t* dest_scan, | 731 void _CompositeRow_Argb2Argb(uint8_t* dest_scan, |
732 const uint8_t* src_scan, | 732 const uint8_t* src_scan, |
733 int pixel_count, | 733 int pixel_count, |
734 int blend_type, | 734 int blend_type, |
735 const uint8_t* clip_scan, | 735 const uint8_t* clip_scan, |
736 uint8_t* dest_alpha_scan, | 736 uint8_t* dest_alpha_scan, |
737 const uint8_t* src_alpha_scan) { | 737 const uint8_t* src_alpha_scan) { |
738 int blended_colors[3]; | 738 int blended_colors[3]; |
739 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 739 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
740 if (dest_alpha_scan == NULL) { | 740 if (!dest_alpha_scan) { |
741 if (src_alpha_scan == NULL) { | 741 if (!src_alpha_scan) { |
742 uint8_t back_alpha = 0; | 742 uint8_t back_alpha = 0; |
743 for (int col = 0; col < pixel_count; col++) { | 743 for (int col = 0; col < pixel_count; col++) { |
744 back_alpha = dest_scan[3]; | 744 back_alpha = dest_scan[3]; |
745 if (back_alpha == 0) { | 745 if (back_alpha == 0) { |
746 if (clip_scan) { | 746 if (clip_scan) { |
747 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 747 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
748 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) | | 748 FXARGB_SETDIB(dest_scan, (FXARGB_GETDIB(src_scan) & 0xffffff) | |
749 (src_alpha << 24)); | 749 (src_alpha << 24)); |
750 } else { | 750 } else { |
751 FXARGB_COPY(dest_scan, src_scan); | 751 FXARGB_COPY(dest_scan, src_scan); |
752 } | 752 } |
753 dest_scan += 4; | 753 dest_scan += 4; |
754 src_scan += 4; | 754 src_scan += 4; |
755 continue; | 755 continue; |
756 } | 756 } |
757 uint8_t src_alpha; | 757 uint8_t src_alpha; |
758 if (clip_scan == NULL) { | 758 if (clip_scan) { |
| 759 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 760 } else { |
759 src_alpha = src_scan[3]; | 761 src_alpha = src_scan[3]; |
760 } else { | |
761 src_alpha = clip_scan[col] * src_scan[3] / 255; | |
762 } | 762 } |
763 if (src_alpha == 0) { | 763 if (src_alpha == 0) { |
764 dest_scan += 4; | 764 dest_scan += 4; |
765 src_scan += 4; | 765 src_scan += 4; |
766 continue; | 766 continue; |
767 } | 767 } |
768 uint8_t dest_alpha = | 768 uint8_t dest_alpha = |
769 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 769 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
770 dest_scan[3] = dest_alpha; | 770 dest_scan[3] = dest_alpha; |
771 int alpha_ratio = src_alpha * 255 / dest_alpha; | 771 int alpha_ratio = src_alpha * 255 / dest_alpha; |
(...skipping 28 matching lines...) Expand all Loading... |
800 FXARGB_SETDIB(dest_scan, | 800 FXARGB_SETDIB(dest_scan, |
801 FXARGB_MAKE((*src_alpha_scan << 24), src_scan[2], | 801 FXARGB_MAKE((*src_alpha_scan << 24), src_scan[2], |
802 src_scan[1], *src_scan)); | 802 src_scan[1], *src_scan)); |
803 } | 803 } |
804 dest_scan += 4; | 804 dest_scan += 4; |
805 src_scan += 3; | 805 src_scan += 3; |
806 src_alpha_scan++; | 806 src_alpha_scan++; |
807 continue; | 807 continue; |
808 } | 808 } |
809 uint8_t src_alpha; | 809 uint8_t src_alpha; |
810 if (clip_scan == NULL) { | 810 if (clip_scan) { |
| 811 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 812 } else { |
811 src_alpha = *src_alpha_scan++; | 813 src_alpha = *src_alpha_scan++; |
812 } else { | |
813 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | |
814 } | 814 } |
815 if (src_alpha == 0) { | 815 if (src_alpha == 0) { |
816 dest_scan += 4; | 816 dest_scan += 4; |
817 src_scan += 3; | 817 src_scan += 3; |
818 continue; | 818 continue; |
819 } | 819 } |
820 uint8_t dest_alpha = | 820 uint8_t dest_alpha = |
821 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 821 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
822 dest_scan[3] = dest_alpha; | 822 dest_scan[3] = dest_alpha; |
823 int alpha_ratio = src_alpha * 255 / dest_alpha; | 823 int alpha_ratio = src_alpha * 255 / dest_alpha; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
855 *dest_alpha_scan = *src_alpha_scan; | 855 *dest_alpha_scan = *src_alpha_scan; |
856 *dest_scan++ = *src_scan++; | 856 *dest_scan++ = *src_scan++; |
857 *dest_scan++ = *src_scan++; | 857 *dest_scan++ = *src_scan++; |
858 *dest_scan++ = *src_scan++; | 858 *dest_scan++ = *src_scan++; |
859 } | 859 } |
860 dest_alpha_scan++; | 860 dest_alpha_scan++; |
861 src_alpha_scan++; | 861 src_alpha_scan++; |
862 continue; | 862 continue; |
863 } | 863 } |
864 uint8_t src_alpha; | 864 uint8_t src_alpha; |
865 if (clip_scan == NULL) { | 865 if (clip_scan) { |
| 866 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 867 } else { |
866 src_alpha = *src_alpha_scan++; | 868 src_alpha = *src_alpha_scan++; |
867 } else { | |
868 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | |
869 } | 869 } |
870 if (src_alpha == 0) { | 870 if (src_alpha == 0) { |
871 dest_scan += 3; | 871 dest_scan += 3; |
872 src_scan += 3; | 872 src_scan += 3; |
873 dest_alpha_scan++; | 873 dest_alpha_scan++; |
874 continue; | 874 continue; |
875 } | 875 } |
876 uint8_t dest_alpha = | 876 uint8_t dest_alpha = |
877 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 877 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
878 *dest_alpha_scan++ = dest_alpha; | 878 *dest_alpha_scan++ = dest_alpha; |
(...skipping 29 matching lines...) Expand all Loading... |
908 *dest_alpha_scan = src_scan[3]; | 908 *dest_alpha_scan = src_scan[3]; |
909 *dest_scan++ = *src_scan++; | 909 *dest_scan++ = *src_scan++; |
910 *dest_scan++ = *src_scan++; | 910 *dest_scan++ = *src_scan++; |
911 *dest_scan++ = *src_scan++; | 911 *dest_scan++ = *src_scan++; |
912 } | 912 } |
913 dest_alpha_scan++; | 913 dest_alpha_scan++; |
914 src_scan++; | 914 src_scan++; |
915 continue; | 915 continue; |
916 } | 916 } |
917 uint8_t src_alpha; | 917 uint8_t src_alpha; |
918 if (clip_scan == NULL) { | 918 if (clip_scan) { |
| 919 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 920 } else { |
919 src_alpha = src_scan[3]; | 921 src_alpha = src_scan[3]; |
920 } else { | |
921 src_alpha = clip_scan[col] * src_scan[3] / 255; | |
922 } | 922 } |
923 if (src_alpha == 0) { | 923 if (src_alpha == 0) { |
924 dest_scan += 3; | 924 dest_scan += 3; |
925 src_scan += 4; | 925 src_scan += 4; |
926 dest_alpha_scan++; | 926 dest_alpha_scan++; |
927 continue; | 927 continue; |
928 } | 928 } |
929 uint8_t dest_alpha = | 929 uint8_t dest_alpha = |
930 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 930 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
931 *dest_alpha_scan++ = dest_alpha; | 931 *dest_alpha_scan++ = dest_alpha; |
(...skipping 21 matching lines...) Expand all Loading... |
953 } | 953 } |
954 void _CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan, | 954 void _CompositeRow_Rgb2Argb_Blend_NoClip(uint8_t* dest_scan, |
955 const uint8_t* src_scan, | 955 const uint8_t* src_scan, |
956 int width, | 956 int width, |
957 int blend_type, | 957 int blend_type, |
958 int src_Bpp, | 958 int src_Bpp, |
959 uint8_t* dest_alpha_scan) { | 959 uint8_t* dest_alpha_scan) { |
960 int blended_colors[3]; | 960 int blended_colors[3]; |
961 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 961 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
962 int src_gap = src_Bpp - 3; | 962 int src_gap = src_Bpp - 3; |
963 if (dest_alpha_scan == NULL) { | 963 if (dest_alpha_scan) { |
964 for (int col = 0; col < width; col++) { | 964 for (int col = 0; col < width; col++) { |
965 uint8_t back_alpha = dest_scan[3]; | 965 uint8_t back_alpha = *dest_alpha_scan; |
966 if (back_alpha == 0) { | 966 if (back_alpha == 0) { |
967 if (src_Bpp == 4) { | 967 *dest_scan++ = *src_scan++; |
968 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan)); | 968 *dest_scan++ = *src_scan++; |
969 } else { | 969 *dest_scan++ = *src_scan++; |
970 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], | 970 *dest_alpha_scan++ = 0xff; |
971 src_scan[0])); | 971 src_scan += src_gap; |
972 } | |
973 dest_scan += 4; | |
974 src_scan += src_Bpp; | |
975 continue; | 972 continue; |
976 } | 973 } |
977 dest_scan[3] = 0xff; | 974 *dest_alpha_scan++ = 0xff; |
978 if (bNonseparableBlend) { | 975 if (bNonseparableBlend) { |
979 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 976 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
980 } | 977 } |
981 for (int color = 0; color < 3; color++) { | 978 for (int color = 0; color < 3; color++) { |
982 int src_color = *src_scan; | 979 int src_color = *src_scan; |
983 int blended = bNonseparableBlend | 980 int blended = bNonseparableBlend |
984 ? blended_colors[color] | 981 ? blended_colors[color] |
985 : _BLEND(blend_type, *dest_scan, src_color); | 982 : _BLEND(blend_type, *dest_scan, src_color); |
986 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 983 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
987 dest_scan++; | 984 dest_scan++; |
988 src_scan++; | 985 src_scan++; |
989 } | 986 } |
990 dest_scan++; | |
991 src_scan += src_gap; | 987 src_scan += src_gap; |
992 } | 988 } |
993 } else { | 989 } else { |
994 for (int col = 0; col < width; col++) { | 990 for (int col = 0; col < width; col++) { |
995 uint8_t back_alpha = *dest_alpha_scan; | 991 uint8_t back_alpha = dest_scan[3]; |
996 if (back_alpha == 0) { | 992 if (back_alpha == 0) { |
997 *dest_scan++ = *src_scan++; | 993 if (src_Bpp == 4) { |
998 *dest_scan++ = *src_scan++; | 994 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan)); |
999 *dest_scan++ = *src_scan++; | 995 } else { |
1000 *dest_alpha_scan++ = 0xff; | 996 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(0xff, src_scan[2], src_scan[1], |
1001 src_scan += src_gap; | 997 src_scan[0])); |
| 998 } |
| 999 dest_scan += 4; |
| 1000 src_scan += src_Bpp; |
1002 continue; | 1001 continue; |
1003 } | 1002 } |
1004 *dest_alpha_scan++ = 0xff; | 1003 dest_scan[3] = 0xff; |
1005 if (bNonseparableBlend) { | 1004 if (bNonseparableBlend) { |
1006 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1005 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
1007 } | 1006 } |
1008 for (int color = 0; color < 3; color++) { | 1007 for (int color = 0; color < 3; color++) { |
1009 int src_color = *src_scan; | 1008 int src_color = *src_scan; |
1010 int blended = bNonseparableBlend | 1009 int blended = bNonseparableBlend |
1011 ? blended_colors[color] | 1010 ? blended_colors[color] |
1012 : _BLEND(blend_type, *dest_scan, src_color); | 1011 : _BLEND(blend_type, *dest_scan, src_color); |
1013 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 1012 *dest_scan = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
1014 dest_scan++; | 1013 dest_scan++; |
1015 src_scan++; | 1014 src_scan++; |
1016 } | 1015 } |
| 1016 dest_scan++; |
1017 src_scan += src_gap; | 1017 src_scan += src_gap; |
1018 } | 1018 } |
1019 } | 1019 } |
1020 } | 1020 } |
1021 inline void _CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan, | 1021 inline void _CompositeRow_Rgb2Argb_Blend_Clip(uint8_t* dest_scan, |
1022 const uint8_t* src_scan, | 1022 const uint8_t* src_scan, |
1023 int width, | 1023 int width, |
1024 int blend_type, | 1024 int blend_type, |
1025 int src_Bpp, | 1025 int src_Bpp, |
1026 const uint8_t* clip_scan, | 1026 const uint8_t* clip_scan, |
1027 uint8_t* dest_alpha_scan) { | 1027 uint8_t* dest_alpha_scan) { |
1028 int blended_colors[3]; | 1028 int blended_colors[3]; |
1029 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1029 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
1030 int src_gap = src_Bpp - 3; | 1030 int src_gap = src_Bpp - 3; |
1031 if (dest_alpha_scan == NULL) { | 1031 if (dest_alpha_scan) { |
1032 for (int col = 0; col < width; col++) { | 1032 for (int col = 0; col < width; col++) { |
1033 int src_alpha = *clip_scan++; | 1033 int src_alpha = *clip_scan++; |
1034 uint8_t back_alpha = dest_scan[3]; | 1034 uint8_t back_alpha = *dest_alpha_scan; |
1035 if (back_alpha == 0) { | 1035 if (back_alpha == 0) { |
1036 *dest_scan++ = *src_scan++; | 1036 *dest_scan++ = *src_scan++; |
1037 *dest_scan++ = *src_scan++; | 1037 *dest_scan++ = *src_scan++; |
1038 *dest_scan++ = *src_scan++; | 1038 *dest_scan++ = *src_scan++; |
1039 src_scan += src_gap; | 1039 src_scan += src_gap; |
1040 dest_scan++; | 1040 dest_alpha_scan++; |
1041 continue; | 1041 continue; |
1042 } | 1042 } |
1043 if (src_alpha == 0) { | 1043 if (src_alpha == 0) { |
1044 dest_scan += 4; | 1044 dest_scan += 3; |
| 1045 dest_alpha_scan++; |
1045 src_scan += src_Bpp; | 1046 src_scan += src_Bpp; |
1046 continue; | 1047 continue; |
1047 } | 1048 } |
1048 uint8_t dest_alpha = | 1049 uint8_t dest_alpha = |
1049 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 1050 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
1050 dest_scan[3] = dest_alpha; | 1051 *dest_alpha_scan++ = dest_alpha; |
1051 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1052 int alpha_ratio = src_alpha * 255 / dest_alpha; |
1052 if (bNonseparableBlend) { | 1053 if (bNonseparableBlend) { |
1053 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1054 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
1054 } | 1055 } |
1055 for (int color = 0; color < 3; color++) { | 1056 for (int color = 0; color < 3; color++) { |
1056 int src_color = *src_scan; | 1057 int src_color = *src_scan; |
1057 int blended = bNonseparableBlend | 1058 int blended = bNonseparableBlend |
1058 ? blended_colors[color] | 1059 ? blended_colors[color] |
1059 : _BLEND(blend_type, *dest_scan, src_color); | 1060 : _BLEND(blend_type, *dest_scan, src_color); |
1060 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 1061 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
1061 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio); | 1062 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio); |
1062 dest_scan++; | 1063 dest_scan++; |
1063 src_scan++; | 1064 src_scan++; |
1064 } | 1065 } |
1065 dest_scan++; | |
1066 src_scan += src_gap; | 1066 src_scan += src_gap; |
1067 } | 1067 } |
1068 } else { | 1068 } else { |
1069 for (int col = 0; col < width; col++) { | 1069 for (int col = 0; col < width; col++) { |
1070 int src_alpha = *clip_scan++; | 1070 int src_alpha = *clip_scan++; |
1071 uint8_t back_alpha = *dest_alpha_scan; | 1071 uint8_t back_alpha = dest_scan[3]; |
1072 if (back_alpha == 0) { | 1072 if (back_alpha == 0) { |
1073 *dest_scan++ = *src_scan++; | 1073 *dest_scan++ = *src_scan++; |
1074 *dest_scan++ = *src_scan++; | 1074 *dest_scan++ = *src_scan++; |
1075 *dest_scan++ = *src_scan++; | 1075 *dest_scan++ = *src_scan++; |
1076 src_scan += src_gap; | 1076 src_scan += src_gap; |
1077 dest_alpha_scan++; | 1077 dest_scan++; |
1078 continue; | 1078 continue; |
1079 } | 1079 } |
1080 if (src_alpha == 0) { | 1080 if (src_alpha == 0) { |
1081 dest_scan += 3; | 1081 dest_scan += 4; |
1082 dest_alpha_scan++; | |
1083 src_scan += src_Bpp; | 1082 src_scan += src_Bpp; |
1084 continue; | 1083 continue; |
1085 } | 1084 } |
1086 uint8_t dest_alpha = | 1085 uint8_t dest_alpha = |
1087 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 1086 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
1088 *dest_alpha_scan++ = dest_alpha; | 1087 dest_scan[3] = dest_alpha; |
1089 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1088 int alpha_ratio = src_alpha * 255 / dest_alpha; |
1090 if (bNonseparableBlend) { | 1089 if (bNonseparableBlend) { |
1091 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1090 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
1092 } | 1091 } |
1093 for (int color = 0; color < 3; color++) { | 1092 for (int color = 0; color < 3; color++) { |
1094 int src_color = *src_scan; | 1093 int src_color = *src_scan; |
1095 int blended = bNonseparableBlend | 1094 int blended = bNonseparableBlend |
1096 ? blended_colors[color] | 1095 ? blended_colors[color] |
1097 : _BLEND(blend_type, *dest_scan, src_color); | 1096 : _BLEND(blend_type, *dest_scan, src_color); |
1098 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); | 1097 blended = FXDIB_ALPHA_MERGE(src_color, blended, back_alpha); |
1099 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio); | 1098 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, blended, alpha_ratio); |
1100 dest_scan++; | 1099 dest_scan++; |
1101 src_scan++; | 1100 src_scan++; |
1102 } | 1101 } |
| 1102 dest_scan++; |
1103 src_scan += src_gap; | 1103 src_scan += src_gap; |
1104 } | 1104 } |
1105 } | 1105 } |
1106 } | 1106 } |
1107 inline void _CompositeRow_Rgb2Argb_NoBlend_Clip(uint8_t* dest_scan, | 1107 inline void _CompositeRow_Rgb2Argb_NoBlend_Clip(uint8_t* dest_scan, |
1108 const uint8_t* src_scan, | 1108 const uint8_t* src_scan, |
1109 int width, | 1109 int width, |
1110 int src_Bpp, | 1110 int src_Bpp, |
1111 const uint8_t* clip_scan, | 1111 const uint8_t* clip_scan, |
1112 uint8_t* dest_alpha_scan) { | 1112 uint8_t* dest_alpha_scan) { |
1113 int src_gap = src_Bpp - 3; | 1113 int src_gap = src_Bpp - 3; |
1114 if (dest_alpha_scan == NULL) { | 1114 if (dest_alpha_scan) { |
1115 for (int col = 0; col < width; col++) { | 1115 for (int col = 0; col < width; col++) { |
1116 int src_alpha = clip_scan[col]; | 1116 int src_alpha = clip_scan[col]; |
1117 if (src_alpha == 255) { | 1117 if (src_alpha == 255) { |
1118 *dest_scan++ = *src_scan++; | 1118 *dest_scan++ = *src_scan++; |
1119 *dest_scan++ = *src_scan++; | 1119 *dest_scan++ = *src_scan++; |
1120 *dest_scan++ = *src_scan++; | 1120 *dest_scan++ = *src_scan++; |
1121 *dest_scan++ = 255; | 1121 *dest_alpha_scan++ = 255; |
1122 src_scan += src_gap; | 1122 src_scan += src_gap; |
1123 continue; | 1123 continue; |
1124 } | 1124 } |
1125 if (src_alpha == 0) { | 1125 if (src_alpha == 0) { |
1126 dest_scan += 4; | 1126 dest_scan += 3; |
| 1127 dest_alpha_scan++; |
1127 src_scan += src_Bpp; | 1128 src_scan += src_Bpp; |
1128 continue; | 1129 continue; |
1129 } | 1130 } |
1130 int back_alpha = dest_scan[3]; | 1131 int back_alpha = *dest_alpha_scan; |
1131 uint8_t dest_alpha = | 1132 uint8_t dest_alpha = |
1132 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 1133 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
1133 dest_scan[3] = dest_alpha; | 1134 *dest_alpha_scan++ = dest_alpha; |
1134 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1135 int alpha_ratio = src_alpha * 255 / dest_alpha; |
1135 for (int color = 0; color < 3; color++) { | 1136 for (int color = 0; color < 3; color++) { |
1136 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio); | 1137 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio); |
1137 dest_scan++; | 1138 dest_scan++; |
1138 src_scan++; | 1139 src_scan++; |
1139 } | 1140 } |
1140 dest_scan++; | |
1141 src_scan += src_gap; | 1141 src_scan += src_gap; |
1142 } | 1142 } |
1143 } else { | 1143 } else { |
1144 for (int col = 0; col < width; col++) { | 1144 for (int col = 0; col < width; col++) { |
1145 int src_alpha = clip_scan[col]; | 1145 int src_alpha = clip_scan[col]; |
1146 if (src_alpha == 255) { | 1146 if (src_alpha == 255) { |
1147 *dest_scan++ = *src_scan++; | 1147 *dest_scan++ = *src_scan++; |
1148 *dest_scan++ = *src_scan++; | 1148 *dest_scan++ = *src_scan++; |
1149 *dest_scan++ = *src_scan++; | 1149 *dest_scan++ = *src_scan++; |
1150 *dest_alpha_scan++ = 255; | 1150 *dest_scan++ = 255; |
1151 src_scan += src_gap; | 1151 src_scan += src_gap; |
1152 continue; | 1152 continue; |
1153 } | 1153 } |
1154 if (src_alpha == 0) { | 1154 if (src_alpha == 0) { |
1155 dest_scan += 3; | 1155 dest_scan += 4; |
1156 dest_alpha_scan++; | |
1157 src_scan += src_Bpp; | 1156 src_scan += src_Bpp; |
1158 continue; | 1157 continue; |
1159 } | 1158 } |
1160 int back_alpha = *dest_alpha_scan; | 1159 int back_alpha = dest_scan[3]; |
1161 uint8_t dest_alpha = | 1160 uint8_t dest_alpha = |
1162 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 1161 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
1163 *dest_alpha_scan++ = dest_alpha; | 1162 dest_scan[3] = dest_alpha; |
1164 int alpha_ratio = src_alpha * 255 / dest_alpha; | 1163 int alpha_ratio = src_alpha * 255 / dest_alpha; |
1165 for (int color = 0; color < 3; color++) { | 1164 for (int color = 0; color < 3; color++) { |
1166 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio); | 1165 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, alpha_ratio); |
1167 dest_scan++; | 1166 dest_scan++; |
1168 src_scan++; | 1167 src_scan++; |
1169 } | 1168 } |
| 1169 dest_scan++; |
1170 src_scan += src_gap; | 1170 src_scan += src_gap; |
1171 } | 1171 } |
1172 } | 1172 } |
1173 } | 1173 } |
1174 inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip(uint8_t* dest_scan, | 1174 inline void _CompositeRow_Rgb2Argb_NoBlend_NoClip(uint8_t* dest_scan, |
1175 const uint8_t* src_scan, | 1175 const uint8_t* src_scan, |
1176 int width, | 1176 int width, |
1177 int src_Bpp, | 1177 int src_Bpp, |
1178 uint8_t* dest_alpha_scan) { | 1178 uint8_t* dest_alpha_scan) { |
1179 if (dest_alpha_scan == NULL) { | 1179 if (dest_alpha_scan) { |
| 1180 int src_gap = src_Bpp - 3; |
| 1181 for (int col = 0; col < width; col++) { |
| 1182 *dest_scan++ = *src_scan++; |
| 1183 *dest_scan++ = *src_scan++; |
| 1184 *dest_scan++ = *src_scan++; |
| 1185 *dest_alpha_scan++ = 0xff; |
| 1186 src_scan += src_gap; |
| 1187 } |
| 1188 } else { |
1180 for (int col = 0; col < width; col++) { | 1189 for (int col = 0; col < width; col++) { |
1181 if (src_Bpp == 4) { | 1190 if (src_Bpp == 4) { |
1182 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan)); | 1191 FXARGB_SETDIB(dest_scan, 0xff000000 | FXARGB_GETDIB(src_scan)); |
1183 } else { | 1192 } else { |
1184 FXARGB_SETDIB(dest_scan, | 1193 FXARGB_SETDIB(dest_scan, |
1185 FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0])); | 1194 FXARGB_MAKE(0xff, src_scan[2], src_scan[1], src_scan[0])); |
1186 } | 1195 } |
1187 dest_scan += 4; | 1196 dest_scan += 4; |
1188 src_scan += src_Bpp; | 1197 src_scan += src_Bpp; |
1189 } | 1198 } |
1190 } else { | |
1191 int src_gap = src_Bpp - 3; | |
1192 for (int col = 0; col < width; col++) { | |
1193 *dest_scan++ = *src_scan++; | |
1194 *dest_scan++ = *src_scan++; | |
1195 *dest_scan++ = *src_scan++; | |
1196 *dest_alpha_scan++ = 0xff; | |
1197 src_scan += src_gap; | |
1198 } | |
1199 } | 1199 } |
1200 } | 1200 } |
1201 inline void _CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan, | 1201 inline void _CompositeRow_Argb2Rgb_Blend(uint8_t* dest_scan, |
1202 const uint8_t* src_scan, | 1202 const uint8_t* src_scan, |
1203 int width, | 1203 int width, |
1204 int blend_type, | 1204 int blend_type, |
1205 int dest_Bpp, | 1205 int dest_Bpp, |
1206 const uint8_t* clip_scan, | 1206 const uint8_t* clip_scan, |
1207 const uint8_t* src_alpha_scan) { | 1207 const uint8_t* src_alpha_scan) { |
1208 int blended_colors[3]; | 1208 int blended_colors[3]; |
1209 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1209 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
1210 int dest_gap = dest_Bpp - 3; | 1210 int dest_gap = dest_Bpp - 3; |
1211 if (src_alpha_scan == NULL) { | 1211 if (src_alpha_scan) { |
1212 for (int col = 0; col < width; col++) { | 1212 for (int col = 0; col < width; col++) { |
1213 uint8_t src_alpha; | 1213 uint8_t src_alpha; |
1214 if (clip_scan) { | 1214 if (clip_scan) { |
1215 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1215 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; |
1216 } else { | 1216 } else { |
1217 src_alpha = src_scan[3]; | 1217 src_alpha = *src_alpha_scan++; |
1218 } | 1218 } |
1219 if (src_alpha == 0) { | 1219 if (src_alpha == 0) { |
1220 dest_scan += dest_Bpp; | 1220 dest_scan += dest_Bpp; |
1221 src_scan += 4; | 1221 src_scan += 3; |
1222 continue; | 1222 continue; |
1223 } | 1223 } |
1224 if (bNonseparableBlend) { | 1224 if (bNonseparableBlend) { |
1225 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1225 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
1226 } | 1226 } |
1227 for (int color = 0; color < 3; color++) { | 1227 for (int color = 0; color < 3; color++) { |
1228 int back_color = *dest_scan; | 1228 int back_color = *dest_scan; |
1229 int blended = bNonseparableBlend | 1229 int blended = bNonseparableBlend |
1230 ? blended_colors[color] | 1230 ? blended_colors[color] |
1231 : _BLEND(blend_type, back_color, *src_scan); | 1231 : _BLEND(blend_type, back_color, *src_scan); |
1232 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); | 1232 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); |
1233 dest_scan++; | 1233 dest_scan++; |
1234 src_scan++; | 1234 src_scan++; |
1235 } | 1235 } |
1236 dest_scan += dest_gap; | 1236 dest_scan += dest_gap; |
1237 src_scan++; | |
1238 } | 1237 } |
1239 } else { | 1238 } else { |
1240 for (int col = 0; col < width; col++) { | 1239 for (int col = 0; col < width; col++) { |
1241 uint8_t src_alpha; | 1240 uint8_t src_alpha; |
1242 if (clip_scan) { | 1241 if (clip_scan) { |
1243 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; | 1242 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
1244 } else { | 1243 } else { |
1245 src_alpha = *src_alpha_scan++; | 1244 src_alpha = src_scan[3]; |
1246 } | 1245 } |
1247 if (src_alpha == 0) { | 1246 if (src_alpha == 0) { |
1248 dest_scan += dest_Bpp; | 1247 dest_scan += dest_Bpp; |
1249 src_scan += 3; | 1248 src_scan += 4; |
1250 continue; | 1249 continue; |
1251 } | 1250 } |
1252 if (bNonseparableBlend) { | 1251 if (bNonseparableBlend) { |
1253 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); | 1252 _RGB_Blend(blend_type, src_scan, dest_scan, blended_colors); |
1254 } | 1253 } |
1255 for (int color = 0; color < 3; color++) { | 1254 for (int color = 0; color < 3; color++) { |
1256 int back_color = *dest_scan; | 1255 int back_color = *dest_scan; |
1257 int blended = bNonseparableBlend | 1256 int blended = bNonseparableBlend |
1258 ? blended_colors[color] | 1257 ? blended_colors[color] |
1259 : _BLEND(blend_type, back_color, *src_scan); | 1258 : _BLEND(blend_type, back_color, *src_scan); |
1260 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); | 1259 *dest_scan = FXDIB_ALPHA_MERGE(back_color, blended, src_alpha); |
1261 dest_scan++; | 1260 dest_scan++; |
1262 src_scan++; | 1261 src_scan++; |
1263 } | 1262 } |
1264 dest_scan += dest_gap; | 1263 dest_scan += dest_gap; |
| 1264 src_scan++; |
1265 } | 1265 } |
1266 } | 1266 } |
1267 } | 1267 } |
1268 inline void _CompositeRow_Argb2Rgb_NoBlend(uint8_t* dest_scan, | 1268 inline void _CompositeRow_Argb2Rgb_NoBlend(uint8_t* dest_scan, |
1269 const uint8_t* src_scan, | 1269 const uint8_t* src_scan, |
1270 int width, | 1270 int width, |
1271 int dest_Bpp, | 1271 int dest_Bpp, |
1272 const uint8_t* clip_scan, | 1272 const uint8_t* clip_scan, |
1273 const uint8_t* src_alpha_scan) { | 1273 const uint8_t* src_alpha_scan) { |
1274 int dest_gap = dest_Bpp - 3; | 1274 int dest_gap = dest_Bpp - 3; |
1275 if (src_alpha_scan == NULL) { | 1275 if (src_alpha_scan) { |
1276 for (int col = 0; col < width; col++) { | 1276 for (int col = 0; col < width; col++) { |
1277 uint8_t src_alpha; | 1277 uint8_t src_alpha; |
1278 if (clip_scan) { | 1278 if (clip_scan) { |
1279 src_alpha = src_scan[3] * (*clip_scan++) / 255; | 1279 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; |
1280 } else { | 1280 } else { |
1281 src_alpha = src_scan[3]; | 1281 src_alpha = *src_alpha_scan++; |
1282 } | 1282 } |
1283 if (src_alpha == 255) { | 1283 if (src_alpha == 255) { |
1284 *dest_scan++ = *src_scan++; | 1284 *dest_scan++ = *src_scan++; |
1285 *dest_scan++ = *src_scan++; | 1285 *dest_scan++ = *src_scan++; |
1286 *dest_scan++ = *src_scan++; | 1286 *dest_scan++ = *src_scan++; |
1287 dest_scan += dest_gap; | 1287 dest_scan += dest_gap; |
1288 src_scan++; | |
1289 continue; | 1288 continue; |
1290 } | 1289 } |
1291 if (src_alpha == 0) { | 1290 if (src_alpha == 0) { |
1292 dest_scan += dest_Bpp; | 1291 dest_scan += dest_Bpp; |
1293 src_scan += 4; | 1292 src_scan += 3; |
1294 continue; | 1293 continue; |
1295 } | 1294 } |
1296 for (int color = 0; color < 3; color++) { | 1295 for (int color = 0; color < 3; color++) { |
1297 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha); | 1296 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha); |
1298 dest_scan++; | 1297 dest_scan++; |
1299 src_scan++; | 1298 src_scan++; |
1300 } | 1299 } |
1301 dest_scan += dest_gap; | 1300 dest_scan += dest_gap; |
1302 src_scan++; | |
1303 } | 1301 } |
1304 } else { | 1302 } else { |
1305 for (int col = 0; col < width; col++) { | 1303 for (int col = 0; col < width; col++) { |
1306 uint8_t src_alpha; | 1304 uint8_t src_alpha; |
1307 if (clip_scan) { | 1305 if (clip_scan) { |
1308 src_alpha = (*src_alpha_scan++) * (*clip_scan++) / 255; | 1306 src_alpha = src_scan[3] * (*clip_scan++) / 255; |
1309 } else { | 1307 } else { |
1310 src_alpha = *src_alpha_scan++; | 1308 src_alpha = src_scan[3]; |
1311 } | 1309 } |
1312 if (src_alpha == 255) { | 1310 if (src_alpha == 255) { |
1313 *dest_scan++ = *src_scan++; | 1311 *dest_scan++ = *src_scan++; |
1314 *dest_scan++ = *src_scan++; | 1312 *dest_scan++ = *src_scan++; |
1315 *dest_scan++ = *src_scan++; | 1313 *dest_scan++ = *src_scan++; |
1316 dest_scan += dest_gap; | 1314 dest_scan += dest_gap; |
| 1315 src_scan++; |
1317 continue; | 1316 continue; |
1318 } | 1317 } |
1319 if (src_alpha == 0) { | 1318 if (src_alpha == 0) { |
1320 dest_scan += dest_Bpp; | 1319 dest_scan += dest_Bpp; |
1321 src_scan += 3; | 1320 src_scan += 4; |
1322 continue; | 1321 continue; |
1323 } | 1322 } |
1324 for (int color = 0; color < 3; color++) { | 1323 for (int color = 0; color < 3; color++) { |
1325 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha); | 1324 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, *src_scan, src_alpha); |
1326 dest_scan++; | 1325 dest_scan++; |
1327 src_scan++; | 1326 src_scan++; |
1328 } | 1327 } |
1329 dest_scan += dest_gap; | 1328 dest_scan += dest_gap; |
| 1329 src_scan++; |
1330 } | 1330 } |
1331 } | 1331 } |
1332 } | 1332 } |
1333 inline void _CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan, | 1333 inline void _CompositeRow_Rgb2Rgb_Blend_NoClip(uint8_t* dest_scan, |
1334 const uint8_t* src_scan, | 1334 const uint8_t* src_scan, |
1335 int width, | 1335 int width, |
1336 int blend_type, | 1336 int blend_type, |
1337 int dest_Bpp, | 1337 int dest_Bpp, |
1338 int src_Bpp) { | 1338 int src_Bpp) { |
1339 int blended_colors[3]; | 1339 int blended_colors[3]; |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1444 int blend_type, | 1444 int blend_type, |
1445 const uint8_t* clip_scan, | 1445 const uint8_t* clip_scan, |
1446 uint8_t* dest_alpha_scan, | 1446 uint8_t* dest_alpha_scan, |
1447 const uint8_t* src_alpha_scan, | 1447 const uint8_t* src_alpha_scan, |
1448 uint8_t* src_cache_scan, | 1448 uint8_t* src_cache_scan, |
1449 void* pIccTransform) { | 1449 void* pIccTransform) { |
1450 uint8_t* dp = src_cache_scan; | 1450 uint8_t* dp = src_cache_scan; |
1451 ICodec_IccModule* pIccModule = | 1451 ICodec_IccModule* pIccModule = |
1452 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 1452 CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
1453 if (src_alpha_scan) { | 1453 if (src_alpha_scan) { |
1454 if (dest_alpha_scan == NULL) { | 1454 if (dest_alpha_scan) { |
| 1455 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, pixel_count); |
| 1456 } else { |
1455 for (int col = 0; col < pixel_count; col++) { | 1457 for (int col = 0; col < pixel_count; col++) { |
1456 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); | 1458 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); |
1457 dp[3] = *src_alpha_scan++; | 1459 dp[3] = *src_alpha_scan++; |
1458 src_scan += 3; | 1460 src_scan += 3; |
1459 dp += 4; | 1461 dp += 4; |
1460 } | 1462 } |
1461 src_alpha_scan = NULL; | 1463 src_alpha_scan = NULL; |
1462 } else { | |
1463 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, pixel_count); | |
1464 } | 1464 } |
1465 } else { | 1465 } else { |
1466 if (dest_alpha_scan == NULL) { | 1466 if (dest_alpha_scan) { |
1467 for (int col = 0; col < pixel_count; col++) { | |
1468 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); | |
1469 dp[3] = src_scan[3]; | |
1470 src_scan += 4; | |
1471 dp += 4; | |
1472 } | |
1473 } else { | |
1474 int blended_colors[3]; | 1467 int blended_colors[3]; |
1475 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 1468 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
1476 for (int col = 0; col < pixel_count; col++) { | 1469 for (int col = 0; col < pixel_count; col++) { |
1477 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, | 1470 pIccModule->TranslateScanline(pIccTransform, src_cache_scan, src_scan, |
1478 1); | 1471 1); |
1479 uint8_t back_alpha = *dest_alpha_scan; | 1472 uint8_t back_alpha = *dest_alpha_scan; |
1480 if (back_alpha == 0) { | 1473 if (back_alpha == 0) { |
1481 if (clip_scan) { | 1474 if (clip_scan) { |
1482 int src_alpha = clip_scan[col] * src_scan[3] / 255; | 1475 int src_alpha = clip_scan[col] * src_scan[3] / 255; |
1483 *dest_alpha_scan = src_alpha; | 1476 *dest_alpha_scan = src_alpha; |
1484 *dest_scan++ = *src_cache_scan++; | 1477 *dest_scan++ = *src_cache_scan++; |
1485 *dest_scan++ = *src_cache_scan++; | 1478 *dest_scan++ = *src_cache_scan++; |
1486 *dest_scan++ = *src_cache_scan++; | 1479 *dest_scan++ = *src_cache_scan++; |
1487 } else { | 1480 } else { |
1488 *dest_alpha_scan = src_scan[3]; | 1481 *dest_alpha_scan = src_scan[3]; |
1489 *dest_scan++ = *src_cache_scan++; | 1482 *dest_scan++ = *src_cache_scan++; |
1490 *dest_scan++ = *src_cache_scan++; | 1483 *dest_scan++ = *src_cache_scan++; |
1491 *dest_scan++ = *src_cache_scan++; | 1484 *dest_scan++ = *src_cache_scan++; |
1492 } | 1485 } |
1493 dest_alpha_scan++; | 1486 dest_alpha_scan++; |
1494 src_scan += 4; | 1487 src_scan += 4; |
1495 continue; | 1488 continue; |
1496 } | 1489 } |
1497 uint8_t src_alpha; | 1490 uint8_t src_alpha; |
1498 if (clip_scan == NULL) { | 1491 if (clip_scan) { |
| 1492 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 1493 } else { |
1499 src_alpha = src_scan[3]; | 1494 src_alpha = src_scan[3]; |
1500 } else { | |
1501 src_alpha = clip_scan[col] * src_scan[3] / 255; | |
1502 } | 1495 } |
1503 src_scan += 4; | 1496 src_scan += 4; |
1504 if (src_alpha == 0) { | 1497 if (src_alpha == 0) { |
1505 dest_scan += 3; | 1498 dest_scan += 3; |
1506 src_cache_scan += 3; | 1499 src_cache_scan += 3; |
1507 dest_alpha_scan++; | 1500 dest_alpha_scan++; |
1508 continue; | 1501 continue; |
1509 } | 1502 } |
1510 uint8_t dest_alpha = | 1503 uint8_t dest_alpha = |
1511 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 1504 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
(...skipping 12 matching lines...) Expand all Loading... |
1524 } else { | 1517 } else { |
1525 *dest_scan = | 1518 *dest_scan = |
1526 FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, alpha_ratio); | 1519 FXDIB_ALPHA_MERGE(*dest_scan, *src_cache_scan, alpha_ratio); |
1527 } | 1520 } |
1528 dest_scan++; | 1521 dest_scan++; |
1529 src_cache_scan++; | 1522 src_cache_scan++; |
1530 } | 1523 } |
1531 } | 1524 } |
1532 return; | 1525 return; |
1533 } | 1526 } |
| 1527 for (int col = 0; col < pixel_count; col++) { |
| 1528 pIccModule->TranslateScanline(pIccTransform, dp, src_scan, 1); |
| 1529 dp[3] = src_scan[3]; |
| 1530 src_scan += 4; |
| 1531 dp += 4; |
| 1532 } |
1534 } | 1533 } |
1535 _CompositeRow_Argb2Argb(dest_scan, src_cache_scan, pixel_count, blend_type, | 1534 _CompositeRow_Argb2Argb(dest_scan, src_cache_scan, pixel_count, blend_type, |
1536 clip_scan, dest_alpha_scan, src_alpha_scan); | 1535 clip_scan, dest_alpha_scan, src_alpha_scan); |
1537 } | 1536 } |
1538 void _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(uint8_t* dest_scan, | 1537 void _CompositeRow_Rgb2Argb_Blend_NoClip_Transform(uint8_t* dest_scan, |
1539 const uint8_t* src_scan, | 1538 const uint8_t* src_scan, |
1540 int width, | 1539 int width, |
1541 int blend_type, | 1540 int blend_type, |
1542 int src_Bpp, | 1541 int src_Bpp, |
1543 uint8_t* dest_alpha_scan, | 1542 uint8_t* dest_alpha_scan, |
(...skipping 456 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2000 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 1999 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
2001 dest_scan++; | 2000 dest_scan++; |
2002 } | 2001 } |
2003 } else { | 2002 } else { |
2004 if (blend_type) { | 2003 if (blend_type) { |
2005 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2004 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
2006 int blended_color; | 2005 int blended_color; |
2007 for (int col = 0; col < pixel_count; col++) { | 2006 for (int col = 0; col < pixel_count; col++) { |
2008 uint8_t gray = pPalette[*src_scan]; | 2007 uint8_t gray = pPalette[*src_scan]; |
2009 src_scan++; | 2008 src_scan++; |
2010 if (clip_scan == NULL || clip_scan[col] == 255) { | 2009 if (!clip_scan || clip_scan[col] == 255) { |
2011 *dest_scan++ = gray; | 2010 *dest_scan++ = gray; |
2012 *dest_alpha_scan++ = 255; | 2011 *dest_alpha_scan++ = 255; |
2013 continue; | 2012 continue; |
2014 } | 2013 } |
2015 int src_alpha = clip_scan[col]; | 2014 int src_alpha = clip_scan[col]; |
2016 if (src_alpha == 0) { | 2015 if (src_alpha == 0) { |
2017 dest_scan++; | 2016 dest_scan++; |
2018 dest_alpha_scan++; | 2017 dest_alpha_scan++; |
2019 continue; | 2018 continue; |
2020 } | 2019 } |
2021 int back_alpha = *dest_alpha_scan; | 2020 int back_alpha = *dest_alpha_scan; |
2022 uint8_t dest_alpha = | 2021 uint8_t dest_alpha = |
2023 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2022 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
2024 *dest_alpha_scan++ = dest_alpha; | 2023 *dest_alpha_scan++ = dest_alpha; |
2025 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2024 int alpha_ratio = src_alpha * 255 / dest_alpha; |
2026 if (bNonseparableBlend) { | 2025 if (bNonseparableBlend) { |
2027 blended_color = | 2026 blended_color = |
2028 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; | 2027 blend_type == FXDIB_BLEND_LUMINOSITY ? gray : *dest_scan; |
2029 } | 2028 } |
2030 gray = bNonseparableBlend ? blended_color | 2029 gray = bNonseparableBlend ? blended_color |
2031 : _BLEND(blend_type, *dest_scan, gray); | 2030 : _BLEND(blend_type, *dest_scan, gray); |
2032 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 2031 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
2033 dest_scan++; | 2032 dest_scan++; |
2034 } | 2033 } |
2035 return; | 2034 return; |
2036 } | 2035 } |
2037 for (int col = 0; col < pixel_count; col++) { | 2036 for (int col = 0; col < pixel_count; col++) { |
2038 uint8_t gray = pPalette[*src_scan]; | 2037 uint8_t gray = pPalette[*src_scan]; |
2039 src_scan++; | 2038 src_scan++; |
2040 if (clip_scan == NULL || clip_scan[col] == 255) { | 2039 if (!clip_scan || clip_scan[col] == 255) { |
2041 *dest_scan++ = gray; | 2040 *dest_scan++ = gray; |
2042 *dest_alpha_scan++ = 255; | 2041 *dest_alpha_scan++ = 255; |
2043 continue; | 2042 continue; |
2044 } | 2043 } |
2045 int src_alpha = clip_scan[col]; | 2044 int src_alpha = clip_scan[col]; |
2046 if (src_alpha == 0) { | 2045 if (src_alpha == 0) { |
2047 dest_scan++; | 2046 dest_scan++; |
2048 dest_alpha_scan++; | 2047 dest_alpha_scan++; |
2049 continue; | 2048 continue; |
2050 } | 2049 } |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2114 int reset_gray = pPalette[0]; | 2113 int reset_gray = pPalette[0]; |
2115 int set_gray = pPalette[1]; | 2114 int set_gray = pPalette[1]; |
2116 if (blend_type) { | 2115 if (blend_type) { |
2117 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; | 2116 FX_BOOL bNonseparableBlend = blend_type >= FXDIB_BLEND_NONSEPARABLE; |
2118 int blended_color; | 2117 int blended_color; |
2119 for (int col = 0; col < pixel_count; col++) { | 2118 for (int col = 0; col < pixel_count; col++) { |
2120 uint8_t gray = | 2119 uint8_t gray = |
2121 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) | 2120 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) |
2122 ? set_gray | 2121 ? set_gray |
2123 : reset_gray; | 2122 : reset_gray; |
2124 if (clip_scan == NULL || clip_scan[col] == 255) { | 2123 if (!clip_scan || clip_scan[col] == 255) { |
2125 *dest_scan++ = gray; | 2124 *dest_scan++ = gray; |
2126 *dest_alpha_scan++ = 255; | 2125 *dest_alpha_scan++ = 255; |
2127 continue; | 2126 continue; |
2128 } | 2127 } |
2129 int src_alpha = clip_scan[col]; | 2128 int src_alpha = clip_scan[col]; |
2130 if (src_alpha == 0) { | 2129 if (src_alpha == 0) { |
2131 dest_scan++; | 2130 dest_scan++; |
2132 dest_alpha_scan++; | 2131 dest_alpha_scan++; |
2133 continue; | 2132 continue; |
2134 } | 2133 } |
(...skipping 11 matching lines...) Expand all Loading... |
2146 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); | 2145 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, gray, alpha_ratio); |
2147 dest_scan++; | 2146 dest_scan++; |
2148 } | 2147 } |
2149 return; | 2148 return; |
2150 } | 2149 } |
2151 for (int col = 0; col < pixel_count; col++) { | 2150 for (int col = 0; col < pixel_count; col++) { |
2152 uint8_t gray = | 2151 uint8_t gray = |
2153 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) | 2152 (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) |
2154 ? set_gray | 2153 ? set_gray |
2155 : reset_gray; | 2154 : reset_gray; |
2156 if (clip_scan == NULL || clip_scan[col] == 255) { | 2155 if (!clip_scan || clip_scan[col] == 255) { |
2157 *dest_scan++ = gray; | 2156 *dest_scan++ = gray; |
2158 *dest_alpha_scan++ = 255; | 2157 *dest_alpha_scan++ = 255; |
2159 continue; | 2158 continue; |
2160 } | 2159 } |
2161 int src_alpha = clip_scan[col]; | 2160 int src_alpha = clip_scan[col]; |
2162 if (src_alpha == 0) { | 2161 if (src_alpha == 0) { |
2163 dest_scan++; | 2162 dest_scan++; |
2164 dest_alpha_scan++; | 2163 dest_alpha_scan++; |
2165 continue; | 2164 continue; |
2166 } | 2165 } |
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2302 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); | 2301 FXARGB_SETDIB(dest_scan, FXARGB_MAKE(src_alpha, src_r, src_g, src_b)); |
2303 } else { | 2302 } else { |
2304 FXARGB_SETDIB(dest_scan, | 2303 FXARGB_SETDIB(dest_scan, |
2305 FXARGB_MAKE(*src_alpha_scan, src_r, src_g, src_b)); | 2304 FXARGB_MAKE(*src_alpha_scan, src_r, src_g, src_b)); |
2306 } | 2305 } |
2307 dest_scan += 4; | 2306 dest_scan += 4; |
2308 src_alpha_scan++; | 2307 src_alpha_scan++; |
2309 continue; | 2308 continue; |
2310 } | 2309 } |
2311 uint8_t src_alpha; | 2310 uint8_t src_alpha; |
2312 if (clip_scan == NULL) { | 2311 if (clip_scan) { |
| 2312 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 2313 } else { |
2313 src_alpha = *src_alpha_scan++; | 2314 src_alpha = *src_alpha_scan++; |
2314 } else { | |
2315 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | |
2316 } | 2315 } |
2317 if (src_alpha == 0) { | 2316 if (src_alpha == 0) { |
2318 dest_scan += 4; | 2317 dest_scan += 4; |
2319 continue; | 2318 continue; |
2320 } | 2319 } |
2321 uint8_t dest_alpha = | 2320 uint8_t dest_alpha = |
2322 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2321 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
2323 dest_scan[3] = dest_alpha; | 2322 dest_scan[3] = dest_alpha; |
2324 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2323 int alpha_ratio = src_alpha * 255 / dest_alpha; |
2325 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2324 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
2326 dest_scan++; | 2325 dest_scan++; |
2327 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2326 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
2328 dest_scan++; | 2327 dest_scan++; |
2329 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2328 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
2330 dest_scan++; | 2329 dest_scan++; |
2331 dest_scan++; | 2330 dest_scan++; |
2332 } | 2331 } |
2333 } else | 2332 } else |
2334 for (int col = 0; col < width; col++) { | 2333 for (int col = 0; col < width; col++) { |
2335 FX_ARGB argb = pPalette[*src_scan]; | 2334 FX_ARGB argb = pPalette[*src_scan]; |
2336 int src_r = FXARGB_R(argb); | 2335 int src_r = FXARGB_R(argb); |
2337 int src_g = FXARGB_G(argb); | 2336 int src_g = FXARGB_G(argb); |
2338 int src_b = FXARGB_B(argb); | 2337 int src_b = FXARGB_B(argb); |
2339 if (clip_scan == NULL || clip_scan[col] == 255) { | 2338 if (!clip_scan || clip_scan[col] == 255) { |
2340 *dest_scan++ = src_b; | 2339 *dest_scan++ = src_b; |
2341 *dest_scan++ = src_g; | 2340 *dest_scan++ = src_g; |
2342 *dest_scan++ = src_r; | 2341 *dest_scan++ = src_r; |
2343 *dest_scan++ = 255; | 2342 *dest_scan++ = 255; |
2344 src_scan++; | 2343 src_scan++; |
2345 continue; | 2344 continue; |
2346 } | 2345 } |
2347 int src_alpha = clip_scan[col]; | 2346 int src_alpha = clip_scan[col]; |
2348 if (src_alpha == 0) { | 2347 if (src_alpha == 0) { |
2349 dest_scan += 4; | 2348 dest_scan += 4; |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2387 } else { | 2386 } else { |
2388 *dest_alpha_scan++ = *src_alpha_scan; | 2387 *dest_alpha_scan++ = *src_alpha_scan; |
2389 } | 2388 } |
2390 *dest_scan++ = src_b; | 2389 *dest_scan++ = src_b; |
2391 *dest_scan++ = src_g; | 2390 *dest_scan++ = src_g; |
2392 *dest_scan++ = src_r; | 2391 *dest_scan++ = src_r; |
2393 src_alpha_scan++; | 2392 src_alpha_scan++; |
2394 continue; | 2393 continue; |
2395 } | 2394 } |
2396 uint8_t src_alpha; | 2395 uint8_t src_alpha; |
2397 if (clip_scan == NULL) { | 2396 if (clip_scan) { |
| 2397 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; |
| 2398 } else { |
2398 src_alpha = *src_alpha_scan++; | 2399 src_alpha = *src_alpha_scan++; |
2399 } else { | |
2400 src_alpha = clip_scan[col] * (*src_alpha_scan++) / 255; | |
2401 } | 2400 } |
2402 if (src_alpha == 0) { | 2401 if (src_alpha == 0) { |
2403 dest_scan += 3; | 2402 dest_scan += 3; |
2404 dest_alpha_scan++; | 2403 dest_alpha_scan++; |
2405 continue; | 2404 continue; |
2406 } | 2405 } |
2407 uint8_t dest_alpha = | 2406 uint8_t dest_alpha = |
2408 back_alpha + src_alpha - back_alpha * src_alpha / 255; | 2407 back_alpha + src_alpha - back_alpha * src_alpha / 255; |
2409 *dest_alpha_scan++ = dest_alpha; | 2408 *dest_alpha_scan++ = dest_alpha; |
2410 int alpha_ratio = src_alpha * 255 / dest_alpha; | 2409 int alpha_ratio = src_alpha * 255 / dest_alpha; |
2411 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); | 2410 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_b, alpha_ratio); |
2412 dest_scan++; | 2411 dest_scan++; |
2413 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); | 2412 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_g, alpha_ratio); |
2414 dest_scan++; | 2413 dest_scan++; |
2415 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); | 2414 *dest_scan = FXDIB_ALPHA_MERGE(*dest_scan, src_r, alpha_ratio); |
2416 dest_scan++; | 2415 dest_scan++; |
2417 } | 2416 } |
2418 } else | 2417 } else |
2419 for (int col = 0; col < width; col++) { | 2418 for (int col = 0; col < width; col++) { |
2420 FX_ARGB argb = pPalette[*src_scan]; | 2419 FX_ARGB argb = pPalette[*src_scan]; |
2421 int src_r = FXARGB_R(argb); | 2420 int src_r = FXARGB_R(argb); |
2422 int src_g = FXARGB_G(argb); | 2421 int src_g = FXARGB_G(argb); |
2423 int src_b = FXARGB_B(argb); | 2422 int src_b = FXARGB_B(argb); |
2424 if (clip_scan == NULL || clip_scan[col] == 255) { | 2423 if (!clip_scan || clip_scan[col] == 255) { |
2425 *dest_scan++ = src_b; | 2424 *dest_scan++ = src_b; |
2426 *dest_scan++ = src_g; | 2425 *dest_scan++ = src_g; |
2427 *dest_scan++ = src_r; | 2426 *dest_scan++ = src_r; |
2428 *dest_alpha_scan++ = 255; | 2427 *dest_alpha_scan++ = 255; |
2429 src_scan++; | 2428 src_scan++; |
2430 continue; | 2429 continue; |
2431 } | 2430 } |
2432 int src_alpha = clip_scan[col]; | 2431 int src_alpha = clip_scan[col]; |
2433 if (src_alpha == 0) { | 2432 if (src_alpha == 0) { |
2434 dest_scan += 3; | 2433 dest_scan += 3; |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2468 int src_r, src_g, src_b; | 2467 int src_r, src_g, src_b; |
2469 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { | 2468 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { |
2470 src_r = set_r; | 2469 src_r = set_r; |
2471 src_g = set_g; | 2470 src_g = set_g; |
2472 src_b = set_b; | 2471 src_b = set_b; |
2473 } else { | 2472 } else { |
2474 src_r = reset_r; | 2473 src_r = reset_r; |
2475 src_g = reset_g; | 2474 src_g = reset_g; |
2476 src_b = reset_b; | 2475 src_b = reset_b; |
2477 } | 2476 } |
2478 if (clip_scan == NULL || clip_scan[col] == 255) { | 2477 if (!clip_scan || clip_scan[col] == 255) { |
2479 *dest_scan++ = src_b; | 2478 *dest_scan++ = src_b; |
2480 *dest_scan++ = src_g; | 2479 *dest_scan++ = src_g; |
2481 *dest_scan++ = src_r; | 2480 *dest_scan++ = src_r; |
2482 *dest_scan++ = 255; | 2481 *dest_scan++ = 255; |
2483 continue; | 2482 continue; |
2484 } | 2483 } |
2485 int src_alpha = clip_scan[col]; | 2484 int src_alpha = clip_scan[col]; |
2486 if (src_alpha == 0) { | 2485 if (src_alpha == 0) { |
2487 dest_scan += 4; | 2486 dest_scan += 4; |
2488 continue; | 2487 continue; |
(...skipping 30 matching lines...) Expand all Loading... |
2519 int src_r, src_g, src_b; | 2518 int src_r, src_g, src_b; |
2520 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { | 2519 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { |
2521 src_r = set_r; | 2520 src_r = set_r; |
2522 src_g = set_g; | 2521 src_g = set_g; |
2523 src_b = set_b; | 2522 src_b = set_b; |
2524 } else { | 2523 } else { |
2525 src_r = reset_r; | 2524 src_r = reset_r; |
2526 src_g = reset_g; | 2525 src_g = reset_g; |
2527 src_b = reset_b; | 2526 src_b = reset_b; |
2528 } | 2527 } |
2529 if (clip_scan == NULL || clip_scan[col] == 255) { | 2528 if (!clip_scan || clip_scan[col] == 255) { |
2530 *dest_scan++ = src_b; | 2529 *dest_scan++ = src_b; |
2531 *dest_scan++ = src_g; | 2530 *dest_scan++ = src_g; |
2532 *dest_scan++ = src_r; | 2531 *dest_scan++ = src_r; |
2533 *dest_alpha_scan++ = 255; | 2532 *dest_alpha_scan++ = 255; |
2534 continue; | 2533 continue; |
2535 } | 2534 } |
2536 int src_alpha = clip_scan[col]; | 2535 int src_alpha = clip_scan[col]; |
2537 if (src_alpha == 0) { | 2536 if (src_alpha == 0) { |
2538 dest_scan += 3; | 2537 dest_scan += 3; |
2539 dest_alpha_scan++; | 2538 dest_alpha_scan++; |
(...skipping 276 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2816 void _CompositeRow_BitMask2Argb(uint8_t* dest_scan, | 2815 void _CompositeRow_BitMask2Argb(uint8_t* dest_scan, |
2817 const uint8_t* src_scan, | 2816 const uint8_t* src_scan, |
2818 int mask_alpha, | 2817 int mask_alpha, |
2819 int src_r, | 2818 int src_r, |
2820 int src_g, | 2819 int src_g, |
2821 int src_b, | 2820 int src_b, |
2822 int src_left, | 2821 int src_left, |
2823 int pixel_count, | 2822 int pixel_count, |
2824 int blend_type, | 2823 int blend_type, |
2825 const uint8_t* clip_scan) { | 2824 const uint8_t* clip_scan) { |
2826 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && | 2825 if (blend_type == FXDIB_BLEND_NORMAL && !clip_scan && mask_alpha == 255) { |
2827 mask_alpha == 255) { | |
2828 FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b); | 2826 FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b); |
2829 for (int col = 0; col < pixel_count; col++) { | 2827 for (int col = 0; col < pixel_count; col++) { |
2830 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { | 2828 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { |
2831 FXARGB_SETDIB(dest_scan, argb); | 2829 FXARGB_SETDIB(dest_scan, argb); |
2832 } | 2830 } |
2833 dest_scan += 4; | 2831 dest_scan += 4; |
2834 } | 2832 } |
2835 return; | 2833 return; |
2836 } | 2834 } |
2837 for (int col = 0; col < pixel_count; col++) { | 2835 for (int col = 0; col < pixel_count; col++) { |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2895 const uint8_t* src_scan, | 2893 const uint8_t* src_scan, |
2896 int mask_alpha, | 2894 int mask_alpha, |
2897 int src_r, | 2895 int src_r, |
2898 int src_g, | 2896 int src_g, |
2899 int src_b, | 2897 int src_b, |
2900 int src_left, | 2898 int src_left, |
2901 int pixel_count, | 2899 int pixel_count, |
2902 int blend_type, | 2900 int blend_type, |
2903 const uint8_t* clip_scan, | 2901 const uint8_t* clip_scan, |
2904 uint8_t* dest_alpha_scan) { | 2902 uint8_t* dest_alpha_scan) { |
2905 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && | 2903 if (blend_type == FXDIB_BLEND_NORMAL && !clip_scan && mask_alpha == 255) { |
2906 mask_alpha == 255) { | |
2907 for (int col = 0; col < pixel_count; col++) { | 2904 for (int col = 0; col < pixel_count; col++) { |
2908 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { | 2905 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { |
2909 dest_scan[0] = src_b; | 2906 dest_scan[0] = src_b; |
2910 dest_scan[1] = src_g; | 2907 dest_scan[1] = src_g; |
2911 dest_scan[2] = src_r; | 2908 dest_scan[2] = src_r; |
2912 *dest_alpha_scan = mask_alpha; | 2909 *dest_alpha_scan = mask_alpha; |
2913 } | 2910 } |
2914 dest_scan += 3; | 2911 dest_scan += 3; |
2915 dest_alpha_scan++; | 2912 dest_alpha_scan++; |
2916 } | 2913 } |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2982 const uint8_t* src_scan, | 2979 const uint8_t* src_scan, |
2983 int mask_alpha, | 2980 int mask_alpha, |
2984 int src_r, | 2981 int src_r, |
2985 int src_g, | 2982 int src_g, |
2986 int src_b, | 2983 int src_b, |
2987 int src_left, | 2984 int src_left, |
2988 int pixel_count, | 2985 int pixel_count, |
2989 int blend_type, | 2986 int blend_type, |
2990 int Bpp, | 2987 int Bpp, |
2991 const uint8_t* clip_scan) { | 2988 const uint8_t* clip_scan) { |
2992 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && | 2989 if (blend_type == FXDIB_BLEND_NORMAL && !clip_scan && mask_alpha == 255) { |
2993 mask_alpha == 255) { | |
2994 for (int col = 0; col < pixel_count; col++) { | 2990 for (int col = 0; col < pixel_count; col++) { |
2995 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { | 2991 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { |
2996 dest_scan[2] = src_r; | 2992 dest_scan[2] = src_r; |
2997 dest_scan[1] = src_g; | 2993 dest_scan[1] = src_g; |
2998 dest_scan[0] = src_b; | 2994 dest_scan[0] = src_b; |
2999 } | 2995 } |
3000 dest_scan += Bpp; | 2996 dest_scan += Bpp; |
3001 } | 2997 } |
3002 return; | 2998 return; |
3003 } | 2999 } |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3152 dest_scan[1] = src_scan[1]; | 3148 dest_scan[1] = src_scan[1]; |
3153 dest_scan[2] = src_scan[0]; | 3149 dest_scan[2] = src_scan[0]; |
3154 } else { | 3150 } else { |
3155 FXARGB_RGBORDERCOPY(dest_scan, src_scan); | 3151 FXARGB_RGBORDERCOPY(dest_scan, src_scan); |
3156 } | 3152 } |
3157 dest_scan += 4; | 3153 dest_scan += 4; |
3158 src_scan += 4; | 3154 src_scan += 4; |
3159 continue; | 3155 continue; |
3160 } | 3156 } |
3161 uint8_t src_alpha; | 3157 uint8_t src_alpha; |
3162 if (clip_scan == NULL) { | 3158 if (clip_scan) { |
| 3159 src_alpha = clip_scan[col] * src_scan[3] / 255; |
| 3160 } else { |
3163 src_alpha = src_scan[3]; | 3161 src_alpha = src_scan[3]; |
3164 } else { | |
3165 src_alpha = clip_scan[col] * src_scan[3] / 255; | |
3166 } | 3162 } |
3167 if (src_alpha == 0) { | 3163 if (src_alpha == 0) { |
3168 dest_scan += 4; | 3164 dest_scan += 4; |
3169 src_scan += 4; | 3165 src_scan += 4; |
3170 continue; | 3166 continue; |
3171 } | 3167 } |
3172 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; | 3168 uint8_t dest_alpha = back_alpha + src_alpha - back_alpha * src_alpha / 255; |
3173 dest_scan[3] = dest_alpha; | 3169 dest_scan[3] = dest_alpha; |
3174 int alpha_ratio = src_alpha * 255 / dest_alpha; | 3170 int alpha_ratio = src_alpha * 255 / dest_alpha; |
3175 if (bNonseparableBlend) { | 3171 if (bNonseparableBlend) { |
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3616 for (int col = 0; col < width; col++) { | 3612 for (int col = 0; col < width; col++) { |
3617 int src_r, src_g, src_b; | 3613 int src_r, src_g, src_b; |
3618 if (pPalette) { | 3614 if (pPalette) { |
3619 FX_ARGB argb = pPalette[*src_scan]; | 3615 FX_ARGB argb = pPalette[*src_scan]; |
3620 src_r = FXARGB_R(argb); | 3616 src_r = FXARGB_R(argb); |
3621 src_g = FXARGB_G(argb); | 3617 src_g = FXARGB_G(argb); |
3622 src_b = FXARGB_B(argb); | 3618 src_b = FXARGB_B(argb); |
3623 } else { | 3619 } else { |
3624 src_r = src_g = src_b = *src_scan; | 3620 src_r = src_g = src_b = *src_scan; |
3625 } | 3621 } |
3626 if (clip_scan == NULL || clip_scan[col] == 255) { | 3622 if (!clip_scan || clip_scan[col] == 255) { |
3627 dest_scan[2] = FX_GAMMA(src_b); | 3623 dest_scan[2] = FX_GAMMA(src_b); |
3628 dest_scan[1] = FX_GAMMA(src_g); | 3624 dest_scan[1] = FX_GAMMA(src_g); |
3629 dest_scan[0] = FX_GAMMA(src_r); | 3625 dest_scan[0] = FX_GAMMA(src_r); |
3630 dest_scan[3] = 255; | 3626 dest_scan[3] = 255; |
3631 src_scan++; | 3627 src_scan++; |
3632 dest_scan += 4; | 3628 dest_scan += 4; |
3633 continue; | 3629 continue; |
3634 } | 3630 } |
3635 int src_alpha = clip_scan[col]; | 3631 int src_alpha = clip_scan[col]; |
3636 if (src_alpha == 0) { | 3632 if (src_alpha == 0) { |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3676 int src_r, src_g, src_b; | 3672 int src_r, src_g, src_b; |
3677 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { | 3673 if (src_scan[(col + src_left) / 8] & (1 << (7 - (col + src_left) % 8))) { |
3678 src_r = set_r; | 3674 src_r = set_r; |
3679 src_g = set_g; | 3675 src_g = set_g; |
3680 src_b = set_b; | 3676 src_b = set_b; |
3681 } else { | 3677 } else { |
3682 src_r = reset_r; | 3678 src_r = reset_r; |
3683 src_g = reset_g; | 3679 src_g = reset_g; |
3684 src_b = reset_b; | 3680 src_b = reset_b; |
3685 } | 3681 } |
3686 if (clip_scan == NULL || clip_scan[col] == 255) { | 3682 if (!clip_scan || clip_scan[col] == 255) { |
3687 dest_scan[2] = FX_GAMMA(src_b); | 3683 dest_scan[2] = FX_GAMMA(src_b); |
3688 dest_scan[1] = FX_GAMMA(src_g); | 3684 dest_scan[1] = FX_GAMMA(src_g); |
3689 dest_scan[0] = FX_GAMMA(src_r); | 3685 dest_scan[0] = FX_GAMMA(src_r); |
3690 dest_scan[3] = 255; | 3686 dest_scan[3] = 255; |
3691 dest_scan += 4; | 3687 dest_scan += 4; |
3692 continue; | 3688 continue; |
3693 } | 3689 } |
3694 int src_alpha = clip_scan[col]; | 3690 int src_alpha = clip_scan[col]; |
3695 if (src_alpha == 0) { | 3691 if (src_alpha == 0) { |
3696 dest_scan += 4; | 3692 dest_scan += 4; |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3830 void _CompositeRow_BitMask2Argb_RgbByteOrder(uint8_t* dest_scan, | 3826 void _CompositeRow_BitMask2Argb_RgbByteOrder(uint8_t* dest_scan, |
3831 const uint8_t* src_scan, | 3827 const uint8_t* src_scan, |
3832 int mask_alpha, | 3828 int mask_alpha, |
3833 int src_r, | 3829 int src_r, |
3834 int src_g, | 3830 int src_g, |
3835 int src_b, | 3831 int src_b, |
3836 int src_left, | 3832 int src_left, |
3837 int pixel_count, | 3833 int pixel_count, |
3838 int blend_type, | 3834 int blend_type, |
3839 const uint8_t* clip_scan) { | 3835 const uint8_t* clip_scan) { |
3840 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && | 3836 if (blend_type == FXDIB_BLEND_NORMAL && !clip_scan && mask_alpha == 255) { |
3841 mask_alpha == 255) { | |
3842 FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b); | 3837 FX_ARGB argb = FXARGB_MAKE(0xff, src_r, src_g, src_b); |
3843 for (int col = 0; col < pixel_count; col++) { | 3838 for (int col = 0; col < pixel_count; col++) { |
3844 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { | 3839 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { |
3845 FXARGB_SETRGBORDERDIB(dest_scan, argb); | 3840 FXARGB_SETRGBORDERDIB(dest_scan, argb); |
3846 } | 3841 } |
3847 dest_scan += 4; | 3842 dest_scan += 4; |
3848 } | 3843 } |
3849 return; | 3844 return; |
3850 } | 3845 } |
3851 for (int col = 0; col < pixel_count; col++) { | 3846 for (int col = 0; col < pixel_count; col++) { |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3908 const uint8_t* src_scan, | 3903 const uint8_t* src_scan, |
3909 int mask_alpha, | 3904 int mask_alpha, |
3910 int src_r, | 3905 int src_r, |
3911 int src_g, | 3906 int src_g, |
3912 int src_b, | 3907 int src_b, |
3913 int src_left, | 3908 int src_left, |
3914 int pixel_count, | 3909 int pixel_count, |
3915 int blend_type, | 3910 int blend_type, |
3916 int Bpp, | 3911 int Bpp, |
3917 const uint8_t* clip_scan) { | 3912 const uint8_t* clip_scan) { |
3918 if (blend_type == FXDIB_BLEND_NORMAL && clip_scan == NULL && | 3913 if (blend_type == FXDIB_BLEND_NORMAL && !clip_scan && mask_alpha == 255) { |
3919 mask_alpha == 255) { | |
3920 for (int col = 0; col < pixel_count; col++) { | 3914 for (int col = 0; col < pixel_count; col++) { |
3921 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { | 3915 if (src_scan[(src_left + col) / 8] & (1 << (7 - (src_left + col) % 8))) { |
3922 dest_scan[2] = src_b; | 3916 dest_scan[2] = src_b; |
3923 dest_scan[1] = src_g; | 3917 dest_scan[1] = src_g; |
3924 dest_scan[0] = src_r; | 3918 dest_scan[0] = src_r; |
3925 } | 3919 } |
3926 dest_scan += Bpp; | 3920 dest_scan += Bpp; |
3927 } | 3921 } |
3928 return; | 3922 return; |
3929 } | 3923 } |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4208 int alpha_flag, | 4202 int alpha_flag, |
4209 void* pIccTransform) { | 4203 void* pIccTransform) { |
4210 m_SrcFormat = src_format; | 4204 m_SrcFormat = src_format; |
4211 m_DestFormat = dest_format; | 4205 m_DestFormat = dest_format; |
4212 m_BlendType = blend_type; | 4206 m_BlendType = blend_type; |
4213 m_bRgbByteOrder = bRgbByteOrder; | 4207 m_bRgbByteOrder = bRgbByteOrder; |
4214 ICodec_IccModule* pIccModule = NULL; | 4208 ICodec_IccModule* pIccModule = NULL; |
4215 if (CFX_GEModule::Get()->GetCodecModule()) { | 4209 if (CFX_GEModule::Get()->GetCodecModule()) { |
4216 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); | 4210 pIccModule = CFX_GEModule::Get()->GetCodecModule()->GetIccModule(); |
4217 } | 4211 } |
4218 if (pIccModule == NULL) { | 4212 if (!pIccModule) { |
4219 pIccTransform = NULL; | 4213 pIccTransform = NULL; |
4220 } | 4214 } |
4221 m_pIccTransform = pIccTransform; | 4215 m_pIccTransform = pIccTransform; |
4222 if ((dest_format & 0xff) == 1) { | 4216 if ((dest_format & 0xff) == 1) { |
4223 return FALSE; | 4217 return FALSE; |
4224 } | 4218 } |
4225 if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) { | 4219 if (m_SrcFormat == FXDIB_1bppMask || m_SrcFormat == FXDIB_8bppMask) { |
4226 return _ScanlineCompositor_InitSourceMask( | 4220 return _ScanlineCompositor_InitSourceMask( |
4227 dest_format, alpha_flag, mask_color, m_MaskAlpha, m_MaskRed, | 4221 dest_format, alpha_flag, mask_color, m_MaskAlpha, m_MaskRed, |
4228 m_MaskGreen, m_MaskBlue, m_MaskBlack, pIccModule, pIccTransform); | 4222 m_MaskGreen, m_MaskBlue, m_MaskBlack, pIccModule, pIccTransform); |
4229 } | 4223 } |
4230 if (pIccTransform == NULL && (~src_format & 0x0400) && | 4224 if (!pIccTransform && (~src_format & 0x0400) && (dest_format & 0x0400)) { |
4231 (dest_format & 0x0400)) { | |
4232 return FALSE; | 4225 return FALSE; |
4233 } | 4226 } |
4234 if ((m_SrcFormat & 0xff) <= 8) { | 4227 if ((m_SrcFormat & 0xff) <= 8) { |
4235 if (dest_format == FXDIB_8bppMask) { | 4228 if (dest_format == FXDIB_8bppMask) { |
4236 return TRUE; | 4229 return TRUE; |
4237 } | 4230 } |
4238 _ScanlineCompositor_InitSourcePalette(src_format, dest_format, | 4231 _ScanlineCompositor_InitSourcePalette(src_format, dest_format, |
4239 m_pSrcPalette, pSrcPalette, | 4232 m_pSrcPalette, pSrcPalette, |
4240 pIccModule, pIccTransform); | 4233 pIccModule, pIccTransform); |
4241 m_Transparency = | 4234 m_Transparency = |
(...skipping 413 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4655 int dest_top, | 4648 int dest_top, |
4656 int width, | 4649 int width, |
4657 int height, | 4650 int height, |
4658 const CFX_DIBSource* pSrcBitmap, | 4651 const CFX_DIBSource* pSrcBitmap, |
4659 int src_left, | 4652 int src_left, |
4660 int src_top, | 4653 int src_top, |
4661 int blend_type, | 4654 int blend_type, |
4662 const CFX_ClipRgn* pClipRgn, | 4655 const CFX_ClipRgn* pClipRgn, |
4663 FX_BOOL bRgbByteOrder, | 4656 FX_BOOL bRgbByteOrder, |
4664 void* pIccTransform) { | 4657 void* pIccTransform) { |
4665 if (m_pBuffer == NULL) { | 4658 if (!m_pBuffer) { |
4666 return FALSE; | 4659 return FALSE; |
4667 } | 4660 } |
4668 ASSERT(!pSrcBitmap->IsAlphaMask()); | 4661 ASSERT(!pSrcBitmap->IsAlphaMask()); |
4669 ASSERT(m_bpp >= 8); | 4662 ASSERT(m_bpp >= 8); |
4670 if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) { | 4663 if (pSrcBitmap->IsAlphaMask() || m_bpp < 8) { |
4671 return FALSE; | 4664 return FALSE; |
4672 } | 4665 } |
4673 GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), | 4666 GetOverlapRect(dest_left, dest_top, width, height, pSrcBitmap->GetWidth(), |
4674 pSrcBitmap->GetHeight(), src_left, src_top, pClipRgn); | 4667 pSrcBitmap->GetHeight(), src_left, src_top, pClipRgn); |
4675 if (width == 0 || height == 0) { | 4668 if (width == 0 || height == 0) { |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4728 int height, | 4721 int height, |
4729 const CFX_DIBSource* pMask, | 4722 const CFX_DIBSource* pMask, |
4730 FX_DWORD color, | 4723 FX_DWORD color, |
4731 int src_left, | 4724 int src_left, |
4732 int src_top, | 4725 int src_top, |
4733 int blend_type, | 4726 int blend_type, |
4734 const CFX_ClipRgn* pClipRgn, | 4727 const CFX_ClipRgn* pClipRgn, |
4735 FX_BOOL bRgbByteOrder, | 4728 FX_BOOL bRgbByteOrder, |
4736 int alpha_flag, | 4729 int alpha_flag, |
4737 void* pIccTransform) { | 4730 void* pIccTransform) { |
4738 if (m_pBuffer == NULL) { | 4731 if (!m_pBuffer) { |
4739 return FALSE; | 4732 return FALSE; |
4740 } | 4733 } |
4741 ASSERT(pMask->IsAlphaMask()); | 4734 ASSERT(pMask->IsAlphaMask()); |
4742 ASSERT(m_bpp >= 8); | 4735 ASSERT(m_bpp >= 8); |
4743 if (!pMask->IsAlphaMask() || m_bpp < 8) { | 4736 if (!pMask->IsAlphaMask() || m_bpp < 8) { |
4744 return FALSE; | 4737 return FALSE; |
4745 } | 4738 } |
4746 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), | 4739 GetOverlapRect(dest_left, dest_top, width, height, pMask->GetWidth(), |
4747 pMask->GetHeight(), src_left, src_top, pClipRgn); | 4740 pMask->GetHeight(), src_left, src_top, pClipRgn); |
4748 if (width == 0 || height == 0) { | 4741 if (width == 0 || height == 0) { |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4792 } | 4785 } |
4793 return TRUE; | 4786 return TRUE; |
4794 } | 4787 } |
4795 FX_BOOL CFX_DIBitmap::CompositeRect(int left, | 4788 FX_BOOL CFX_DIBitmap::CompositeRect(int left, |
4796 int top, | 4789 int top, |
4797 int width, | 4790 int width, |
4798 int height, | 4791 int height, |
4799 FX_DWORD color, | 4792 FX_DWORD color, |
4800 int alpha_flag, | 4793 int alpha_flag, |
4801 void* pIccTransform) { | 4794 void* pIccTransform) { |
4802 if (m_pBuffer == NULL) { | 4795 if (!m_pBuffer) { |
4803 return FALSE; | 4796 return FALSE; |
4804 } | 4797 } |
4805 int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color); | 4798 int src_alpha = (alpha_flag >> 8) ? (alpha_flag & 0xff) : FXARGB_A(color); |
4806 if (src_alpha == 0) { | 4799 if (src_alpha == 0) { |
4807 return TRUE; | 4800 return TRUE; |
4808 } | 4801 } |
4809 FX_RECT rect(left, top, left + width, top + height); | 4802 FX_RECT rect(left, top, left + width, top + height); |
4810 rect.Intersect(0, 0, m_Width, m_Height); | 4803 rect.Intersect(0, 0, m_Width, m_Height); |
4811 if (rect.IsEmpty()) { | 4804 if (rect.IsEmpty()) { |
4812 return TRUE; | 4805 return TRUE; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4852 } | 4845 } |
4853 } | 4846 } |
4854 return TRUE; | 4847 return TRUE; |
4855 } | 4848 } |
4856 if (m_bpp == 1) { | 4849 if (m_bpp == 1) { |
4857 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); | 4850 ASSERT(!IsCmykImage() && (uint8_t)(alpha_flag >> 8) == 0); |
4858 int left_shift = rect.left % 8; | 4851 int left_shift = rect.left % 8; |
4859 int right_shift = rect.right % 8; | 4852 int right_shift = rect.right % 8; |
4860 int width = rect.right / 8 - rect.left / 8; | 4853 int width = rect.right / 8 - rect.left / 8; |
4861 int index = 0; | 4854 int index = 0; |
4862 if (m_pPalette == NULL) { | 4855 if (m_pPalette) { |
4863 index = ((uint8_t)color == 0xff) ? 1 : 0; | 4856 for (int i = 0; i < 2; i++) { |
4864 } else { | |
4865 for (int i = 0; i < 2; i++) | |
4866 if (m_pPalette[i] == color) { | 4857 if (m_pPalette[i] == color) { |
4867 index = i; | 4858 index = i; |
4868 } | 4859 } |
| 4860 } |
| 4861 } else { |
| 4862 index = ((uint8_t)color == 0xff) ? 1 : 0; |
4869 } | 4863 } |
4870 for (int row = rect.top; row < rect.bottom; row++) { | 4864 for (int row = rect.top; row < rect.bottom; row++) { |
4871 uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8; | 4865 uint8_t* dest_scan_top = (uint8_t*)GetScanline(row) + rect.left / 8; |
4872 uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8; | 4866 uint8_t* dest_scan_top_r = (uint8_t*)GetScanline(row) + rect.right / 8; |
4873 uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift)); | 4867 uint8_t left_flag = *dest_scan_top & (255 << (8 - left_shift)); |
4874 uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift); | 4868 uint8_t right_flag = *dest_scan_top_r & (255 >> right_shift); |
4875 if (width) { | 4869 if (width) { |
4876 FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, width - 1); | 4870 FXSYS_memset(dest_scan_top + 1, index ? 255 : 0, width - 1); |
4877 if (!index) { | 4871 if (!index) { |
4878 *dest_scan_top &= left_flag; | 4872 *dest_scan_top &= left_flag; |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5190 } | 5184 } |
5191 src_alpha_scan = m_pScanlineAlphaV; | 5185 src_alpha_scan = m_pScanlineAlphaV; |
5192 dest_alpha_scan = dest_alpha_buf; | 5186 dest_alpha_scan = dest_alpha_buf; |
5193 if (dest_alpha_scan) { | 5187 if (dest_alpha_scan) { |
5194 for (i = 0; i < m_DestHeight; i++) { | 5188 for (i = 0; i < m_DestHeight; i++) { |
5195 *dest_alpha_scan = *src_alpha_scan++; | 5189 *dest_alpha_scan = *src_alpha_scan++; |
5196 dest_alpha_scan += y_alpha_step; | 5190 dest_alpha_scan += y_alpha_step; |
5197 } | 5191 } |
5198 } | 5192 } |
5199 } | 5193 } |
OLD | NEW |