
Добрый день, уважаемые разработчики.
Продолжаем обзор новых возможностей 1.16.0.0 и в этой статье поговорим об улучшениях связанных с изображениями.
В этом релизе мы добавили вспомогательные методы для решения часто встречаемых задач: таких как кадрирование, превью, изменение размера, повороты и перекрашивание.
Для того, чтобы воспользоваться методами необходимо подключить модуль "FGX.Bitmap.Helpers" в секцию uses.
Кадрирование - Crop
Данные методы позволяют вырезать из исходного битмапа указанную область.
Предлагается два метода:
- CreateCropped - создает новый экземпляр битмапа, не изменяя исходный
- 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) градусов.
Предлагается два метода:
- CreateRotated - создает новый экземпляр битмапа, не изменяя исходный
- 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
Методы по перекрашиванию исходного экземпляра изображения в указанный цвет.
Предлагается два метода:
- CreateTinted - создает новый экземпляр битмапа, не изменяя исходный
- 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 информацию, дайте знать, мы добавим.
Уверены данные нововведения позволят вам сократить ваш код.
Спасибо за внимание
Recommended Comments