diff --git a/src/image_modifications.cpp b/src/image_modifications.cpp index 47a308bc9d2a..99a3418f2a99 100644 --- a/src/image_modifications.cpp +++ b/src/image_modifications.cpp @@ -216,7 +216,17 @@ surface crop_modification::operator()(const surface& src) const ERR_DP << "start Y coordinate of CROP modification is negative - truncating to zero\n"; area.y = 0; } - return cut_surface(src, area); + + /* + * Unlike other image functions cut_surface does not convert the input + * surface to a neutral surface, nor does it convert its return surface + * to an optimised surface. + * + * Since it seems to work for most cases, rather change this caller instead + * of the function signature. (The issue was discovered in bug #20876). + */ + return create_optimized_surface( + cut_surface(make_neutral_surface(src), area)); } const SDL_Rect& crop_modification::get_slice() const