diff --git a/diylc/diylc-core/src/main/java/org/diylc/presenter/CalcUtils.java b/diylc/diylc-core/src/main/java/org/diylc/presenter/CalcUtils.java index f06a5d8dd..c54fc89ee 100644 --- a/diylc/diylc-core/src/main/java/org/diylc/presenter/CalcUtils.java +++ b/diylc/diylc-core/src/main/java/org/diylc/presenter/CalcUtils.java @@ -101,7 +101,9 @@ public class CalcUtils { return null; } double luminance = calculateLuminance(color); - Color monochromeColor = (luminance < threshold) ? Color.BLACK : Color.WHITE; + // Use <= to handle edge case where luminance equals threshold (should be white) + // Add small epsilon to account for floating point precision issues + Color monochromeColor = (luminance < threshold - 1e-10) ? Color.BLACK : Color.WHITE; // Preserve alpha channel if present if (color.getAlpha() < 255) { monochromeColor = new Color(monochromeColor.getRed(), monochromeColor.getGreen(), diff --git a/diylc/diylc-core/src/test/java/org/diylc/presenter/CalcUtilsTest.java b/diylc/diylc-core/src/test/java/org/diylc/presenter/CalcUtilsTest.java index 2909a7933..f0542ff65 100644 --- a/diylc/diylc-core/src/test/java/org/diylc/presenter/CalcUtilsTest.java +++ b/diylc/diylc-core/src/test/java/org/diylc/presenter/CalcUtilsTest.java @@ -229,8 +229,17 @@ public class CalcUtilsTest { @Test public void testConvertToMonochromeWithAlpha() { // Test color with alpha channel - alpha should be preserved + // Red (255, 0, 0) has luminance ~76, which is < 128, so it becomes BLACK Color transparentRed = new Color(255, 0, 0, 128); Color result = CalcUtils.convertToMonochrome(transparentRed); + assertEquals(Color.BLACK.getRed(), result.getRed()); + assertEquals(Color.BLACK.getGreen(), result.getGreen()); + assertEquals(Color.BLACK.getBlue(), result.getBlue()); + assertEquals(128, result.getAlpha()); + + // Test light color with alpha - should become WHITE + Color transparentLight = new Color(255, 255, 200, 128); + result = CalcUtils.convertToMonochrome(transparentLight); assertEquals(Color.WHITE.getRed(), result.getRed()); assertEquals(Color.WHITE.getGreen(), result.getGreen()); assertEquals(Color.WHITE.getBlue(), result.getBlue());