ОПИСАНИЕ
Тип 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
(обычно это последовательность строк)