Последние записи
- Windows 10 сменить администратора
- Рандомное слайдшоу
- Событие для произвольной области внутри TImage
- Удаление папки с файлами
- Распечатка файла
- Преобразовать массив байт в вещественное число (single)
- TChromium (CEF3), сохранение изображений
- Как в Delphi XE обнулить таймер?
- Изменить цвет шрифта TextBox на форме
- Ресайз PNG без потери прозрачности
Интенсив по Python: Работа с API и фреймворками 24-26 ИЮНЯ 2022. Знаете Python, но хотите расширить свои навыки?
Slurm подготовили для вас особенный продукт! Оставить заявку по ссылке - https://slurm.club/3MeqNEk
Online-курс Java с оплатой после трудоустройства. Каждый выпускник получает предложение о работе
И зарплату на 30% выше ожидаемой, подробнее на сайте академии, ссылка - ttps://clck.ru/fCrQw
31st
Мар
Сортировка цветов
Posted by maloy under Delphi, Архив, Заметки
Altera
Вот такая головоломка заявилась:
Короче надо отсортировать цвета. Ну вообще я в функции сравнения следующее написал:
result := color1 - color2;
Сортирует то как надо, в математическом плане. Да смотрится это для человека как-то не так!
Вон, между фиолетовыми какой про межуток из синих цветов. Надо-бы как-то так, что бы реальнее было-бы…
mutabor
p/s Нарисовал на листике, действительно так и есть, три синусоиды к-рые отличаются по фазе. Вот тебе и значения R G B.
Вот код, и результат его работы
uses
Math;
var
r, g, b: byte;
i: integer;
begin
for I := 0 to 360 do begin
r:=Round(128+cos(DegToRad(i))*128);
g:=Round(128+cos(DegToRad(i+240))*128);
b:=Round(128+cos(DegToRad(i+120))*128);
Canvas.Pen.Color:=RGB(r,g,b);
Canvas.MoveTo(i, 0);
Canvas.LineTo(i, 50);
end;
end;
Красный цвет совпадает с косинусом, зеленый — сдвинут по фазе на 240 град., синий на 120.
Но за счет того что синусоида имеет плавную форму, чистых цветов на границах нет (желтого например), тут нужно синусоиду как бы дискретной сделать, с линейными (по диагонали) перепадами, и плоскими пиками равным по длине перепаду * 2. Плюс черные полосы нужно разобраться что тут делают.
Altera
Сделал так:
function compareColor(const color1, color2: tColor): integer;
var
h1, h2, s1, s2, l1, l2: byte;
begin
ColorToHSL(color1, h1, s1, l1);
ColorToHSL(color2, h2, s2, l2);
result := h2 - h1;
if result = 0 then
result := s2 - s1;
if result = 0 then
result := l2 - l1;
end;
Вроде работает нормально…
тема на форуме от 2009 года
Похожие статьи
Купить рекламу на сайте за 1000 руб
пишите сюда - alarforum@yandex.ru
Да и по любым другим вопросам пишите на почту
пеллетные котлы
Пеллетный котел Emtas
Наши форумы по программированию:
- Форум Web программирование (веб)
- Delphi форумы
- Форумы C (Си)
- Форум .NET Frameworks (точка нет фреймворки)
- Форум Java (джава)
- Форум низкоуровневое программирование
- Форум VBA (вба)
- Форум OpenGL
- Форум DirectX
- Форум CAD проектирование
- Форум по операционным системам
- Форум Software (Софт)
- Форум Hardware (Компьютерное железо)