fix(jump-hop): clean magenta cutout fringes
This commit is contained in:
@@ -206,6 +206,78 @@ fn generated_asset_sheet_magenta_edge_matte_does_not_remove_white_subject() {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_asset_sheet_magenta_alpha_defringes_pink_halo() {
|
||||
let mut sheet = RgbaImage::from_pixel(24, 24, Rgba([255, 0, 255, 255]));
|
||||
for y in 7..17 {
|
||||
for x in 7..17 {
|
||||
sheet.put_pixel(x, y, Rgba([198, 170, 120, 255]));
|
||||
}
|
||||
}
|
||||
for y in 6..18 {
|
||||
sheet.put_pixel(6, y, Rgba([226, 26, 218, 220]));
|
||||
sheet.put_pixel(17, y, Rgba([226, 26, 218, 220]));
|
||||
}
|
||||
for x in 6..18 {
|
||||
sheet.put_pixel(x, 6, Rgba([226, 26, 218, 220]));
|
||||
sheet.put_pixel(x, 17, Rgba([226, 26, 218, 220]));
|
||||
}
|
||||
|
||||
let cleaned = apply_generated_asset_sheet_alpha_with_options(
|
||||
DynamicImage::ImageRgba8(sheet),
|
||||
GeneratedAssetSheetAlphaOptions::jump_hop_magenta_screen(),
|
||||
)
|
||||
.to_rgba8();
|
||||
let edge = cleaned.get_pixel(6, 12).0;
|
||||
|
||||
assert_eq!(cleaned.get_pixel(0, 0).0[3], 0);
|
||||
assert_eq!(cleaned.get_pixel(12, 12).0, [198, 170, 120, 255]);
|
||||
if edge[3] > 0 {
|
||||
assert!(
|
||||
edge[0].saturating_sub(edge[1]) <= 76,
|
||||
"红色 key 通道残留过强:{edge:?}"
|
||||
);
|
||||
assert!(
|
||||
edge[2].saturating_sub(edge[1]) <= 76,
|
||||
"蓝色 key 通道残留过强:{edge:?}"
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_asset_sheet_magenta_edge_matte_defringes_bottom_shadow() {
|
||||
let mut sheet = RgbaImage::from_pixel(32, 32, Rgba([0, 0, 0, 0]));
|
||||
for y in 8..18 {
|
||||
for x in 10..22 {
|
||||
sheet.put_pixel(x, y, Rgba([202, 176, 126, 255]));
|
||||
}
|
||||
}
|
||||
for y in 18..22 {
|
||||
for x in 9..23 {
|
||||
sheet.put_pixel(x, y, Rgba([224, 30, 220, 186]));
|
||||
}
|
||||
}
|
||||
|
||||
let cleaned = crop_generated_asset_sheet_view_edge_matte_with_options(
|
||||
DynamicImage::ImageRgba8(sheet),
|
||||
GeneratedAssetSheetAlphaOptions::jump_hop_magenta_screen(),
|
||||
)
|
||||
.to_rgba8();
|
||||
|
||||
assert!(
|
||||
cleaned
|
||||
.pixels()
|
||||
.any(|pixel| pixel.0 == [202, 176, 126, 255])
|
||||
);
|
||||
assert!(
|
||||
!cleaned.pixels().any(|pixel| {
|
||||
let [red, green, blue, alpha] = pixel.0;
|
||||
alpha > 0 && red > 200 && blue > 200 && green < 96
|
||||
}),
|
||||
"底部洋红残影应被删除或去彩边"
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn generated_asset_sheet_view_edge_matte_trims_transparent_border() {
|
||||
let mut sheet = RgbaImage::from_pixel(20, 20, Rgba([0, 0, 0, 0]));
|
||||
|
||||
Reference in New Issue
Block a user