Picture.Line

From SunFlurry wiki
Jump to: navigation, search
  Line (Изменение картинки)
Объект:Картинка
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, неверные параметры.
Визуальность:Нет

Функция рисует линию (отрезок) по координатам ее начала и конца. Для линии может быть задана толщина, цвет, коэффициент альфа, при рисовании линии может использоваться сглаживание. Функция поддерживает форматы картинки: BMP 8 (без сглаживания и альфа) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит). Взаимное расположение точек отрезка не имеет значения, однако, функция не будет рисовать отрезок, вырожденный в точку. Скорость работы функции зависит не только от наличия сглаживания или альфа-сопряжения, но и от длины отрезка.

Синтаксис

Picture.Line(<Координата X точки 1 (INT)>,<Координата Y точки 1 (INT)>,<Координата X точки 2 (INT)>,<Координата Y точки 2 (INT)>,<Цвет линии (INT)>=0,<Ширина линии (REAL)>=1,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000)

Аргументы

  • <Координата X точки 1 (INT)>,<Координата Y точки 1 (INT)> - Аргументы задают координату первой точки отрезка. Самая верхняя левая точка имеет координаты (1,1) координата X растет по направлению вправо, координата Y растет по направлению вниз.
  • <Координата X точки 2 (INT)>,<Координата Y точки 2 (INT)> - Аргументы задают координату второй точки отрезка. Самая верхняя левая точка имеет координаты (1,1) координата X растет по направлению вправо, координата Y растет по направлению вниз.
  • <Цвет линии (INT)> - (необязательный аргумент) Аргумент задает цвет точки. Используется 24-битная нотация цвета. По умолчанию линия будет нарисована черным цветом (0).
  • <Ширина линии (REAL)> - (необязательный аргумент) Аргумент задает ширину линии. По умолчанию ширина линии составляет 1 пиксел. Для линий, использующих сглаживание, этот аргумент может быть вещественным числом (включая значения меньше единицы). Для линий, имеющих ширину, больше единицы, рисунок будет представлять собой вытянутый прямоугольник, ширина которого, соответствует значению данного аргумента, точки начала и конца будут находиться в серединах отрезков верхней и нижней граней.
  • <Использовать сглаживание (INT)> - (необязательный аргумент) При использовании сглаживания (по умолчанию отключено), для рисования используется в 16 раз большее пространство, чем оригинальное, после чего создается альфа-наложение полученной картинки на оригинальную, каждая точка результата представлена 16-ю точками буфера (SSAA 4x4). Это позволяет получить гладкую картинку, однако скорость рисования такой картинки будет значительно снижена.
  • <Коэффициент альфа-сопряжения (INT)> - (необязательный аргумент) Рисуемая картинка становится полупрозрачной, оставляя частично видимыми цвета, которые были под ней до ее рисования. Программа использует целочисленную нотация для указания коэффициента альфа. Сопряжение не используется при коэффициенте равном 1000 (по умолчанию), при 500 рисуемая картинка получает половину интенсивности, при 0, рисуемая картинка не видна. При использовании коэффициента не равного 1000, скорость рисования будет снижена.

Примеры

Картинка-результат работы примера
ProfilerClear();
ProfilerStart();

randomize(1);
aPic:=Picture.Create(500,500,toRgb(255,255,255),32);
//Выведем 20000 случайных линий, случайной толщины, имеющими альфа 50%
for i:=0 to 20000 do
  aPic.Line(random(510)-5,random(510)-5,random(510)-5,random(510)-5,toRgb(random(256),random(256),random(256)),Random(15)+1,1,500);
enddo;

//36 дополнительных линий через каждые 10°
for i:=0 to 35 do
  x:=sin(radians(i*10))*200+250;
  y:=-cos(radians(i*10))*200+250;
  x2:=sin(radians(i*10))*50+250;
  y2:=-cos(radians(i*10))*50+250;
  aPic.Line(x2,y2,x,y,toRgb(i/35*255,0,0),10,1,1000);
Enddo


ProfilerStop();
debugbreak;

aPic.Save("c:\Result","png");
//Для i5 среднее время рисования короткой сглаженной полупрозрачной линии: 6.8 с / 20001 = 0.34 мс.