Текущий архив: 2004.09.05;
Скачать: CL | DM;
Вниз
Сравнение цветов Найти похожие ветки
← →
Сашенька (2004-06-08 18:59) [0]может кто знает какие есть способы обьединения нескольких цветов
по похожести(коэфициент может меняться)
← →
Сашенька (2004-06-11 11:14) [1]ау
← →
Сашенька (2004-06-11 11:15) [2]это же не такой и сложный вопрос, просто у меня все идеи кончились
← →
Damage © (2004-06-11 11:20) [3]Ну, например, раскладывай цвета на RGB составляющие и вычисляй разницу между каждой составляющей для двух цветов (по модулю).
Потом эти 3 числа, например, складывай - чем меньше результат, тем цвета похожее.
← →
Сашенька (2004-06-11 13:35) [4]так я делал, группируются только те цвета которые практически идентичны, а при увеличеннии коэфициента в группу попадают не совсем похожие цвета, хотя те которые на глаз похожи тула не попадают.
← →
Amoeba © (2004-06-11 15:54) [5]А что есть упоминаемый тобой коэффициент? Как делается группировка?
← →
Amoeba © (2004-06-11 15:56) [6]Может кластерный анализ поможет?
← →
Сашенька (2004-06-11 16:19) [7]я думаю вряд ли, здесь скорее нужно рассматривать цвет так, как воспринимает его человеческий глаз.
← →
Pipa (2004-06-11 19:43) [8]HSL + CMYK
← →
Jurijs © (2004-06-12 01:44) [9]Вот кусок кода для сравнения цветов. В принципе, то же, что Damage предлагал.
// This function is only intended to demonstrate the concept of finding the
// "nearest" color from a list.
FUNCTION NearestColor(CONST color: TColor): TColor;
CONST
ColorList: ARRAY[0..15] OF TColor =
(clBlack, clMaroon, clGreen, clOlive, clNavy, clPurple,
clTeal, clGray, clSilver, clRed, clLime, clYellow,
clBlue, clFuchsia, clAqua, clWhite);
VAR
DistanceSquared: INTEGER;
B1, B2: INTEGER;
G1, G2: INTEGER;
i: INTEGER;
R1, R2: INTEGER;
SmallestDistanceSquared: INTEGER;
BEGIN
RESULT := clBlack; // Assume black is closest color
SmallestDistanceSquared := 256*256*256; // Any distance would be shorter
R1 := GetRValue(color);
G1 := GetGValue(color);
B1 := GetBValue(color);
FOR i := 0 TO High(ColorList) DO
BEGIN
R2 := GetRValue(ColorList[i]);
G2 := GetGValue(ColorList[i]);
B2 := GetBValue(ColorList[i]);
DistanceSquared := SQR(R1-R2) + SQR(G1-G2) + SQR(B1-B2);
IF DistanceSquared < SmallestDistanceSquared
THEN BEGIN
RESULT := ColorList[i];
SmallestDistanceSquared := DistanceSquared
END
END
END {NearestColor};
Взято с http://homepages.borland.com/efg2lab/Library/Delphi/Graphics/Color.htm
Там же можно найти огромное количество информации (уже реализованные алгоритмы на Delphi) по работе с цветом.
← →
Сашенька (2004-06-16 15:21) [10]спасибо
Страницы: 1 вся ветка
Текущий архив: 2004.09.05;
Скачать: CL | DM;
Память: 0.46 MB
Время: 0.025 c