代码拉取完成,页面将自动刷新
同步操作将从 奎宇工作室/DotNetCodes 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
using System;
using System.Drawing;
/*
* 源码己托管: http://gitee.com/dlgcy/dotnetcodes
* 版本:2023年5月13日
*/
namespace DotNet.Utilities
{
/// <summary>
/// 绘图颜色帮助类;
/// </summary>
public class DrawingColorHelper
{
#region 颜色转换
/// <summary>
/// 从 ARGB 字符串转换为绘图颜色
/// https://www.cnblogs.com/lelehellow/p/6369608.html
/// </summary>
/// <param name="colorStr">ARGB颜色字符串(如#FFFFFFFF)</param>
/// <returns>Color 对象,转换失败返回透明色</returns>
public static Color ArgbStrToDrawingColor(string colorStr)
{
if (colorStr.Length != 9 || !colorStr.StartsWith("#"))
{
throw new Exception("颜色字符串格式不正确");
}
try
{
byte[] argb = new byte[4];
for (int i = 0; i < 4; i++)
{
char[] charArray = colorStr.Substring(i * 2 + 1, 2).ToCharArray();
byte b1 = ToByte(charArray[0]);
byte b2 = ToByte(charArray[1]);
argb[i] = (byte)(b2 | (b1 << 4));
}
return Color.FromArgb(argb[0], argb[1], argb[2], argb[3]);
}
catch (Exception ex)
{
Console.WriteLine(ex);
return Color.Transparent;
}
}
private static byte ToByte(char c)
{
byte b = (byte)"0123456789ABCDEF".IndexOf(c);
return b;
}
/// <summary>
/// 从 RGB 字符串转换为绘图颜色
/// </summary>
/// <param name="colorStr">RGB颜色字符串(如#FFFFFF)</param>
/// <returns>Color 对象,转换失败返回透明色</returns>
public static Color RgbStrToDrawingColor(string colorStr)
{
colorStr = colorStr.Replace("#", "#FF");
return ArgbStrToDrawingColor(colorStr);
}
#endregion
#region 相似比较
/// <summary>
/// [ChatGPT] 计算两个颜色之间的欧几里得距离(即两个颜色在 RGB 空间中的距离)
/// </summary>
public static double ColorDistance(Color color1, Color color2)
{
int rDiff = color1.R - color2.R;
int gDiff = color1.G - color2.G;
int bDiff = color1.B - color2.B;
return Math.Sqrt(rDiff * rDiff + gDiff * gDiff + bDiff * bDiff);
}
/// <summary>
/// [ChatGPT] 判断两个颜色是否近似(使用 两个颜色之间的欧几里得距离 与 给定阈值 进行比较,如果距离小于指定的阈值,则认为这两个颜色近似)
/// </summary>
public static bool AreColorsSimilar1(Color color1, Color color2, double threshold = 26)
{
double distance = ColorDistance(color1, color2);
return distance <= threshold;
}
/// <summary>
/// 获取两个颜色的 RGB 分量差之和
/// </summary>
public static int ColorSumOfComponentDifferences(Color color1, Color color2)
{
int rDiff = Math.Abs(color1.R - color2.R);
int gDiff = Math.Abs(color1.G - color2.G);
int bDiff = Math.Abs(color1.B - color2.B);
return rDiff + gDiff + bDiff;
}
/// <summary>
/// [ChatGPT] 判断两个颜色是否近似(判断两个颜色的 RGB 分量差之和是否小于指定的阈值,如果小于则认为这两个颜色近似)
/// </summary>
/// <param name="color1"></param>
/// <param name="color2"></param>
/// <param name="threshold"></param>
/// <returns></returns>
public static bool AreColorsSimilar2(Color color1, Color color2, int threshold = 45)
{
int sum = ColorSumOfComponentDifferences(color1, color2);
return sum <= threshold;
}
#endregion
}
}
//附-WPF的媒体颜色帮助类:https://gitee.com/dlgcy/WPFTemplateLib/blob/master/WpfHelpers/MediaColorHelper.cs
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。