From dd1273dad4d12a616c4c0418fb94b80ab3b6ccf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E6=B6=9B?= Date: Sun, 20 Jul 2025 08:01:47 +0800 Subject: [PATCH] =?UTF-8?q?refactor(color=5Fset):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E5=8C=B9=E9=85=8D=E7=AE=97=E6=B3=95=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E5=85=83=E7=BB=84=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将存储颜色匹配结果的元组从(lightness, min_wacg_abs)扩展为(lightness, avg_wacg_abs, sum_wacg_abs) 修改匹配逻辑以同时考虑平均和总和WACG值 --- color-module/src/schemes/q_style_2/color_set.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/color-module/src/schemes/q_style_2/color_set.rs b/color-module/src/schemes/q_style_2/color_set.rs index 8589e9c..b3e93a0 100644 --- a/color-module/src/schemes/q_style_2/color_set.rs +++ b/color-module/src/schemes/q_style_2/color_set.rs @@ -49,9 +49,9 @@ fn search_for_common_wacg_color( neutral_swatch: &NeutralSwatch, minium_ratio: f32, ) -> Oklch { - // store in: (lightness, min_wacg_abs) - let mut minium_match: (f32, f32) = (0.0, f32::INFINITY); - let mut closest_match: (f32, f32) = (f32::INFINITY, f32::INFINITY); + // store in: (lightness, avg_wacg_abs, sum_wacg_abs) + let mut minium_match: (f32, f32, f32) = (0.0, f32::INFINITY, 0.0); + let mut closest_match: (f32, f32, f32) = (f32::INFINITY, f32::INFINITY, 0.0); for scan_lightness in (0..=100).map(|x| x as f32 / 100.0) { let new_target = neutral_swatch.get(scan_lightness); let new_target_luma = map_oklch_to_luma(&new_target); @@ -60,11 +60,14 @@ fn search_for_common_wacg_color( .map(|ref_color| match_wacg(&ref_color, &new_target_luma) - minium_ratio) .sum(); let reference_wacgs = reference_wacgs_sum / reference_colors.len() as f32; - if reference_wacgs.abs() < closest_match.1.abs() { - closest_match = (scan_lightness, reference_wacgs); + if reference_wacgs.abs() < closest_match.1.abs() && reference_wacgs_sum > closest_match.2 { + closest_match = (scan_lightness, reference_wacgs, reference_wacgs_sum); } - if reference_wacgs >= 0.0 && reference_wacgs.abs() < minium_match.1.abs() { - minium_match = (scan_lightness, reference_wacgs); + if reference_wacgs >= 0.0 + && reference_wacgs.abs() < minium_match.1.abs() + && reference_wacgs_sum > minium_match.2 + { + minium_match = (scan_lightness, reference_wacgs, reference_wacgs_sum); } } if minium_match.1 != f32::INFINITY {