diff --git a/color-module/src/reversing.rs b/color-module/src/reversing.rs index c9e364f..90137c6 100644 --- a/color-module/src/reversing.rs +++ b/color-module/src/reversing.rs @@ -13,9 +13,21 @@ pub struct MixReversing { impl MixReversing { pub fn from_tint_rgb(basic_color: Rgb, mixed_result: Rgb) -> Self { - let r_factor = (mixed_result.red - basic_color.red) / (1.0 - basic_color.red); - let g_factor = (mixed_result.green - basic_color.green) / (1.0 - basic_color.green); - let b_factor = (mixed_result.blue - basic_color.blue) / (1.0 - basic_color.blue); + let r_factor = if basic_color.red == 1.0 { + 0.0 + } else { + (mixed_result.red - basic_color.red) / (1.0 - basic_color.red) + }; + let g_factor = if basic_color.green == 1.0 { + 0.0 + } else { + (mixed_result.green - basic_color.green) / (1.0 - basic_color.green) + }; + let b_factor = if basic_color.blue == 1.0 { + 0.0 + } else { + (mixed_result.blue - basic_color.blue) / (1.0 - basic_color.blue) + }; let average = (r_factor + g_factor + b_factor) / 3.0; MixReversing { @@ -27,9 +39,21 @@ impl MixReversing { } pub fn from_shade_rgb(basic_color: Rgb, mixed_result: Rgb) -> Self { - let r_factor = (basic_color.red - mixed_result.red) / (0.0 - basic_color.red); - let g_factor = (basic_color.green - mixed_result.green) / (0.0 - basic_color.green); - let b_factor = (basic_color.blue - mixed_result.blue) / (0.0 - basic_color.blue); + let r_factor = if basic_color.red == 0.0 { + 0.0 + } else { + (basic_color.red - mixed_result.red) / (0.0 - basic_color.red) + }; + let g_factor = if basic_color.green == 0.0 { + 0.0 + } else { + (basic_color.green - mixed_result.green) / (0.0 - basic_color.green) + }; + let b_factor = if basic_color.blue == 0.0 { + 0.0 + } else { + (basic_color.blue - mixed_result.blue) / (0.0 - basic_color.blue) + }; let average = (r_factor + g_factor + b_factor) / 3.0; MixReversing {