новинка Новые методы по работе с TfgBitmap и EXIF в 1.16.0.0
Добрый день, уважаемые разработчики.
Продолжаем обзор новых возможностей 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 информацию, дайте знать, мы добавим.
Уверены данные нововведения позволят вам сократить ваш код.
Спасибо за внимание
- 7
2 Comments
Recommended Comments