Картинка

From SunFlurry wiki
Jump to: navigation, search
  Picture.png  Picture (Картинка)
Статус разработки: Реализован
Создание объекта: Create
Визуальный эквив.: Картинка

Объект картинка позволяет создать картинку, изменять ее размеры и положение, рисовать на ней простые фигуры, используя сглаживание, если необходимо, читать ее с диска, сохранять на диск или в память.в требуемом формате. Объект работает как с созданными заново картинками так и с картинками, выводимыми на форму (Form.Picture) или встроенными в электронную таблицу (Электронная таблица SFT). Картинки могут использоваться для различных целей, к примеру, для генерации изображений для web-страниц. При работе с рисованием объектов, координаты точек картинки начинаются с точки (1,1), находящейся в верхнем левом углу картинки и заканчиваются точкой (<Высота картинки>,<Ширина картинки>), находящейся в нижнем правом углу картинки. При использовании функций рисования, не запрещается указывать точки, выходящие за пределы размером картинки.

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

Описание дополнительных возможностей при рисовании:

  • Сглаживание (Antialiasing). Для рисования используется в 16 раз большее пространство, чем оригинальное, после чего создается альфа-наложение полученной картинки на оригинальную, каждая точка результата представлена 16-ю точками буфера (SSAA 4x4). Это позволяет получить гладкую картинку, однако скорость рисования такой картинки будет значительно снижена.
  • Альфа-сопряжение цветов (Alpha blending). Рисуемая картинка становится полупрозрачной, оставляя частично видимыми цвета, которые были под ней до ее рисования. Программа использует целочисленную нотация для указания коэффициента альфа. Сопряжение не используется при коэффициенте равном 1000 (по умолчанию), при 500 рисуемая картинка получает половину интенсивности, при 0, рисуемая картинка не видна. При использовании коэффициента не равного 1000, скорость рисования будет снижена.
  • Масштабирование или ресемплирование (Resampling). При изменении размеров или искажении картинки (повороте, натягивании на четырехугольник и пр.), возникает необходимость растрового сглаживания (когда неизвестна форма объекта) результата операции. Программа поддерживает несколько режимов подобного сглаживания:
    • Без сглаживания -- Самый быстрый режим, однако для текста и точных объектов создает неприглядный результат.
    • Метод ближайшего соседа (Nearest neighbor) -- По быстроте не уступает первому режиму (в случае Resize работает несколько медленнее), однако создает почти такой же неприглядный результат, как и первый режим.
    • Метод билинейной фильтрации (Bilinear) -- Режим создает гладкую картинку, однако работает медленнее, чем первые два режима.
    • Метод бикубической фильтрации (Bicubic) -- Режим создает гладкую картинку, при этом границы объектов (или текста) более выражены по сравнению с билинейной фильтрацией (меньше ощущаемое размытие). Режим работает значительно медленнее билинейной фильтрации и может создавать цветовые артефакты (неверные цвета, которые отсутствовали в оригинальном изображении) на границах резкого изменения цветов.

Пример показывает применение различных алгоритмов масштабирования к фотографическому изображению

Пример показывает минусы бикубической фильтрации для нефотографических изображений (см. Rotate).

При манипуляциях с картинкой, выведенной на экран (на форму или в электронную таблицу), обновление картинки производится после каждого вызова функции рисования, что может существенного замедлить рисование. Чтобы обойти эту проблему, перед рисованием большого количества объектов, необходимо заблокировать обновление картинки на экране с помощью функции Lock, и разблокировать его после выполнения рисования с помощью функции Unlock.

Атрибуты и функции

