source_x = source_y = 0
         if x < 0:
-            source_x = 0 - x
+            source_x = round(0 - x)
             x = 0
         if y < 0:
-            source_y = 0 - y
+            source_y = round(0 - y)
             y = 0
 
-        buffer.alpha_composite(
-            image, (round(x), round(y)), source=(round(source_x), round(source_y))
-        )
+        x = round(x)
+        y = round(y)
+
+        if (
+            x <= buffer.width
+            and y <= buffer.height
+            and source_x <= image.width
+            and source_y <= image.height
+        ):
+            buffer.alpha_composite(image, (x, y), source=(source_x, source_y))
 
     # pylint: enable=too-many-locals,too-many-branches