![]() |
![]() |
compiler |
![]() ![]()
Сообщение
#1
|
Человек ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 050 Пол: Мужской Реальное имя: Станислав Репутация: ![]() ![]() ![]() |
Добрый день!
Собственно нужна функция на ФП которая получая RGB-параметры возвращала бы номер этого(или максимально близкого к этому цвету) в стандартной палитре. [ RGBToP(const r, g, b:word):word; ] Желательно БЕЗ использования асм. Поиск особых результатов не дал(кроме не к чему не ведущей темы 2003-года) заранее благодарен -------------------- Спасибо!
Удачи! |
![]() ![]() |
Neznaika |
![]()
Сообщение
#2
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 51 Пол: Мужской Репутация: ![]() ![]() ![]() |
Оооо, я когда-то решал эту задачу. Её нужно было решать всем разработчикам игрушек
с палитровой графикой для подгонки например цветов текстур/спрайтов с оригинальной палитрой к цветовой палитре игры. Пусть элемент палитры описывается типом type TRGB = record Red, Green, Blue : Byte end; Палитра состоит из 256 элементов TRGB: type TRGBPalette = array[0..255] of TRGB; Можно рассуждать следующим образом. Есть цветовое пространство RGB. Нам нужен его первый октант, то есть та часть(тот куб), в котором координаты по осям R, G и B изменяются от 0 до 255(тип Byte для Red, Green и Blue в TRGB). Соответственно переменная типа TRGB будет с одной стороны задавать цвет, а с другой(то что нам и нужно) координаты в первом октанте RGB-пространства. Вся палитра будет соответственно задавать набор точек в RGB-пространстве. Остается решить задачу на нахождение минимального расстояния от заданной точки до точек из палитры(в цветовом пространстве RGB). Пусть функция вычисляющая расстояние между двумя точками A и B объявлена как function Distance( A, B : TRGB ) : Real; тогда найти минимальное расстояние (и нужный нам ближайший цвет) можно следующим образом:
Тогда цвет RGBPalette[Index] наиболее "похож" на цвет X. P.S. Игрушки я не разрабатывал. |
![]() ![]() |
![]() |
Текстовая версия | 19.06.2025 5:35 |