Blog. Just Blog

Конвертирование изображений с помощью библиотеки FreeImage

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Образ мышления: Assembler | Автор: ManHunter
Конвертирование изображений с помощью библиотеки FreeImage
Конвертирование изображений с помощью библиотеки FreeImage

FreeImage - бесплатная библиотека с открытым исходным кодом, предназначенная для работы с изображениями. С ее помощью можно менять размеры изображений, накладывать на них различные эффекты, поворачивать, обрезать, а главное, библиотека FreeImage умеет загружать изображения разных форматов и затем конвертировать их в другие. При этом не требуется установка каких-нибудь кодеков. За удобство пользования приходится платить тем, что размер вашего приложения увеличивается как минимум на 2 мегабайта, и то если упаковать dll. Для Ассемблера это много, для современных приложений, наверное, нормально.

Разберем наиболее востребованное действие - конвертирование изображений. Для работы требуются некоторые константы. Порядок использования и значения прочих констант можно посмотреть в официальной документации и в заголовочных файлах библиотеки.
  1. FIF_PNG  = 13
  2. FIF_WEBP = 35
  3. FIF_JPEG = 2
  4. FIF_BMP  = 0
  5.  
  6. PNG_DEFAULT        = 0
  7. WEBP_LOSSLESS      = 0x100
  8. JPEG_QUALITYSUPERB = 0x80
  9. BMP_DEFAULT        = 0
Переходим к программированию. Операций тут получается совсем немного. Как написано в документации, вызывать функции инициализации и деинициализации не надо, они вызываются автоматически. Что касается нужных нам функций. Первая из полезных - FreeImage_Validate для проверки соответствия выбранного файла требуемому формату. Дальше одна из основных функций - FreeImage_Load, отвечающая за загрузку изображения из файла. И последняя по списку, но не по важности, - FreeImage_Save для сохранения загруженного изображения в новом формате.
  1.         ; Проверить исходный файл на соответствие формату
  2.         invoke  FreeImage_Validate,FIF_PNG,fname_in
  3.         cmp     eax,TRUE
  4.         jne     loc_exit
  5.  
  6.         ; Загрузить исходный файл
  7.         invoke  FreeImage_Load,FIF_PNG,fname_in,PNG_DEFAULT
  8.         or      eax,eax
  9.         jz      loc_exit
  10.  
  11.         mov     [fbitmap],eax
  12.  
  13.         ; Сконвертировать файл в разные форматы
  14.         invoke  FreeImage_Save,FIF_WEBP,[fbitmap],fname_webp,WEBP_LOSSLESS
  15.         invoke  FreeImage_Save,FIF_JPEG,[fbitmap],fname_jpg,JPEG_QUALITYSUPERB
  16.         invoke  FreeImage_Save,FIF_BMP,[fbitmap],fname_bmp,BMP_DEFAULT
Как видите, для выполнения конвертирования достаточно всего трех функций, или даже двух, если пропустить проверку.

В приложении пример программы с исходным текстом, которая конвертирует графический файл в несколько других форматов. Не забудьте скачать и положить в папку программы библиотеку FreeImage.dll.

Пример программы с исходным текстом (FASM)Пример программы с исходным текстом (FASM)

FreeImage.Demo.zip (22,415 bytes)