SortedDictionary<Color, int> bucket = new SortedDictionary<Color, int>(new MyComparer());
for (int col = 0; col < image.Width; col++)
{
for (int row = 0; row < image.Height; row++)
{
Color c = image.GetPixel(col, row);
if (bucket.ContainsKey(c))
bucket[c]++;
else
{
if (c == Color.FromArgb(255, 0, 15, 12))
MessageBox.Show("First time " + c + " " + bucket.ContainsKey(c));
bucket.Add(c, 1);
}
}
}
しかし、MessageBoxは2回表示されます(通常のデジタル画像の場合)。その後、私は何かをしたい場合カラーキーでソート済み
SortedDictionary<Color, int> newBucket = new SortedDictionary<Color, int>(bucket, new ColorComparer(channel));
"私は同じキーを持つ項目が既に追加されています。"しかし、私は上のコードでそれをチェックし、False
を返します。何か不足していますか?
btw。色が等しく、その後x.R == y.R
Compare(x, y)
リターン-1
されていない場合ので、MyComparer
class MyComparer : IComparer<Color>
{
public int Compare(Color x, Color y)
{
if (x == y)
return 0;
else if (x.R > y.R)
return 1;
else
return -1;
}
}
あなたの比較のすべての 'Color'フィールドを比較する必要がありますhttps://stackoverflow.com/questions/4501501/custom-sorting-icomparer-on-three-fields – Kostya
@KostyaK Oh、それは働いています、ありがとうございました。私は、colorA == colorBだと思っていました。まあとにかく...ありがとうございました:) – Reenergy
問題ありません。 :))) – Kostya