refactor(color_set): 优化颜色匹配算法中的元组结构
将存储颜色匹配结果的元组从(lightness, min_wacg_abs)扩展为(lightness, avg_wacg_abs, sum_wacg_abs) 修改匹配逻辑以同时考虑平均和总和WACG值
This commit is contained in:
		@@ -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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user