![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
Как исправить проблему с ориентацией изображений в FMX Delphi 11Delphi , Графика и Игры , ИзображенияВ процессе разработки приложений на Delphi с использованием FireMonkey (FMX), часто возникает проблема с неправильной ориентацией изображений, загруженных из файлов с EXIF-данными. В частности, TBitmap.LoadFromFile() в FMX игнорирует ориентацию изображения, указанную в EXIF-заголовке, и загружает изображение с его физическими размерами, что может привести к тому, что изображение будет отображаться неправильно (например, в портретном формате, но с размерами в ландшафтном). В этой статье мы рассмотрим проблему и предложим несколько решений для корректного отображения изображений с учетом ориентации EXIF. ПроблемаПроблема заключается в том, что Delphi FMX не учитывает ориентацию изображения, указанную в EXIF-заголовке. Это особенно заметно при загрузке изображений, созданных в портретном режиме на смартфонах, где изображение может иметь физические размеры, соответствующие ландшафтному формату, но фактически оно должно быть отображено в портретном формате. Пример:
В этом примере изображение будет загружено с физическими размерами, указанными в файле, и не будет отображено в корректной ориентации. РешениеДля решения этой проблемы необходимо самостоятельно извлекать информацию о ориентации из EXIF-заголовка и применять соответствующие преобразования к изображению после его загрузки. Использование CCR-ExifCCR-Exif (https://github.com/Wolfcast/ccr-exif) — это известная библиотека для работы с EXIF-данными в Delphi. Она может читать и писать EXIF-теги и предоставляет возможность извлечь информацию о ориентации изображения. Пример использования CCR-Exif:
Создание собственного решенияЕсли вам не нужно использовать всю функциональность CCR-Exif, вы можете создать собственную утилиту для извлечения информации о ориентации из EXIF-заголовка и применения необходимых преобразований к изображению. Пример создания собственной утилиты:
Применение преобразований к изображениюПосле извлечения информации о ориентации из EXIF-заголовка, вы можете применить соответствующие преобразования к изображению с использованием TBitmapSurface. Пример применения преобразований:
Альтернативное решениеЕсли вам нужно использовать VCL, вы можете адаптировать предложенные выше решения для работы с TBitmap и TJPEGImage. В VCL нет класса TBitmapSurface, поэтому вам нужно будет применить преобразования к изображению самостоятельно. Пример использования VCL:
ЗаключениеПроблема с неправильной ориентацией изображений в FMX Delphi 11 может быть решена путем извлечения информации о ориентации из EXIF-заголовка и применения соответствующих преобразований к изображению. В этой статье мы рассмотрели несколько решений, включая использование CCR-Exif и создание собственной утилиты. Также были предложены альтернативные решения для VCL. В статье рассматривается проблема некорректного отображения изображений в Delphi FireMonkey (FMX) из-за игнорирования EXIF-данных, описывающих ориентацию изображения, и предлагаются решения для её устранения. Комментарии и вопросыПолучайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта. :: Главная :: Изображения ::
|
||||
©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007 |