|
#1
|
||||
|
||||
Кодировка цвета
Взоможно ли в delphi вместо кодировки RGB использовать RYB(red yellow blue), если да, то как это делается?
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#2
|
||||
|
||||
Что Вы подразумеваете под словом "использовать"? и чем не устраивает RGB?
Грамотно поставленный вопрос содержит не менее 50% ответа. Грамотно поставленная речь вызывает уважение, а у некоторых даже зависть. |
#3
|
||||
|
||||
RGB - это 3 основных цвета, потому что с помощью именно них ты можешь создать ЛЮБОЙ цвет, хоть желтый, хоть черный...
Помогаю за Спасибо |
#4
|
||||
|
||||
Цитата:
RYB CMYK знаком диалог выбора цвета: Пишу программы за еду. __________________ Последний раз редактировалось NumLock, 15.10.2010 в 15:17. |
#5
|
||||
|
||||
Я ж не сказал, что RYB нету, я сказал, что красный, зеленый, синий - это 3 основных цвета, и с помощью них можно получить любой другой цвет.
Помогаю за Спасибо |
#6
|
||||
|
||||
точно так же можно утверждать, что основных цвета 4: Cyan, Magenta, Yellow, Black. из которых можно сделать красный, синий, зеленый (см. ссылки). просто большинству привычней смешивать красный, синий, зеленый для получения остальных цветов. вообщем все это не по теме...
Пишу программы за еду. __________________ |
#7
|
||||
|
||||
Не по теме, но все же, из ссылки:
RYB — цветовая модель субтрактивного синтеза, основанная на составлении цвета из красного (англ. Red), жёлтого (англ. Yellow) и голубого (англ. Blue). Эта сложившаяся исторически система предшествовала становлению современной науки о цвете. Она не вписывается в современные представления о пиках восприятия спектра видимого света в трехстимульной модели зрения, однако все еще применяется для представления цвета в изобразительном искусстве. А в веб дизайне, программировании используют rgb, вот и все... Помогаю за Спасибо |
#8
|
||||
|
||||
Цитата:
Цитата:
Код:
function GetKValue(cmyk: COLORREF): Byte; begin Result := Byte(cmyk); end; function GetYValue(cmyk: COLORREF): Byte; begin Result := Byte(cmyk shr 8); end; function GetMValue(cmyk: COLORREF): Byte; begin Result := Byte(cmyk shr 16); end; function GetCValue(cmyk: COLORREF): Byte; begin Result := Byte(cmyk shr 24); end; function CMYK(c, m, y, k: Byte): COLORREF; begin Result := (k or (y shl 8) or (m shl 16) or (c shl 24)); end; Пишу программы за еду. __________________ |
#9
|
||||
|
||||
Код:
function RYBToRGB(R, Y, B:byte):TColor; function cubicInt(t, A, B:single):single; begin Result:=A + t*t*(3-2*t)*(B-A); end; var iR, iY, iB, x0, x1, x2, x3, y0, y1 : single; rR, rG, rB : byte; begin iR := R/255; iY := Y/255; iB := B/255; x0 := cubicInt(iB, 1.0, 0.163); x1 := cubicInt(iB, 1.0, 0.0); x2 := cubicInt(iB, 1.0, 0.5); x3 := cubicInt(iB, 1.0, 0.2); y0 := cubicInt(iY, x0, x1); y1 := cubicInt(iY, x2, x3); rR := Round(255*cubicInt(iR, y0, y1)); x0 := cubicInt(iB, 1.0, 0.373); x1 := cubicInt(iB, 1.0, 0.66); x2 := cubicInt(iB, 0.0, 0.0); x3 := cubicInt(iB, 0.5, 0.094); y0 := cubicInt(iY, x0, x1); y1 := cubicInt(iY, x2, x3); rG := Round(255*cubicInt(iR, y0, y1)); x0 := cubicInt(iB, 1.0, 0.6); x1 := cubicInt(iB, 0.0, 0.2); x2 := cubicInt(iB, 0.0, 0.5); x3 := cubicInt(iB, 0.0, 0.0); y0 := cubicInt(iY, x0, x1); y1 := cubicInt(iY, x2, x3); rB := Round(255*cubicInt(iR, y0, y1)); Result := (rB shl 16) + (rG shl 8) + rR; end; З.Ы. модель субстрактивная, а не аддитивная, как RGB РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت Последний раз редактировалось KOOL, 15.10.2010 в 19:27. |
#10
|
||||
|
||||
Большое спасибо Kool!
Ты мне помог. Объясняю, почему мне приспичила такая кодировка. Неспроста в изобразительном искусстве цвета описывают через красный, жёлтый и синий. Ведь именно эти три цвета воспринимает сетчатка глаза у человека, и посредством их смешения в человеческом восприятии формируются остальные цвета. Из этих умозаключений следует, что RGB не является адекватной по отношению к человеческому восприятию (хотя, может быть, она удобнее в программировании). Поэтому я решил, что для программирования тоновой коррекции, удобной для человеческого восприятия, следовало бы использовать RYB. Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#11
|
||||
|
||||
Вот бы ещё разобраться, как эта функция работает, и сделать обратное преобразование...
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#12
|
||||
|
||||
Я видел еще исходник, там и прямое и обратное преобразования, но он на пайтоне и на вход и выход подается оттенок (Hue), а не отдельные компоненты цвета. Если нужно вот исходник, там не сложно портировать http://code.google.com/p/grapefruit/.../grapefruit.py (1070 строка)
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#13
|
||||
|
||||
Поизучал код. Используется трёхмерная интерполяция. Нашёл грубую ошибку. Исправил. Стало лучше. Но, увы, не идеал, не выдаёт cian. Ищу в инете способ интерполяции с учётом значений не только на углах куба, но и на дополнительных точках на рёбрах. Если получится, будет здорово.
Если ты чего-то не знаешь, значит есть шанс научиться чему-то новому |
#14
|
||||
|
||||
В любом случае полный спектр в RYB не получить. Такой же проблемой обладает и CMYK, который довольно похож на RYB
РГРТУ - ФВТ - Системы Автоматизированного ПРоектирования. ت |
#15
|
||||
|
||||
RYB- RED YELLOW BLUE, RED=Magenta+Yellow, BLUE=Cyan+Magenta
вывод таков, что у вас не получится полноцветной картинки при такой модели. Пурпурного цвета будет в избытке. Нужен CMY. Черный цвет получится при смешивани: K=C+M+Y. Просто для полиграфии для черного сделали отдельную буковку, чтобы при печати текста и контуров не смешивать каждый раз три цвета. Т.к. полноцветная печать сложный технологический процесс. Художнику или полиграфисту, да и любому человеку CMYK более понятен, потому что действует тот же принцип что и при рисовании акварелью (C0M50Y100K0 - ораньжевый, несложно догадаться). А услышав R50G70B120 человеку далекому от компьютеной графики очень сложно в уме представить как будет выглядеть цвет. |