From c0f7be2ebc6e47f283aa2230828b368890093c82 Mon Sep 17 00:00:00 2001 From: Amrit kumar Mahto Date: Mon, 13 Apr 2026 11:23:41 +0530 Subject: [PATCH 1/2] Improve RGB input handling in color conversion (support normalized and legacy ranges) --- src/rust/src/hardsubx/imgops.rs | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/src/rust/src/hardsubx/imgops.rs b/src/rust/src/hardsubx/imgops.rs index 114b2e2b9..7911fc04d 100644 --- a/src/rust/src/hardsubx/imgops.rs +++ b/src/rust/src/hardsubx/imgops.rs @@ -1,6 +1,7 @@ use palette::{FromColor, Hsv, Lab, LinSrgb}; /// Convert RGB values to HSV color space. +/// Accepts RGB in [0.0, 1.0]. If values are > 1.0, they are assumed to be 0–255 and normalized. /// /// # Safety /// @@ -8,7 +9,14 @@ use palette::{FromColor, Hsv, Lab, LinSrgb}; /// - The references must remain valid for the duration of the function call #[no_mangle] pub extern "C" fn rgb_to_hsv(R: f32, G: f32, B: f32, H: &mut f32, S: &mut f32, V: &mut f32) { - let rgb = LinSrgb::new(R, G, B); + let max_val = R.max(G).max(B); + let (norm_r, norm_g, norm_b) = if max_val > 1.0 { + (R / 255.0, G / 255.0, B / 255.0) + } else { + (R, G, B) + }; + + let rgb = LinSrgb::new(norm_r, norm_g, norm_b); let hsv_rep = Hsv::from_color(rgb); @@ -18,6 +26,7 @@ pub extern "C" fn rgb_to_hsv(R: f32, G: f32, B: f32, H: &mut f32, S: &mut f32, V } /// Convert RGB values to Lab color space. +/// Accepts RGB in [0.0, 1.0]. If values are > 1.0, they are assumed to be 0–255 and normalized. /// /// # Safety /// @@ -25,8 +34,14 @@ pub extern "C" fn rgb_to_hsv(R: f32, G: f32, B: f32, H: &mut f32, S: &mut f32, V /// - The references must remain valid for the duration of the function call #[no_mangle] pub extern "C" fn rgb_to_lab(R: f32, G: f32, B: f32, L: &mut f32, a: &mut f32, b: &mut f32) { - // Normalize input RGB from 0-255 to 0.0-1.0 - let rgb = LinSrgb::new(R / 255.0, G / 255.0, B / 255.0); + let max_val = R.max(G).max(B); + let (norm_r, norm_g, norm_b) = if max_val > 1.0 { + (R / 255.0, G / 255.0, B / 255.0) + } else { + (R, G, B) + }; + + let rgb = LinSrgb::new(norm_r, norm_g, norm_b); // Convert from sRGB to Lab (D65 white point is default) let lab_rep = Lab::from_color(rgb); From d5d59be3d8b046f8f1bde1b960e468021ae545ca Mon Sep 17 00:00:00 2001 From: Amrit kumar Mahto Date: Mon, 13 Apr 2026 11:50:34 +0530 Subject: [PATCH 2/2] formate --- src/rust/src/hardsubx/imgops.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rust/src/hardsubx/imgops.rs b/src/rust/src/hardsubx/imgops.rs index 7911fc04d..ee2f0a6ad 100644 --- a/src/rust/src/hardsubx/imgops.rs +++ b/src/rust/src/hardsubx/imgops.rs @@ -15,7 +15,7 @@ pub extern "C" fn rgb_to_hsv(R: f32, G: f32, B: f32, H: &mut f32, S: &mut f32, V } else { (R, G, B) }; - + let rgb = LinSrgb::new(norm_r, norm_g, norm_b); let hsv_rep = Hsv::from_color(rgb); @@ -40,7 +40,7 @@ pub extern "C" fn rgb_to_lab(R: f32, G: f32, B: f32, L: &mut f32, a: &mut f32, b } else { (R, G, B) }; - + let rgb = LinSrgb::new(norm_r, norm_g, norm_b); // Convert from sRGB to Lab (D65 white point is default)