Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Чтение и запись AVIF и HEIC в Lazarus: новый компонент для работы с современными форматами изображений

Delphi , Компоненты и Классы , TImage и TImageList

 

Современный веб и мобильный мир активно переходят на новые, более эффективные форматы изображений, такие как AVIF и HEIC. AVIF (AV1 Image File Format) предлагает превосходное качество при меньшем размере файла по сравнению с JPEG, а HEIC (High Efficiency Image Container) широко используется на устройствах Apple для хранения фотографий и видео, обеспечивая значительную экономию места. Однако, поддержка этих форматов в классических инструментах разработки, особенно в среде Lazarus и Delphi, зачастую оставляет желать лучшего.

Эта статья посвящена возможности работы с AVIF и HEIC в Lazarus, а также ознакомит с новым компонентом, упрощающим эту задачу.

Проблема: Отсутствие встроенной поддержки

Стандартные библиотеки Object Pascal, используемые в Lazarus и Delphi, не содержат встроенной поддержки для декодирования и кодирования AVIF и HEIC. Это означает, что для работы с этими форматами необходимо использовать внешние библиотеки или API. Прямая работа с бинарными данными формата может быть сложной и трудоемкой, требующей глубокого понимания спецификаций этих форматов.

Решение: Компонент ImageCodec

К счастью, разработаны компоненты, которые решают эту проблему. Один из таких – ImageCodec, который предоставляет удобный интерфейс для работы с различными форматами изображений, включая AVIF и HEIC. Этот компонент является оберткой над библиотеками libavif (для AVIF) и libheif (для HEIC), что позволяет использовать их функциональность из Object Pascal кода.

Установка и настройка ImageCodec

Установка ImageCodec обычно включает в себя следующие шаги:

  1. Установка libavif и libheif: Эти библиотеки необходимо установить отдельно. Способ установки зависит от вашей операционной системы. Например, в Linux можно использовать менеджер пакетов (apt, yum, etc.), а в Windows – скачав предварительно скомпилированные библиотеки. Важно убедиться, что библиотеки доступны в системе и находятся в пути, доступном для компилятора.
  2. Подключение ImageCodec в Lazarus: Скачайте исходный код компонента ImageCodec (обычно доступен на GitHub или других ресурсах). Добавьте файлы компонента в ваш проект Lazarus. В настройках проекта укажите пути к заголовочным файлам и библиотекам libavif и libheif.
  3. Настройка uses: В вашем коде добавьте uses ImageCodec;

Пример использования ImageCodec для чтения AVIF изображения:

uses
  System.SysUtils,
  System.Classes,
  ImageCodec;

procedure ReadAVIFImage(const FileName: string; var Image: TBitmap);
var
  AVIFDecoder: TAVIFDecoder;
begin
  AVIFDecoder := TAVIFDecoder.Create;
  try
    if AVIFDecoder.LoadFromFile(FileName) then
    begin
      Image := AVIFDecoder.GetBitmap;
    end
    else
    begin
      // Обработка ошибки
      ShowMessage('Не удалось загрузить AVIF изображение: ' + FileName);
    end;
  finally
    AVIFDecoder.Free;
  end;
end;

// Пример использования
procedure TForm1.Button1Click(Sender: TObject);
var
  MyBitmap: TBitmap;
begin
  ReadAVIFImage('my_image.avif', MyBitmap);
  if MyBitmap <> nil then
  begin
    Image1.Bitmap.Assign(MyBitmap);
    MyBitmap.Free;
  end;
end;

Пример использования ImageCodec для записи HEIC изображения:

uses
  System.SysUtils,
  System.Classes,
  ImageCodec;

procedure WriteHEICImage(const FileName: string; const Image: TBitmap);
var
  HEICEncoder: THEICEncoder;
begin
  HEICEncoder := THEICEncoder.Create;
  try
    if HEICEncoder.EncodeBitmap(Image, FileName) then
    begin
      // Успешная запись
    end
    else
    begin
      // Обработка ошибки
      ShowMessage('Не удалось сохранить HEIC изображение: ' + FileName);
    end;
  finally
    HEICEncoder.Free;
  end;
end;

// Пример использования
procedure TForm1.Button2Click(Sender: TObject);
var
  MyBitmap: TBitmap;
begin
  MyBitmap := TBitmap.Create;
  try
    MyBitmap.LoadFromFile('my_image.bmp'); // Загрузка изображения для сохранения
    WriteHEICImage('my_image.heic', MyBitmap);
  finally
    MyBitmap.Free;
  end;
end;

Альтернативные решения:

Хотя ImageCodec является удобным решением, существуют и альтернативные подходы:

  • Использование сторонних библиотек напрямую: Можно работать с libavif и libheif напрямую, используя C++ API и Foreign Function Interface (FFI) в Object Pascal. Этот подход предоставляет больше контроля, но требует более глубоких знаний C++ и Object Pascal FFI.
  • Использование графических библиотек, поддерживающих AVIF/HEIC: Некоторые графические библиотеки, такие как Gdk (используемая в GTK) или Qt, могут иметь встроенную поддержку AVIF и HEIC. Однако, интеграция таких библиотек в Lazarus/Delphi проект может быть сложной.
  • Использование онлайн API: Можно использовать онлайн API для конвертации изображений из AVIF/HEIC в другие форматы, такие как JPEG или PNG. Этот подход позволяет избежать необходимости установки внешних библиотек, но требует подключения к интернету и может быть платным.

Заключение

Работа с современными форматами изображений, такими как AVIF и HEIC, в Lazarus и Delphi становится все более важной. Компонент ImageCodec предоставляет удобный и эффективный способ интеграции этих форматов в ваши приложения. Альтернативные решения также существуют, но требуют больше усилий и знаний. Выбор оптимального подхода зависит от ваших конкретных потребностей и уровня опыта. Надеемся, что эта статья поможет вам успешно работать с AVIF и HEIC в ваших проектах на Object Pascal.

Создано по материалам из источника по ссылке.

Статья посвящена работе с современными форматами изображений AVIF и HEIC в среде Lazarus и Delphi, представляя компонент ImageCodec как удобное решение для упрощения этой задачи.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TImage и TImageList ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 15:51:00/0.0036258697509766/0