Jump to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Продолжаем обзор новых возможностей 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 информацию, дайте знать, мы добавим.

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

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

2 Comments

Recommended Comments

Цитата

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

function CreateRotated(const AAngle: TfgRotation): TfgBitmap;

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

  • Administrators
4 hours ago, Игорь Мелентьев said:

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

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

Recently Browsing 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.