如何在以下代码中获取差值

时间:2016-02-02 20:12:34

标签: c# arrays list colors difference

我有以下代码:

ListBox

我想要的是获得colorarray的每个元素(包含10个元素)和colorfeature3的10个元素之间的差异(数组包含750个元素,每个10个元素与其他元素分开,因为它代表了一个特征数据集中的图像)并将差值保存到10 * 10数组然后得到每行的最小值并将其保存到列表

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:1)

首先,您需要定义最近的颜色"手段。这是一个可能有用的答案:Find nearest RGB value using color palette array in C

public int Closeness(int c1, int c2)
{
    // Example algorithm
    int r1 = c1 / 0x010000 - c2 / 0x010000;
    int g1 = (c1 % 0x010000) / 0x00100 - (c2 % 0x010000) / 0x00100;
    int b1 = c1 % 0x000100 - c2 % 0x000100;
    return r1 * r1 + g1 * g1 + b1 * b1;
}

其次,您需要创建一个使用此" nearness"的排序函数。算法在主色列表中找到最接近的颜色。

 public int FindClosestIndex(List<int> master, int color)
{
    var idx = -1;
    var idxCloseness = int.MaxValue;
    for (var i = 0; i < master.Count; i++)
    {
        var closeness = Closeness(master[i], color);
        if (closeness < idxCloseness)
        {
            idx = i;
            idxCloseness = closeness;
        }
    }
    return idxCloseness;
}

public int SortColorByMasterList(List<int> masterOrder, int a, int b)
{
    return FindClosestIndex(masterOrder, a).CompareTo(FindClosestIndex(masterOrder, b));
}

你用它是这样的:

myList.Sort((a,b) => SortColorByMasterList(masterOrder, a, b));