Picture.Text

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
  Text (Изменение картинки)
Объект:Картинка
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Нет
Исключения:Невозможно превратить в число, строку, неверные параметры.
Визуальность:Нет

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

Синтаксис

Picture.Text(<Координата X верхней левой точки текста (INT)>,<Координата Y верхней левой точки текста (INT)>,<Текст (STRING)>,<Шрифт текста (STRING)>="Consolas|||0|",<Прозрачность (INT)>=1,<Прямоугольник ограничения (LIST,STRING)>="",<Цвет фона (INT)>=_CLR_WHITE,<Метод сглаживания (INT)>=1)

Аргументы

  • <Координата X верхней левой точки текста (INT)>,<Координата Y верхней левой точки текста (INT)> - Аргументы задают координату верхней левой точки отображения текста.
  • <Текст (STRING)> - Текст, который требуется отобразить. Текст может включить международные символы. Отображение символов сильно зависит от используемого шрифта, некоторые шрифты могут не поддерживать определенные международные символы.
  • <Шрифт текста (STRING)> (необязательный аргумент) Аргумент задает параметры и наименование шрифта, которым будет сгенерирован текст, в формате <Название шрифта>[|<Размер>[|<Параметры шрифта>[|<Цвет шрифта>[|<Градус угла поворота шрифта>[|<Режим сглаживания шрифта>]]]]]. По умолчанию, используется следующее значение аргумента: Consolas|8||0|0|1
  • <Прозрачность (INT)> (необязательный аргумент) Аргумент задает режим заливки заднего фона текста определенным цветом при выводе текста. По умолчанию (1), заливка не производится.
  • <Прямоугольник ограничения (LIST,STRING)> (необязательный аргумент) Аргумент задает прямоугольник, внутри которого текст будет виден, вне прямоугольника точки текста выведены не будут (прямоугольник ограничения). По умолчанию, текст не будет ограничен. Аргумент может представлять собой список координат, включающий последовательно 4 координаты: левую координату (x1), верхнюю координату (y1), правую координату (x2) и нижнюю координату (y2); либо строку в формате "<Левая координата прямоугольника>,<Верхняя координата прямоугольника>,<Правая координата прямоугольника>,<Нижняя координата прямоугольника>".
  • <Цвет фона (INT)> (необязательный аргумент) Аргумент задает цвет фона текста, если текст выводится в режиме видимого фона. Используется 24-битная нотация цвета. По умолчанию используется белый цвет (_CLR_WHITE).
  • <Метод сглаживания (INT)> (необязательный аргумент) Аргумент задает метод сглаживания текста, он также может быть задан в параметрах шрифта (заданный здесь метод имеет приоритет над установками шрифта). Аргумент может принимать следующие значения:
    • 0 -- Используется режим по-умолчанию заданный в системе (чаще всего, это ClearType, что может быть нежелательно для картинок, над которыми происходят дальнейшие манипуляции)
    • 1 (по умолчанию) -- Используется стандартное сглаживание (antialiasing)
    • 2 -- Используется сглаживание типа ClearType
    • 3 -- Сглаживание не будет использоваться

Примеры

Картинка, сгенерированная примером
//Пример генерирует показанную на рисунке картинку
aPic:=Picture.Create(400,400);
aPic.Rectangle(1,1,200,200,,_CLR_RED);
aPic.Rectangle(201,1,400,200,,_CLR_BLUE);
aPic.Rectangle(1,201,200,400,,_CLR_GREEN);
aPic.Rectangle(201,201,400,400,,_CLR_YELLOW);
aPic.Text(6,6,"1","Tahoma|40|B|"+DecToBase(_CLR_YELLOW,16),,,,3);
aPic.Text(206,6,"2","Tahoma|40|B|"+DecToBase(_CLR_GREEN,16),,,,3);
aPic.Text(6,206,"3","Tahoma|40|B|"+DecToBase(_CLR_BLUE,16),,,,3);
aPic.Text(206,206,"4","Tahoma|40|B|"+DecToBase(_CLR_RED,16),,,,3);
aPic.Rectangle(5,5,aPic.Width-5,aPic.Height-5,_CLR_RED);
aPic.Save("c:\Result","png");
Картинка, сгенерированная примером
//Пример использования угла поворота текста

  Function _RotX(x,y,alpha)  
    Exit x*Cos(radians(alpha))+y*Sin(radians(alpha));
  EndFunction

  Function _RotY(x,y,alpha)
    Exit -x*Sin(radians(alpha))+y*Cos(radians(alpha));
  EndFunction

aPic:=Picture.Create(560,120,toRgb(255,255,255),32);
Стр:="ВРАЩЕНИЕ";
y:=5;
x:=5;
a:=0;
For i:=1 To Length(Стр) Do
  lx:=0;ly:=0;
  Стр1:=Mid(Стр,i,1);
  aPic.TextWidthAndHeight(Стр1,"Tahoma|60|B|",lx,ly);
  //Находим смещение точки центра буквы после поворота относительно текущей точки центра буквы
  lx2:=lx\2;
  ly2:=ly\2;
  dx:=_RotX(lx2,ly2,a)-lx2;
  dy:=_RotY(lx2,ly2,a)-ly2;
  
  aPic.Text(x-dx,y-dy,Стр1,"Tahoma|60|B|"+DecToBase(ToRgb(255*i/Length(Стр),0,0),16)+"|"+a);

  //Не совсем верно, так как после вращения "ширина" буквы стала больше 
  x:=x+lx+5;
  a:=Round(i/Length(Стр)*90);
EndDo;

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