
Описание языка ColorTalk
Приложение ColorTalk работает с прямоугольными выделениями. Это язык, который может быть использован для выполнения операций над каналами в выделенной области. ColorTalk оперирует одновременно изображением на слое и изображением, которое находится на холсте. Язык по синтаксису похож на язык С. Существуют предопределенные операнды, связанные с различными компонентами изображения. К примеру, если необходимо добавить зеленый цвет к красному, следует написать: red = red + green;
Красный компонент обозначен как red, а зеленый как green. Это выражение выполняется отдельно для каждого пиксела изображения. Программа ColorTalk может содержать несколько действий, каждое из которых должно оканчиваться точкой с запятой.
Операнды
red красный компонент пиксела
green зеленый компонент пиксела
blue синий компонент пиксела
mask* степень прозрачности маски
hue цвет пиксела
saturation насыщенность пиксела
value яркость пиксела
c_red* красный компонент пиксела холста
c_green* зеленый компонент пиксела холста
c_blue* синий компонент пиксела холста
c_hue* цвет пиксела холста
c_saturation* насыщенность пиксела холста
c_value* яркость пиксела холста
x горизонтальная координата пиксела
y вертикальная координата пиксела
noise случайное значение от 0 до 1
xnoise случайное значение от 0 до 1, создающее вертикальные полосы
ynoise случайное значение от 0 до 1, создающее горизонтальные полосы
angle угол от центра выделенной области
distance расстояние от центра выделенной области
grain значение зернистости текущей текстуры бумаги
Функции и процедуры
a = min(b, c) a равно меньшему из b и c
a = max(b, c) a равно большему из b и c
a = pow(b, c) a равно b в степени с
a =log(b) a равно натуральному логарифму b
a = exp(b) a равно e в степени b
a = sin(b) a равно синусу b
a = cos(b) a равно косинусу b
a = lerp(b, c, d) a равно b * (1 – d) + c * d
swap(a, b) a равно b, а b равно a
a = sqrt(b) a равно квадратному корню b
a = usin(b) a равно (sin (b * 2 * pi) + 1) / 2
a = ucos(b) a равно (cos (b * 2 * pi) + 1) / 2
a = step(b, c) если b больше c, a равно 1, иначе 0
a = uclip(b) a равно b mod 10
a = abs(b) a равно абсолютному значению b
Числовые величины
Допустимы любые целые и вещественные числа от –8 до 7,99.
Разделители
; точка с запятой используется для разделения нескольких команд между собой
, запятая используется для разделения аргументов в функциях и процедурах
( ) круглые скобки используются для ограничения выражений
Операторы
= присваивание a = b;
+ сложение a = b + c;
– вычитание a = b – c;
* умножение a = b * c;
/ деление a = b / c;
+= умножить и присвоить a += b; (т. е. a = a + b;)
– = вычесть и присвоить a – = b; (т. е. a = a – b;)
*= умножить и присвоить a *= b; (т. е. a = a * b;)
/= разделить и присвоить a /= b; (т. е. a = a / b;)
Переменные
Можно использовать переменные t1…t9.
*) Операнд можно использовать только при работе со слоями