Jump to content

Новые методы по работе с TfgBitmap и EXIF в 1.16.0.0


Yaroslav Brovin

1,851 views

Добрый день, уважаемые разработчики. 

Продолжаем обзор новых возможностей 1.16.0.0 и в этой статье поговорим об улучшениях связанных с изображениями.

В этом релизе мы добавили вспомогательные методы для решения часто встречаемых задач: таких как кадрирование, превью, изменение размера, повороты и перекрашивание. 

Для того, чтобы воспользоваться методами необходимо подключить модуль "FGX.Bitmap.Helpers" в секцию uses

Кадрирование - Crop

Данные методы позволяют вырезать из исходного битмапа указанную область.

Предлагается два метода:

  1. CreateCropped - создает новый экземпляр битмапа, не изменяя исходный
  2. Crop - модифицирует исходный экземпляр битмапа.
/// <summary>
///   Создает новое изображение сформированное из указанной области. <c>ARegion</c> - физические координаты области.
/// </summary>
function CreateCropped(const ARegion: TRect): TfgBitmap;

/// <summary>Выполняет вырезание указанной области изображения. <c>ARegion</c> - физические координаты области.</summary>
/// <remarks>
///   <para>
///     Если координаты области <c>ARegion</c> выходят за пределы физического размера изоюбражения, то они отсекаются
///     по размеру изображения.
///   </para>
///   <para>
///     Если результирующая область имеет нулевой размер, то текущий битмап принимает нулевой размер.
///   </para>
/// </remarks>
procedure Crop(const ARegion: TRect);

Повороты - Rotate

Методы поворота позволяют повернуть изображение на углы (90 - 180 - 270) градусов.

Предлагается два метода:

  1. CreateRotated - создает новый экземпляр битмапа, не изменяя исходный
  2. Rotate - модифицирует исходный экземпляр битмапа и выполняет поворот.
/// <summary>Созадет новое изоюражение и поворачивает его на указанный угол.</summary>
function CreateRotated(const AAngle: TfgRotation): TfgBitmap;

/// <summary>Поворачивает изображение на указанный угол.</summary>
procedure Rotate(const AAngle: TfgRotation);

Отражение - Flip

Два метода по симметричному отражению исходного экземпляра битмапа относительно вертикальной и горизонтальной осей.

/// <summary>Симметричное отражение изображения по горизонтальной оси.</summary>
procedure FlipHorizontal;

/// <summary>Симметричное отражение изображения по вертикальной оси.</summary>
procedure FlipVertical;

Создание превью - Thumbnail

Очень часто требуется получить из исходного битмапа большого размера превью ограниченного размера. Для этого мы предлагаем метод:

/// <summary>
///   Создает миниатюрное изображение, которое может использовать в виде превью. Изображение вписывается в
///   указанный размер с сохранение пропорций и центрируется.
/// </summary>
/// <remarks>Если передается нулевой размер, то метод поднимает исключение.</remarks>
function CreateThumbnail(const ASize: TSize): TfgBitmap;

Перекрашивание - Tint

Методы по перекрашиванию исходного экземпляра изображения в указанный цвет.

Предлагается два метода:

  1. CreateTinted - создает новый экземпляр битмапа, не изменяя исходный
  2. ApplyTintColor - модифицирует исходный экземпляр битмапа и выполняет поворот.
/// <summary>Создает новое изображение и применяет указанный оттенок.</summary>
function CreateTinted(const ATintColor: TAlphaColor): TfgBitmap;

/// <summary>Задает оттенок изображения. Операция не отменяемая.</summary>
procedure ApplyTintColor(const ATintColor: TAlphaColor);

Мета информация EXIF

Помимо вспомогательных методов по трансформации битмапов зачастую требуется выполнить нормализацию угла поворота изображения. Когда пользователь делает снимок с камеры, то камера сохраняет файл в ориентации фото сенсора, который не обязательно совпадает с текущей ориентаций экрана. Дополнительно, камера используя мета информацию EXIF помещает в нее ориентацию съемки фотографии. Поэтому при попытке загрузить такое изображение в FGX Native битмап будет отображаться в ориентации съемки с сенсора. Для того, чтобы выполнить коррекцию угла поворота для отображения мы предлагаем новое API для извлечения EXIF информации из файла. Типовой пример использования может выглядеть так:

uses  
  FGX.Exif;
  
var 
  Properties: TfgExifProperties;
  
  if TfgExif.TryLoad(AFileName, Properties) then
  begin
    // Properties.Rotation;
    // Properties.Rotation.ToRotation - возвращает TfgRotation, который можно передать в метод TfgBitmap.Rotate.
  end;

На текущий момент мы извлекаем только ориентацию. Но если вам требуются получать дополнительную EXIF информацию, дайте знать, мы добавим.

Уверены данные нововведения позволят вам сократить ваш код.

Спасибо за внимание

  • Like 7

2 Comments


Recommended Comments

Цитата

/// <summary>Созадет новое изоюражение и поворачивает его на указанный угол.</summary>

function CreateRotated(const AAngle: TfgRotation): TfgBitmap;

@Yaroslav Brovin, 2 опечатки в комментарии к методу

  • Thanks 1
Link to comment
  • Administrators
4 hours ago, Игорь Мелентьев said:

@Yaroslav Brovin, 2 опечатки в комментарии к методу

Спасибо 🙂 Сразу виден глаз опытного QA 😁

Link to comment
Guest
Add a comment...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...