@@ -968,6 +968,90 @@ void gdImageAABlend (gdImagePtr im)
968
968
969
969
static void _gdImageFilledHRectangle (gdImagePtr im , int x1 , int y1 , int x2 , int y2 , int color );
970
970
971
+ gdImagePtr gdImageClone (gdImagePtr src ) {
972
+ gdImagePtr dst ;
973
+ register int i , x ;
974
+
975
+ if (src -> trueColor ) {
976
+ dst = gdImageCreateTrueColor (src -> sx , src -> sy );
977
+ } else {
978
+ dst = gdImageCreate (src -> sx , src -> sy );
979
+ }
980
+
981
+ if (dst == NULL ) {
982
+ return NULL ;
983
+ }
984
+
985
+ if (src -> trueColor == 0 ) {
986
+ dst -> colorsTotal = src -> colorsTotal ;
987
+ for (i = 0 ; i < gdMaxColors ; i ++ ) {
988
+ dst -> red [i ] = src -> red [i ];
989
+ dst -> green [i ] = src -> green [i ];
990
+ dst -> blue [i ] = src -> blue [i ];
991
+ dst -> alpha [i ] = src -> alpha [i ];
992
+ dst -> open [i ] = src -> open [i ];
993
+ }
994
+ for (i = 0 ; i < src -> sy ; i ++ ) {
995
+ for (x = 0 ; x < src -> sx ; x ++ ) {
996
+ dst -> pixels [i ][x ] = src -> pixels [i ][x ];
997
+ }
998
+ }
999
+ } else {
1000
+ for (i = 0 ; i < src -> sy ; i ++ ) {
1001
+ for (x = 0 ; x < src -> sx ; x ++ ) {
1002
+ dst -> tpixels [i ][x ] = src -> tpixels [i ][x ];
1003
+ }
1004
+ }
1005
+ }
1006
+
1007
+ dst -> interlace = src -> interlace ;
1008
+
1009
+ dst -> alphaBlendingFlag = src -> alphaBlendingFlag ;
1010
+ dst -> saveAlphaFlag = src -> saveAlphaFlag ;
1011
+ dst -> AA = src -> AA ;
1012
+ dst -> AA_color = src -> AA_color ;
1013
+ dst -> AA_dont_blend = src -> AA_dont_blend ;
1014
+
1015
+ dst -> cx1 = src -> cx1 ;
1016
+ dst -> cy1 = src -> cy1 ;
1017
+ dst -> cx2 = src -> cx2 ;
1018
+ dst -> cy2 = src -> cy2 ;
1019
+
1020
+ dst -> res_x = src -> res_x ;
1021
+ dst -> res_y = src -> res_y ;
1022
+
1023
+ dst -> interpolation_id = src -> interpolation_id ;
1024
+ dst -> interpolation = src -> interpolation ;
1025
+
1026
+ if (src -> brush ) {
1027
+ dst -> brush = gdImageClone (src -> brush );
1028
+ }
1029
+
1030
+ if (src -> tile ) {
1031
+ dst -> tile = gdImageClone (src -> tile );
1032
+ }
1033
+
1034
+ if (src -> style ) {
1035
+ gdImageSetStyle (dst , src -> style , src -> styleLength );
1036
+ dst -> stylePos = src -> stylePos ;
1037
+ }
1038
+
1039
+ for (i = 0 ; i < gdMaxColors ; i ++ ) {
1040
+ dst -> brushColorMap [i ] = src -> brushColorMap [i ];
1041
+ dst -> tileColorMap [i ] = src -> tileColorMap [i ];
1042
+ }
1043
+
1044
+ if (src -> polyAllocated > 0 && overflow2 (sizeof (int ), src -> polyAllocated ) == 0 ) {
1045
+ dst -> polyInts = gdMalloc (sizeof (int ) * src -> polyAllocated );
1046
+ dst -> polyAllocated = src -> polyAllocated ;
1047
+ for (i = 0 ; i < src -> polyAllocated ; i ++ ) {
1048
+ dst -> polyInts [i ] = src -> polyInts [i ];
1049
+ }
1050
+ }
1051
+
1052
+ return dst ;
1053
+ }
1054
+
971
1055
static void gdImageHLine (gdImagePtr im , int y , int x1 , int x2 , int col )
972
1056
{
973
1057
if (im -> thick > 1 ) {
0 commit comments