Учитывая два цвета ARGB, представленные в виде целых чисел, 8 бит / канал (альфа, красный, зеленый, синий), мне нужно вычислить значение, которое представляет собой своего рода расстояние (также целое) между ними.
Итак, формула для расстояния: Delta=|R1-R2|+|G1-G2|+|B1-B2|
где Rx, Gx и Bx - значения каналов цвета 1 и 2. Альфа-канал всегда игнорируется.
Мне нужноускорить этот расчет, потому что это делается много раз на медленной машине.Какой способ вычислить это «вундеркинды» в одном потоке с учетом двух целых чисел.
Пока что лучше всего, но я думаю, что это можно еще улучшить:
//Used for color conversion from/to int
private const int ChannelMask = 0xFF;
private const int GreenShift = 8;
private const int RedShift = 16;
public int ComputeColorDelta(int color1, int color2)
{
int rDelta = Math.Abs(((color1 >> RedShift) & ChannelMask) - ((color2 >> RedShift) & ChannelMask));
int gDelta = Math.Abs(((color1 >> GreenShift) & ChannelMask) - ((color2 >> GreenShift) & ChannelMask));
int bDelta = Math.Abs((color1 & ChannelMask) - (color2 & ChannelMask));
return rDelta + gDelta + bDelta;
}