안녕하세요.
혹시 C#에서 해당 색의 반전 색상을 구하는 기능이나 라이브러리가 있을까요?
당연히 있겠지만 함께 공유도 하고, 또 사용하신 분이 계시면 경험도 듣고자 질문드립니다!
string hexColor = GetInverte("#FFFFFF");
// hexColor: #000000 희망~
읽어주셔서 감사합니다.
안녕하세요.
혹시 C#에서 해당 색의 반전 색상을 구하는 기능이나 라이브러리가 있을까요?
당연히 있겠지만 함께 공유도 하고, 또 사용하신 분이 계시면 경험도 듣고자 질문드립니다!
string hexColor = GetInverte("#FFFFFF");
// hexColor: #000000 희망~
읽어주셔서 감사합니다.
Color (fromHexa등의 메소드가 있을것 같습니다)로 바꾼 후 ARGB에서 RGB를 각각 255 - x 한 후 다시 string으로 (toHexa) 하면 될 것 같은데요? 메소드가 없어도 적절하게 구현도 가능할 것 같습니다.
@dimohy 답변 감사드립니다.
알려주신대로 구현해서 해결했습니다!
색도 잘 맞게 나오는 것 같습니다.
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}";
}
}
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” 이런 값도 잘 반전색을 구할 수 있을것 같습니다.
@dimohy 아하 이것도 응용할 아이디어가 떠오르네요.
그리고 색상 반전 말고도 Black & White 중에
폰트 색이 어느 색에 더 잘어울리는지 구하는 코드도 적용했습니다.
if ((rgba[0] * 0.299 + rgba[1] * 0.587 + rgba[2] * 0.114) > 186)
{
ReverseColor = "#FF000000";
}
else
{
ReverseColor = "#FFFFFFFF";
}
186 값을 취향에 따라 미세하기 조정하면 됩니다!