ОПИСАНИЕ
Тип Image определяет прямоугольное изображение и методы для отрисовки; это также
строительный блок
для высокоуровневых объектов,
таких как окна и шрифты. В особенности окна, они представлены как Image,
и для
рисования ни них не нужны никакие специальные операторы.
r |
Координаты прямоугольника в плоскости, где Image имеет определённые
значение пикселей. Они не должны мсодифицироватся после создания изображения. |
||||||
clipr |
Выделенная область: операции чтения или записи будут невозможны за
пределами clipr.Часто clipr совпадает с r, но они могут и отличатся; (в часности см.
repl).Выделенную область можно динамически изменять используя replclipr (q.v.). |
||||||
chan |
Дескриптор формата пиксельного канала, описанный в image(6).Он не должны мсодифицироватся после создания изображения. | ||||||
depth |
Число бит в пикселе (глубина цвета в картинке) идентично
chantodepth(chan) [см. graphics(2)] и представлен для удобства.
Значение не должно мсодифицироватся после создания изображения. |
||||||
repl |
Логическая переменная которая определяет мозаичный ли рисунок
покрывающий плоскость при использывании рисунка как источника для
рисования. Если repl == 0; операции ограничены пересечением r и clipr.
r дублируется закрывая clipr; в таком случае
r и clipr независимы друг от друга.Для примера: перекрываемая картинка для которой r установлена в ((0,
0), (1, 1)) а clipr установлена в ((0, 0), (100, 100)),
|
Большинство графических функций находятся в 2х формах: в основной и
расширенной, которые взяты как
дополнительная Drawop определённая Porter–Duff составным оператором для
использования.
Базовая форма принемает оператор SoverD, что достаточно для большенство
приложений.
Расширенная форма образуется добовлением суффикса –op к базовой форме.
Ниже перечислены только базовые формы.
draw(dst, r, src, mask, p)
Draw стандартная графическая функция. Только пиксели находящиеся в пределах
пересечения dst–>r и dst–>clipr будут использованы.
Draw игнорирует dst–>repl.
Суть в следующем (это описание поведения а не реалезации)
1. Если repl установлен в src или mask, то копировать его содержимое для
заполнения выделенного прямоугольника.2. Перевести src и mask так чтобы p выровнелось с r.min .3. Привести r к соединению r и dst–>r.4. Соединить r с src–>clipr.
Если src–>repl ложь также соединить r с src–>r.5. Соединить r с mask–>clipr.
Если mask–>repl ложь также соединить r с mask–>r.6. Для каждой позиции в r объеденить dst pixel с src pixel используя alpha
значение для соответствующего mask pixel. |
mask является alpha-каналом то alpha значение для соответствующего mask
pixel это пиксель alpha-канала.Иначе alpha значение берется по NTSC greyscale эквивалентно цветовому значению,
с белым непрозрачныи и чёрным прозрачным значениями. В терминах Porter–Duff составной алгебры,
draw заменяет dst pixels с (src в mask) через dst. (В расширенной форме ,
``через'' заменяется на -op).При совмещении различных пиксельных каналов идентичность форматов не обязательна. Если совмещенные каналы меньше 8–bits,
они будут продвигаться перед вычислением, повторяя существующие биты; после вычисления лишние биты будут отсечены
до соответствующего размера.
gendraw(dst, r, src, p0, mask, p1)Gendraw аналогичен draw за исключением того что gendraw выравнивает source и
mask иначе:src выравнивает p0 так чтобы соотвецтвовать r.min и mask выравнивает p1 так
чтобы соотвецтвовать r.min.Для большенства целей простой маски и исходной картинки достаточно для вычерчивания, но
gendraw это общий оператор и все другие графические примитивы сформированы на нем.
drawreplxy(min,max,x)Отсекает
x в полуоткрытом интервале [min, max) к суммированию или вычетанию
кратным max–min .drawrepl(r,p)Отсекает указатель
p в пределах прямоугольника r переводя указатель целому, кратно ширене прямоугольника и вертикально кратно высоты.
Отсекает указатель
p в пределах прямоугольника r через перевод горизонтального
указателя целочисленно кратного ширине прямоугольникаи целочисленно кратного высоты.
Определяет точку
p в пределах прямоугольника r через преведение горизонтального
указателя к целочисленному виду кратного ширинепрямоугольника и целочисленно кратного высоты.
Clips the point p to be within the rectangle r by translating the point horizontally by an integer multiple of rectangle width and vertically by the height.
replclipr(i,repl,clipr)Поскольку само изображение хранится на сервере, то локальное изменение структуры
Image будет безполезна. Repclipr меняет локальные поля repl и clipr структуры Image, и уведомляет об
этом сервер. line(dst, p0, p1, end0, end1, thick, src, sp)Line чертит в dst линию толщеной 1+2*thick пикселей соеденяя точки p0 и p1.Линия чертится используя пиксели из
src рисунка выравнивая так чтоб sp источник
соотвецтвовал p0 назначению.Линия прикасается к обеем
p0 и p1 точкам, и end0, end1 определяют как
заканчивать вычерчивание линии.Квадратное окончание завершает линию перпендикулярно к направлению линии; толстая линия с квадратным окончанием
на оба конца станут прямоуголником.
Круглое окончание завершает линию диском диаметра
1+2*thick с центром в конечных
точках.Треугольное окончание завершает линию стреловидным окончанием чеё окончание косается конечных точек.
Макрос
ARROW даёт явный контроль над формой стрелок. Если все 3и параметра
нулевые, по умолчанию будет треугольное окончание. Line и другие геометрические функции аналогичны вызову gendraw использующею
маску производимой геометрической процедурой.poly(dst, p, np, end0, end1, thick, src, sp)Poly чертит основной многоугольник (polygon); в принципе это эквивалентно серии
вызовов line соедененных смежными точками в масиве
Points p, с np элементами. Окончание многоугольника определяется также
как и в функции line; внутреннии линии заканчиваютсяс помощью
Enddisc, для гладкого соединения. Источник выравнин таким образом
чтобы sp соответствовал p[0].fillpoly(dst, p, np, wind, src, sp)Fillpoly похож на poly но он предназначен для заливки многоугольника очерченого
контуром.Источник выравнин таким образом чтобы
sp соответствовал p[0]. Параметр wind
решает неоднозначность о том что заполнять если многоугольник самопересикается.
Если
wind ~0, тогда пиксель внутри многоугольника если число wind около не
нулевой точки.Если
wind 1, тогда пиксель внутри если число wind нечётное. Дополнительные
переменные (0 или ~1) выбераеются за пределами заполненых пикселей.Значение остальных переменных не определены. Многоугольник при необходимости закрывается
line. bezier(dst, a, b, c, d, end0, end1, thick, src, sp)Bezier чертит кубические кривые Безье
(http://ru.wikipedia.org/wiki/Кривые_Безье) определяя по точкам a, b, c, и d.Окончания берутся из
end0 и end1; толщина кривой 1+2*thick. Источник выравнин
таким образом чтобы sp в src соответствовал dst. bezspline(dst, p, end0, end1, thick, src, sp)(для сопряжения фрагментов
изображения)Bezspline имеет теже аргументы чтои poly но чертит квадратный Би-сплайн
(несмотря на имя лучше чем многоугольник).Если первая и последняя точки в
p равны, сплайн имеет переодическое условия
окончания.bezsplinepts(pt, npt, pp)Bezsplinepts возвращает в pp список точек созданным открытым многоугольником
чтобы bezspline начертил. Вызывающая функция отвецтвенна за освобождение
*pp.fillbezier(dst, a, b, c, d, wind, src, sp)Fillbezier тоже для bezier что и fillpoly для poly.fillbezspline(dst, p, wind, src, sp)Fillbezspline похож на fillpoly но заполняет квадратный Би-сплайн вместо
многоугольника, начертившего контур p.Сплайн дочерчивается линеей если это необходимо.
ellipse(dst, c, a, b, thick, src, sp)Ellipse чертит в dst эллипс с центром в c и с горизонтальными и вертикальными
директрисами a и b.Источник выравнин таким образом чтобы
sp в src соответствовал с в dst. Эллипс
вытянут с толщеной 1+2*thick.fillellipse(dst, c, a, b, src, sp)Fillellipse похож на эллипс но он предназначен для заливки эллипса очерченого
контуром.arc(dst, c, a, b, thick, src, sp, alpha, phi)Arc похож на эллипс но чертится только часть эллипса начинающегося при угле
Альфа и расширяющеяся через угол Фи.Углы измеряются в градусах против часовой стрелки от положительной оси
x .fillarc(dst, c, a, b, src, sp, alpha, phi)Fillarc похож на arc, но заполняет сектор исходным цветом.icossin(deg, cosp, sinp)Icossin хронит в *cosp и *sinp косинус и синус угла deg представленные целыми
скалярами, в градусах. Переменные представленны так что
cos(0) есть 1024.icossin2(x, y, cosp, sinp)Icossin2 аналогична icossin, но угол представлен неявным образом, точкой (x,y).
Это icossin с atan2 равным atan (см. sin(2)).border(dst, r, i, color, sp)Border очерчивает прямоугольник r заданным цветом; ширеной i; есле возможно
бордюр идет внутри прямоугольника; иначе снаружи.Источник выравнин таким образом чтобы
sp соответствовал r.min.string(dst, p, src, sp, font, s)String чертит в dst символы определенные в строке s и font; это эквивалентно
серии вызовов gendraw используя src как источник и маску определённуюформой символа. Позиция текста устанавликается слева от первого символа на
p.x и
сверху от линии текста на p.y. Источник установлен таким образомчтобы
sp в src соответствовал p в dst. String возвращает структуру Point которая
указывает на следующий символ который должен быть напечатан еслибыстрока былабы длиннее. Для символов у которых нет изображения в соответствующем шрифте будет начерчен
0 (NUL).Поведение остальных строковых базовых функции можно узнать по их именам.
имена содержащие
rune, предназначены для UTF–encoded bytes.имена оканчивающиеся на
n, принемают аргумент n который определяет число
символов для печати, применим для NUL–terminated string.имена содержащие
bg заливают фон позади символов, цвет (bg) выравнивание (bgp);
обычно текст оставляет фон нетронутым.имена оканчивающиеся на
_string собирают все эти свойства в одном операторе.Длинну стороки всегда определяет
len независимо от того UTF string или Rune
string. Если bg не ноль, то значение bg используется как цвет фона.Аргумент
clipr разрешает дополнительное управление прикреплением во время
прорисовки строки. имеет смысл при управлении ограниченной протяженности текста.
drawsetdebug(on)Включает или выключает
debugging output (обычно это последовательность строк)