Модераторы: Snowy, Alexeis, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вычислить длинну волны цвета 
:(
    Опции темы
DoZENT
Дата 26.5.2010, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 2.6.2006

Репутация: нет
Всего: 1



Общая задача такая: взять цвет пикселя и определить, к какому из 7 основных цветов он принадлежит, т.е. оттенком которого он является. Появилась идея найти длину волны цвета, а по ней уже определять основной цвет. Как это можно сделать и может быть есть какой-то другой более легкий способ?


--------------------
Какая боль, какая боль, Internet Explorer 5.0...
PM MAIL   Вверх
Фантом
Дата 26.5.2010, 11:34 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: нет
Всего: 49



Цитата(DoZENT @  26.5.2010,  09:14 Найти цитируемый пост)
Появилась идея найти длину волны цвета, а по ней уже определять основной цвет. Как это можно сделать и может быть есть какой-то другой более легкий способ? 

Это просто невозможно сделать - далеко не все цвета являются монохроматичными, т.е. описываются одной длиной волны.

Проще, пожалуй, так. В RGB есть "выделенные" цвета:
0, 0, 0 - черный
255, 0, 0 - красный
0, 255, 0 - зеленый
0, 0, 255 - синий
255, 255, 0 - желтый
0, 255, 255 - голубой (вернее, "циановый")
255, 0, 255 - пурпурный
255, 255, 255 - белый

Для RGB-координат пиксела можно определить какое-то расстояние (ну, например, банальный корень квадратный из суммы квадратов разностей координат), после чего посмотреть, к какому из "выделенных" цветов пиксел ближе.
PM   Вверх
Bitter
Дата 26.5.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный лентяй
***


Профиль
Группа: Завсегдатай
Сообщений: 1209
Регистрация: 15.8.2004
Где: Харьков, Ukraine

Репутация: 6
Всего: 27



а вы о цветовых моделях HSB и HLS слышали? Ключевая буква в этих моделях - H, обозначающая оттенок. Переведите RGB в HLS и вы получите оттенок. А дальше умножьте это значение на 7 и разделите на 240. Вот вам и цвет. Если надо точнее, задайте 7 значений цветов и ищите минимальное расстояние от полученого значения к заданным значениям.
PM MAIL ICQ Skype   Вверх
x128
Дата 26.5.2010, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 88
Регистрация: 29.9.2009

Репутация: 5
Всего: 7



Как вариант, можно найти у максимального значения rgb позицию старшего установленного бита, проверить эту позицию в каждой компоненте и сложить результат:
Код

uses math;
...
function IdentColor(r,g,b: byte): TColor;
var
  s: byte;
begin
  s:=1 shl trunc(log2(max(max(r,g),b)));
  result:=rgb(ord(r and s<>0)*255, ord(g and s<>0)*255, ord(b and s<>0)*255);
end;

Это решение точнее вычисления расстояния и проще перевода в другое цветовое пространство хоть и не такое точное.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Звук, графика и видео"
Girder
Snowy
Alexeis

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • По вопросам разработки игр стоит заглянуть сюда

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Girder, Snowy.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Звук, графика и видео | Следующая тема »


 




[ Время генерации скрипта: 0.0661 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.