Picture.Ellipse

From SunFlurry wiki
Revision as of 08:52, 7 February 2021 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
  Ellipse (Изменение картинки)
Объект:Картинка
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, неверные параметры.
Визуальность:Нет

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

Синтаксис

Picture.Ellipse(<Координата X верхней левой точки (INT)>,<Координата Y верхней левой точки (INT)>,<Координата X нижней правой точки (INT)>,<Координата Y нижней правой точки (INT)>,<Цвет заливки (INT)>=-1,<Цвет обрамления (INT)>=0,<Ширина обрамления (REAL)>=0,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000,<Угол поворота в радианах (INT)>=0,<Начальный угол дуги в радианах (INT)>,<Конечный угол дуги в радианах (INT)>)

Аргументы

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

Примеры

Картинка-результат работы примера
//Пример демонстрирует несколько секций эллипсов на небольшой картинке
//Совмещение секций создает секторные диаграммы
aPic:=Picture.Create(560,240,toRgb(255,255,255),32);

bt:=30;
base:=45;
lx:=50;
ly:=100;

dx:=lx+10;
While base<=360 Do
  aPic.Ellipse(-lx+dx,-ly+120,lx+dx,ly+120,toRgb(255,0,0),toRgb(250,100,100),30,1,,radians(0),radians(base+bt),radians(45));
  aPic.Ellipse(-lx+dx,-ly+120,lx+dx,ly+120,toRgb(0,0,255),toRgb(0,155,255),30,1,,radians(0),radians(45),radians(base+bt));

  base:=base\90*90+90;
  dx:=dx+lx*2+10;
EndDo;


aPic.Save("c:\Result","png");


Картинка-результат работы примера
//Пример рисует 100 случайных дуг с разной шириной и альфа-коэффициентом
randomize(1);
aPic:=Picture.Create(500,500,toRgb(255,255,255),32);
for i:=1 to 100 do
  x:=random(500)+1;
  y:=random(500)+1;
  d:=random*5+0.2;
  alp:=random(360);
  b:=random(300)+1;
  a:=random(300)+1;
  alpha:=random(1001);
  a1:=random(45);
  a2:=random(90)+270;

  aPic.Ellipse(-a+x,-b+y,a+x,b+y,,toRgb(255,0,0),d,1,alpha,radians(alp),radians(a1),radians(a2));
enddo;

aPic.Save("c:\Result2","png");