@@ -222,9 +222,9 @@ def render_sprite_mesh(
222222
223223def copy_triangle (
224224 src_img : Image .Image ,
225- src_tri : Tuple [float , float ],
225+ src_tri : Tuple [Tuple [ float , float ], Tuple [ float , float ], Tuple [ float , float ] ],
226226 dst_img : Image .Image ,
227- dst_tri : Tuple [float , float ],
227+ dst_tri : Tuple [Tuple [ float , float ], Tuple [ float , float ], Tuple [ float , float ] ],
228228) -> None :
229229 src_off = (
230230 (src_tri [1 ][0 ] - src_tri [0 ][0 ], src_tri [1 ][1 ] - src_tri [0 ][1 ]),
@@ -240,7 +240,15 @@ def copy_triangle(
240240 # no transform necessary, just copy the triangle
241241
242242 # make rectangle that contains the triangle
243- upper_left , _ , lower_right = sorted (src_tri )
243+ # upper_left, _, lower_right = sorted(src_tri)
244+ upper_left = (
245+ min (src_tri [0 ][0 ], src_tri [1 ][0 ], src_tri [2 ][0 ]),
246+ min (src_tri [0 ][1 ], src_tri [1 ][1 ], src_tri [2 ][1 ]),
247+ )
248+ lower_right = (
249+ max (src_tri [0 ][0 ], src_tri [1 ][0 ], src_tri [2 ][0 ]),
250+ max (src_tri [0 ][1 ], src_tri [1 ][1 ], src_tri [2 ][1 ]),
251+ )
244252 src_part = src_img .crop ((* upper_left , * lower_right ))
245253
246254 # create mask for triangle
@@ -250,7 +258,11 @@ def copy_triangle(
250258 maskdraw .polygon (mask_box , fill = 255 )
251259
252260 # paste triangle into destination image
253- dst_img .paste (src_part , min (dst_tri ), mask = mask )
261+ dst = (
262+ int (min (dst_tri [0 ][0 ], dst_tri [1 ][0 ], dst_tri [2 ][0 ])),
263+ int (min (dst_tri [0 ][1 ], dst_tri [1 ][1 ], dst_tri [2 ][1 ])),
264+ )
265+ dst_img .paste (src_part , dst , mask = mask )
254266 else :
255267 # transform is necessary, use affine transformation
256268 # https://stackoverflow.com/a/6959111
0 commit comments