• Главная
  • Исходники Delphi
  • Справочники Delphi
  • Книги Delphi
  • Основы Delphi
  • библиотека Delphi исходников
  • Форум
  • Блоги

Последние записи

  • Прозрачность тайлсета в TPNGImage
  • Как сделать VBA макрос в excel
  • Поиск по столбцу 1-ого не нулевого значения (формулой в Microsoft Office Excel)
  • Простановка единиц в ячейки под объектами (Microsoft Office Excel)
  • Расчет затраченного времени между определенным рабочим временем (формулой в Microsoft Office Excel)
  • Мигающий экран на Assembler
  • VBA-макрос по копированию 10 строчек в выбранном диапазоне в Microsoft Office Excel
  • Копирование только нужного диапазона в Microsoft Office Excel
  • Перенос диапазона стоки в Microsoft Office Excel на другой лист по условию
  • Мелодия в Pascal.ABC.Net с помощью System.Console.Beep — задержка воспроизведения звука

made in programmersforum 4

programmersforum4

  • .NET
  • ASP.NET
  • assembler
  • Basic
  • c/c++
  • CMS
  • Delphi
  • HTML
  • iPhone
  • Java
  • JavaScript
  • Linux
  • Pascal
  • Perl
  • Photoshop
  • php
  • Python
  • Ruby
  • SEO
  • sql
  • VBA
  • Win Api
  • Windows
  • XML и XSLT
  • Администрирование ОС
  • Апгрейды
  • Архив
  • Безопасность
  • Блоги
  • Веб-аналитика
  • Железо
  • Журнал
  • Заметки
  • Имейдж
  • Интервью
  • Исходники
  • Новости
  • Общалка
  • Операционные системы
  • Пост-обзор
  • Профлитература
  • Рассылка
  • Реклама
  • си шарп
  • Советы
  • Софт
  • Статьи
  • Топик-обзор
  • Файлы








31st
Мар

Сортировка цветов

Posted by maloy under Delphi, Архив, Заметки

Altera

Вот такая головоломка заявилась:
Короче надо отсортировать цвета. Ну вообще я в функции сравнения следующее написал:

Код:
result := color1 - color2;

Сортирует то как надо, в математическом плане. Да смотрится это для человека как-то не так!
Вон, между фиолетовыми какой про межуток из синих цветов. Надо-бы как-то так, что бы реальнее было-бы…

 

mutabor

Если работать с RGB цветом, то спектр можно условно разделить на три части, в к-рых разные компоненты цвета то идут на убыль то поднимаются. Кстати это наводит на мысль о синусоиде, может ее тут заюзать? У разных компонентов цвета будут разные фазы. 

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 года

Похожие статьи

  • Перевести 4-битное число в RGB
  • Как получить доступ к R,G,B,A значениям каждого пиксела через указатель Scr?
  • Как использовать цвета в массиве
  • Как нарисовать две перпендикулярных линии(уголок)?
  • Сортировка кучей на языке Си
  • Сортировка имен файлов в TStringList
  • Распределить слова в алфавитном порядке
  • Отлов цвета в определенной области экрана
  • Сортировка в обе стороны при повторном нажатии на заголовок
  • Нарисовать флаг Дании и Швейцарии
Теги: canvas | color | ColorToHSL | DegToRad | hsl | RGB | сортировка | цвет








© Copyright "Клуб программистов" – материалы по Delphi и С++. Создание и продвижние сайта - Веб-сателлит.