Идентификатор Статус Тип Визуальная Параметры Описание
Create Реализована Функция Picture.Create(<Ширина полотна (INT)>,<Высота полотна (INT)>,<Цвет полотна (INT)>=0,<Количество бит на точку (INT)>=32):<Новый объект картинки (PICTURE)> Функция создает новый объект картинки с требуемыми размерами и начальным цветом заполнения, с требуемым форматом точки.
Load Реализована Функция Picture.Load(<Путь и имя файла (STRING)>) Функция загружает файл картинки с диска. Файл может находиться как на сервере, так и на локальном диске. Тип картинки будет определен исходя из содержимого файла.
LoadFromBuffer Реализована Функция Picture.LoadFromBuffer(<Источник загрузки (BUFFER)>,<Позиция в буфере для загрузки (INT)>=0) Функция загружает файл картинки из буфера, начиная с указанной позиции или начала буфера. Тип картинки будет определен исходя из данных в буфере.
LoadFromString Реализована Функция Picture.LoadFromString(<Источник загрузки (STRING)>) Функция загружает файл картинки из бинарной строки (строка будет переведена в ANSI, если она хранится в формате UTF-16, поэтому желательно использовать только строки, хранящиеся в ANSI). Тип картинки будет определен исходя из данных строки.
Save Реализована Функция Picture.Save(<Путь и имя файла (STRING)>,<Формат сохранения картинки (STRING)>) Функция сохраняет файл картинки на диск. Файл может быть сохранен как на сервер, так и на локальный диск. Тип сохраненной картинки может быть задан, либо картинка будет сохранена в текущем формате (в формате, в котором она находится в памяти). Если в имени файла опущено расширение, оно будет добавлено автоматически в соответствии с форматом его сохранения.
SaveToBuffer Реализована Функция Picture.SaveToBuffer(<Формат сохранения картинки (STRING)>):<Результат сохранения (BUFFER)> Функция сохраняет файл картинки в новый объект буфера. Тип сохраненной картинки может быть задан, либо картинка будет сохранена в текущем формате (в формате, в котором она находится в памяти).
SaveToString Реализована Функция Picture.SaveToString(<Формат сохранения картинки (STRING)>):<Результат сохранения (STRING)> Функция сохраняет файл картинки в виде ANSI строки. Тип сохраненной картинки может быть задан, либо картинка будет сохранена в текущем формате (в формате, в котором она находится в памяти).
Assign Реализована Функция Picture.Assign(<Копируемая картинка (PICTURE)>) Функция создает копию содержимого картинки аргумента и заменяет ей содержимое текущей картинки. Таким образом можно изменять не только свободную картинку, но и картинку, привязанную к форме, таблице и т.п.
Copy Реализована Функция Picture.Copy():<Новый объект - копия картинки (PICTURE)> Функция создает копию содержимого картинки аргумента. Если картинка хранится в формате, отличном от BMP 8 или 32-бит, такая операция может занять достаточно много времени. В случае форматов 8 или 32-бит BMP, копия будет создана максимально быстро.
Clear Реализована Функция Picture.Clear() Функция удаляет данные картинки из памяти (картинка будет пустой без формата и содержимого, как после вызова функции Picture.Create()).
ConvertToBMP Частичная реализация Функция Picture.ConvertToBMP(<Бит на точку (INT)>=32,<Подобрать цвета палитры (INT)>=0) Функция конвертирует картинку в формат BMP с заданным количеством бит на точку. Для режимов с индексируемыми цветами (<16), возможен подбор палитры цветов (замедление). Поддерживается следующее количество бит на точку: 32, 24, 16, 8, 4, 2 (не поддерживается под Windows), 1.
ConvertTo Реализована Функция Picture.ConvertTo(<Формат картинки (STRING)>,<Параметры>) Функция конвертирует картинку в выбранный формат по его наименованию.
Cut Реализована Функция Picture.Cut(<Координата X верхней левой точки (INT)>,<Координата Y верхней левой точки (INT)>,<Координата X нижней правой точки (INT)>,<Координата Y нижней правой точки (INT)>):<Копия заданного региона исходной картинки (PICTURE)> Функция получает копию заданного региона исходной картинки в виде новой картинки.
Invert Реализована Функция Picture.Invert(<Цвет операции исключающего или (INT)>=_CLR_WHITE) Функция выполняет операцию исключающего или (Xor) с указанным значением над каждой точкой картинки. По умолчанию, выполняется инверсия.
Noise Реализована Функция Picture.Noise(<Координата X верхней левой точки (INT)>,<Координата Y верхней левой точки (INT)>,<Координата X нижней правой точки (INT)>,<Координата Y нижней правой точки (INT)>,<Тип шума (INT)>=0,<Интенсивность шума (REAL)>=50) Функция добавляет шум указанного вида в требуемом количестве в заданный прямоугольник картинки.
FlipX Реализована Функция Picture.FlipX() Функция разворачивает картинку по горизонтали вокруг оси Y.
FlipY Реализована Функция Picture.FlipY() Функция разворачивает картинку по вертикали вокруг оси X.
Lock Реализована Функция Picture.Lock() Функция запрещает обновление картинки на экране при ее изменении до вызова функции Unlock. Имеет смысл использования только для картинок, выведенных на форму или в электронную таблицу.
Unlock Реализована Функция Picture.Unlock() Функция разрешает обновление картинки на экране при ее изменении, запрещенное ранее функцией Lock.
IsLocked Реализована Функция Picture.IsLocked():<Запрещено ли обновление картинки на экране (INT)> Функция возвращает флаг запрета обновления картинки на экране.
Width Реализована Атрибут Picture.Width:<Ширина картинки в точках (INT)> Функция возвращает или изменяет ширину картинки в точках.
Height Реализована Атрибут Picture.Height:<Высота картинки в точках (INT)> Функция возвращает или изменяет высоту картинки в точках.
FormatStr Реализована Атрибут Picture.FormatStr:<Наименование формата картинки (STRING)> Функция возвращает наименование формата, в котором хранится картинка. Возможны следующие значения: BMP, JPG, PNG, GIF и пустая строка, если контейнер картинки пуст (картинка не создана и не загружена).
Rotate Реализована Функция Picture.Rotate(<Количество градусов поворота (REAL)>,<Цвет фона для новых точек (INT)>=0,<Алгоритм масштабирования (INT)>=0) Функция поворачивает картинки на указанный в градусах угол поворота. Если угол поворота целый и кратный 90 градусам, функция использует быстрый поворот, второй и третий аргументы не требуются. В любом другом случае, размеры картинки будут изменены с тем, чтобы полученный при повороте прямоугольник исходной картинки был вписан в полученную, добавленные точки будут иметь цвет, заданный вторым аргументом, при повороте будет применен требуемый алгоритм масштабирования (resampling).
Resize Реализована Функция Picture.Resize(<Ширина получаемой картинки (INT)>,<Высота получаемой картинки (INT)>,<Алгоритм масштабирования (INT)>=0) Функция изменяет размеры картинки до указанных. При изменении размеров будет применен требуемый алгоритм масштабирования (resampling).
Pixel Реализована Функция Picture.Pixel(<Координата X (INT)>,<Координата Y (INT)>,<Устанавливаемый цвет (INT)>):<Текущий цвет (INT)> Функция получает и, если необходимо, изменяет цвет точки с указанными координатами. Функция поддерживает форматы картинки: BMP 8 и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Line Реализована Функция Picture.Line(<Координата X точки 1 (INT)>,<Координата Y точки 1 (INT)>,<Координата X точки 2 (INT)>,<Координата Y точки 2 (INT)>,<Цвет линии (INT)>=0,<Ширина линии (REAL)>=1,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует линию по координатам ее начала и конца. Для линии может быть задана толщина, цвет, коэффициент альфа, при рисовании линии может использоваться сглаживание. Функция поддерживает форматы картинки: BMP 8 (без сглаживания и альфа) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Rectangle Реализована Функция Picture.Rectangle(<Координата X верхней левой точки (INT)>,<Координата Y верхней левой точки (INT)>,<Координата X нижней правой точки (INT)>,<Координата Y нижней правой точки (INT)>,<Цвет обрамления (INT)>=-1,<Цвет заливки (INT)>=-1,<Ширина обрамления (INT)>=1,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует прямоугольник с оптимизацией по скорости рисования. Прямоугольник может иметь обрамление (рамку) (по умолчанию не имеет), и может быть залит определенным цветом (по умолчанию заливка не производится). Также может задаваться ширина обрамления и коэффициент альфа. Функция поддерживает форматы картинки: BMP 8 (без альфа) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Triangle Планируется Функция Picture.Triangle(<Координата X точки 1 (INT)>,<Координата Y точки 1 (INT)>,<Координата X точки 2 (INT)>,<Координата Y точки 2 (INT)>,<Координата X точки 3 (INT)>,<Координата Y точки 3 (INT)>,<Цвет обрамления (INT)>=-1,<Цвет заливки (INT)>=-1,<Ширина обрамления (INT)>=1,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует произвольный треугольник. Координаты углов могут находиться вне картинки. Треугольник может иметь обрамление (рамку) (по умолчанию не имеет), и может быть залит определенным цветом (по умолчанию заливка не производится). Также может задаваться ширина обрамления, коэффициент альфа и сглаживание. Функция поддерживает форматы картинки: BMP 8 (без альфа и сглаживания) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Quadrangle Планируется Функция Picture.Quadrangle(<Координата X точки 1 (INT)>,<Координата Y точки 1 (INT)>,<Координата X точки 2 (INT)>,<Координата Y точки 2 (INT)>,<Координата X точки 3 (INT)>,<Координата Y точки 3 (INT)>,<Координата X точки 4 (INT)>,<Координата Y точки 4 (INT)>,<Цвет обрамления (INT)>=-1,<Цвет заливки (INT)>=-1,<Ширина обрамления (INT)>=1,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует произвольный четырехугольник. Координаты углов могут находиться вне картинки, фигура может самопересекаться. Четырехугольник может иметь обрамление (рамку) (по умолчанию не имеет), и может быть залит определенным цветом (по умолчанию заливка не производится). Также может задаваться ширина обрамления, коэффициент альфа и сглаживание. Функция поддерживает форматы картинки: BMP 8 (без альфа и сглаживания) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Polygon Планируется Функция Picture.Polygon(<Список с координатами точек (LIST)>,<Цвет обрамления (INT)>=-1,<Цвет заливки (INT)>=-1,<Ширина обрамления (INT)>=1,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует произвольный многоугольник. Координаты углов заданы списком и могут находиться вне картинки. Каждая точка задается двумя последовательными элементами списка. Первой следует координата X, затем координата Y. Фигура не может самопересекаться, координаты углов должны следовать упорядоченно в порядке их соединения между собой. Последняя точка соединяется с первой. Многоугольник может иметь обрамление (рамку) (по умолчанию не имеет), и может быть залит определенным цветом (по умолчанию заливка не производится). Также может задаваться ширина обрамления, коэффициент альфа и сглаживание. Функция поддерживает форматы картинки: BMP 8 (без альфа и сглаживания) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Ellipse Реализована Функция Picture.Ellipse(<Координата X верхней левой точки (INT)>,<Координата Y верхней левой точки (INT)>,<Координата X нижней правой точки (INT)>,<Координата Y нижней правой точки (INT)>,<Цвет заливки (INT)>=-1,<Цвет обрамления (INT)>=0,<Ширина обрамления (REAL)>=0,<Использовать сглаживание (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000,<Угол поворота в радианах (INT)>=0,<Начальный угол дуги в радианах (INT)>,<Конечный угол дуги в радианах (INT)>) Функция рисует эллипс, вписанный в указанный прямоугольник. Координаты углов прямоугольника могут находиться вне картинки. Эллипс может иметь обрамление (рамку) (по умолчанию толщина рамки равна нулю, т.е. рамка отсутствует), и может быть залит определенным цветом (по умолчанию заливка не производится). Также может задаваться ширина обрамления, коэффициент альфа и сглаживание. Функция также может рисовать открытый эллипс по угловым координатам начала и конца его дуги. Функция поддерживает форматы картинки: BMP 8 (без альфа и сглаживания) и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит).
Text Реализована Функция Picture.Text(<Координата X верхней левой точки текста (INT)>,<Координата Y верхней левой точки текста (INT)>,<Текст (STRING)>,<Шрифт текста (STRING)>="Consolas|||0|",<Прозрачность (INT)>=1,<Прямоугольник ограничения (LIST,STRING)>="",<Цвет фона (INT)>=_CLR_WHITE,<Метод сглаживания (INT)>=1) Функция выводит текст, заданный третьим аргументом, в произвольную точку картинки. Свойства текста включают шрифт, его размер, его параметры, цвет текста, угол поворота текста. Текст может иметь прозрачный фон, либо будет использован цвет фона, задаваемый в функции. Текст можно ограничить прямоугольной областью, для которой он будет выводиться, все этой области точки картинки не будут изменены. Функция поддерживает форматы картинки: BMP 8 и 32 бит (если картинка имеет другой формат, она будет преобразована в BMP 32-бит, сглаживание может не работать с картинками BMP 8 бит).
TextWidth Реализована Функция Picture.TextWidth(<Текст (STRING)>,<Шрифт текста (STRING)>="Consolas|||0|"):<Ширина текста в точках (INT)> Функция находит ширину текста в точках (если бы текст был выведен на экран). Свойства текста включают шрифт, его размер, его параметры, цвет текста. Функция может быть вызвана непосредственно из интерфейса.
TextHeight Реализована Функция Picture.TextHeight(<Текст (STRING)>,<Шрифт текста (STRING)>="Consolas|||0|"):<Высота текста в точках (INT)> Функция находит высоту текста в точках (если бы текст был выведен на экран). Свойства текста включают шрифт, его размер, его параметры, цвет текста. Функция может быть вызвана непосредственно из интерфейса.
TextWidthAndHeight Реализована Функция Picture.TextWidthAndHeight(<Текст (STRING)>,<Шрифт текста (STRING)>="Consolas|||0|",<Ширина текста в точках (INT)>,<Высота текста в точках (INT)>) Функция находит и передает аргументам-переменным ширину и высоту текста в точках (если бы текст был выведен на экран). Свойства текста включают шрифт, его размер, его параметры, цвет текста. Функция может быть вызвана непосредственно из интерфейса. Функция может использоваться вместо двух вызовов TextWidth и TextHeight для ускорения.
DrawPicture Реализована Функция Picture.DrawPicture(<Картинка-приемник (PICTURE)>,<Координата X в приемнике (INT)>,<Координата Y в приемнике (INT)>,<Ширина рисуемой картинки (INT)>,<Высота рисуемой картинки (INT)>,<Операция рисования (INT)>=0,<Прозрачный цвет для режима рисования с маской или картинка-маска (PICTURE,INT)>=-1,<Координаты региона отсечения (LIST,STRING)>,<Угол поворота рисования (REAL)>=0,<Алгоритм масштабирования (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция рисует текущую картинку в указанной области картинки-приемника. Функция позволяет задать режим рисования, угол поворота картинки, а также алгоритм масштабирования. Рисуемая картинка может иметь прозрачный слой (для BMP и PNG), прозрачность может быть задана определенным цветом, коэффициентом альфа или картинкой маски.
TransformPicture Реализована Функция Picture.TransformPicture(<Картинка-приемник (PICTURE)>,<Координата X в приемнике верхней левой точки источника (INT)>,<Координата Y в приемнике верхней левой точки источника (INT)>,<Координата X в приемнике верхней правой точки источника (INT)>,<Координата Y в приемнике верхней правой точки источника (INT)>,<Координата X в приемнике нижней правой точки источника (INT)>,<Координата Y в приемнике нижней правой точки источника (INT)>,<Координата X в приемнике нижней левой точки источника (INT)>,<Координата Y в приемнике нижней левой точки источника (INT)>,<Операция рисования (INT)>=0,<Алгоритм масштабирования (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция натягивает текущую картинку на заданный выпуклый четырехугольник картинки-приемника. Функция также позволяет указать алгоритм масштабирования и коэффициент альфа-сопряжения. Исходная картинка не изменяется.
FastCopyPicture Планируется Функция Picture.FastCopyPicture(<Картинка-приемник (PICTURE)>,<Прозрачный цвет для режима рисования с маской или картинка-маска (PICTURE,INT)>=-1,<Координата X в приемнике (INT)>,<Координата Y в приемнике (INT)>,<Координата X верхней левой точки источника (INT)>,<Координата Y верхней левой точки источника (INT)>,<Ширина области источника (INT)>,<Высота области источника (INT)>,<Операция рисования (INT)>=0,<Коэффициент альфа-сопряжения (INT)>=1000) Функция получает регион текущей картинки и с помощью дополнительной картинки-маски рисует его в требуемом месте картинки-приемника. В картинке-маске используется синий канал для получения альфа-сопряжения (прозрачности) точки результата. При этом, значение канала, равное 255, означает, что точка не будет прозрачной, 0, -- что точка не будет видимой. Дополнительный коэффициент альфа-сопряжения накладывается после использования цвета маски. В отличие от DrawPicture процесс оптимизирован по скорости для случаев, когда маска и альфа-коэффициент не используются, кроме того, функция получает определенную область источника, а не использует всю картинку, как DrawPicture.