0
我有一個代碼可以根據RGB差異獲得最接近的顏色,但是深藍色等深色,它會返回黑色而不是「深藍色」。你們能幫我弄清楚發生了什麼嗎?如何使用C#中兩種顏色之間的rgb差異來找到最接近的匹配?
這是計算兩個顏色之間的RGB差異代碼:
int ColorDiff(Color c1, Color c2)
{
return (int)Math.Sqrt((c1.R - c2.R) * (c1.R - c2.R)
+ (c1.G - c2.G) * (c1.G - c2.G)
+ (c1.B - c2.B) * (c1.B - c2.B));
}
此代碼獲取列表中最接近的顏色(即具有RGB之間差異較小的一個):
int encontrarCor(List<Color> colors, Color target)
{
var colorDiffs = colors.Select(n => ColorDiff(n, target)).Min(n => n);
return colors.FindIndex(n => ColorDiff(n, target) == colorDiffs);
}
我認爲,正如你在第一個代碼中看到的那樣:(c1.R - c2.R)*(c1.R - c2.R),所以如果其中一個基底等於0 ,整個產品將爲0,因此返回黑色,導致黑色RGB代碼爲0,0,0。
我試圖讓自己變得儘可能清楚,對不起,如果有點困惑。
您需要手動計算這些顏色之間的*距離* - 也許,它實際上更接近黑色而不是深藍色。如果您希望我們提供您,那麼您需要提供以下信息:「深藍色」標準的RGB;顏色的RGB示例,當您希望它變成深藍色時會導致黑色。 –
您的描述與代碼不匹配......如果其中一個顏色差異= 0,則該通道的差值爲0,這是正確的,沒有差別。這0完全不用於顏色。然後奇怪地再次這樣做,所以它可以找到具有最低差異的顏色索引 –
*「因此,如果其中一個基底等於0,則整個產品將是0」* - 錯誤。你沒有使用顏色分量的距離的產品,你總結一下。如果其中一個計算爲零,則總和仍然可以不爲零。 –