Fixing wrong blending rect methods

Using Color.blend function instead of custom code

Fixed clang_format

Removed unnecessary help

(cherry picked from commit b211a86ebe)
This commit is contained in:
azagaya 2020-04-01 14:05:33 -03:00 committed by Rémi Verschelde
parent c63c902c74
commit a6d8773d0b

View file

@ -2223,14 +2223,13 @@ void Image::blend_rect(const Ref<Image> &p_src, const Rect2 &p_src_rect, const P
int dst_y = dest_rect.position.y + i; int dst_y = dest_rect.position.y + i;
Color sc = img->get_pixel(src_x, src_y); Color sc = img->get_pixel(src_x, src_y);
if (sc.a != 0) {
Color dc = get_pixel(dst_x, dst_y); Color dc = get_pixel(dst_x, dst_y);
dc.r = (double)(sc.a * sc.r + dc.a * (1.0 - sc.a) * dc.r); dc = dc.blend(sc);
dc.g = (double)(sc.a * sc.g + dc.a * (1.0 - sc.a) * dc.g);
dc.b = (double)(sc.a * sc.b + dc.a * (1.0 - sc.a) * dc.b);
dc.a = (double)(sc.a + dc.a * (1.0 - sc.a));
set_pixel(dst_x, dst_y, dc); set_pixel(dst_x, dst_y, dc);
} }
} }
}
img->unlock(); img->unlock();
unlock(); unlock();
@ -2285,15 +2284,14 @@ void Image::blend_rect_mask(const Ref<Image> &p_src, const Ref<Image> &p_mask, c
int dst_y = dest_rect.position.y + i; int dst_y = dest_rect.position.y + i;
Color sc = img->get_pixel(src_x, src_y); Color sc = img->get_pixel(src_x, src_y);
if (sc.a != 0) {
Color dc = get_pixel(dst_x, dst_y); Color dc = get_pixel(dst_x, dst_y);
dc.r = (double)(sc.a * sc.r + dc.a * (1.0 - sc.a) * dc.r); dc = dc.blend(sc);
dc.g = (double)(sc.a * sc.g + dc.a * (1.0 - sc.a) * dc.g);
dc.b = (double)(sc.a * sc.b + dc.a * (1.0 - sc.a) * dc.b);
dc.a = (double)(sc.a + dc.a * (1.0 - sc.a));
set_pixel(dst_x, dst_y, dc); set_pixel(dst_x, dst_y, dc);
} }
} }
} }
}
msk->unlock(); msk->unlock();
img->unlock(); img->unlock();