C# 반대 색상 구하는 방법

안녕하세요. :smile:

혹시 C#에서 해당 색의 반전 색상을 구하는 기능이나 라이브러리가 있을까요?

당연히 있겠지만 함께 공유도 하고, 또 사용하신 분이 계시면 경험도 듣고자 질문드립니다!

string hexColor = GetInverte("#FFFFFF");
// hexColor: #000000 희망~

읽어주셔서 감사합니다. :smile:

3개의 좋아요

Color (fromHexa등의 메소드가 있을것 같습니다)로 바꾼 후 ARGB에서 RGB를 각각 255 - x 한 후 다시 string으로 (toHexa) 하면 될 것 같은데요? 메소드가 없어도 적절하게 구현도 가능할 것 같습니다.

3개의 좋아요

@dimohy 답변 감사드립니다. :smile:

알려주신대로 구현해서 해결했습니다!
색도 잘 맞게 나오는 것 같습니다.

private void DragCapture(byte[] rgba)
{            
    lock (lockObject)
    {
        var r = rgba[0].ToString("X2");
        var g = rgba[1].ToString("X2");
        var b = rgba[2].ToString("X2");
        var a = rgba[3].ToString("X2");

        var xr = (255 - rgba[0]).ToString("X2");
        var xg = (255 - rgba[1]).ToString("X2");
        var xb = (255 - rgba[2]).ToString("X2");

        CurrentColor = $"#{a}{r}{g}{b}";
        ReverseColor = $"#{a}{xr}{xg}{xb}";
    }
}
2개의 좋아요
            static string GetReverseColor(string colorString)
            {
                var orignalColor = (Color)System.Windows.Media.ColorConverter.ConvertFromString(colorString);
                var invertedColor = Color.FromArgb(orignalColor.A,
                    (byte)(byte.MaxValue - orignalColor.R),
                    (byte)(byte.MaxValue - orignalColor.G),
                    (byte)(byte.MaxValue - orignalColor.B));
                return invertedColor.ToString();
            }

            var reverseColor = GetReverseColor("Orange");

ColorConverter를 이용하시면 “#aarrggbb” 형태 말고도 “Orange” 이런 값도 잘 반전색을 구할 수 있을것 같습니다.

1개의 좋아요

@dimohy 아하 이것도 응용할 아이디어가 떠오르네요. :joy:

그리고 색상 반전 말고도 Black & White 중에
폰트 색이 어느 색에 더 잘어울리는지 구하는 코드도 적용했습니다.

if ((rgba[0] * 0.299 + rgba[1] * 0.587 + rgba[2] * 0.114) > 186)
{
    ReverseColor = "#FF000000";
}
else
{
    ReverseColor = "#FFFFFFFF";
}

186 값을 취향에 따라 미세하기 조정하면 됩니다!

3개의 좋아요