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)


Поделиться ссылкой ВКонтакте
Просмотров: 398 | Комментариев: 9

Комментарии

Отзывы посетителей сайта о статье
user (21.03.2024 в 20:34):
Pro на паблике нет, она после оплаты.

Старой хватает

ЦитатаТак оно же вроде как заменяемо, накатил поверх новую версию и все

Твоему экзамплу пробовал подсунуть висустиновскую dll - не найденная функция.
Наоборот да, можно попробовать.
Только смысла нет - в демо висустине нет сохранения картинок
0101 (21.03.2024 в 18:00):
user, какую версию visustin используете? Старую (7.10 Demo) с лодырём или новая Pro имеется?
ManHunter (21.03.2024 в 10:56):
Так оно же вроде как заменяемо, накатил поверх новую версию и все.
user (21.03.2024 в 01:39):
Версию 3.15.3.0
Текущая же - 3.18.0.0
user (21.03.2024 в 01:27):
Кстати, эту библиотеку вполне по-чесноку
использует программа Visustin.
Чуть ли не единственный софт на басике,
который изредка запускаю, в редких случаях.
ManHunter (20.03.2024 в 19:08):
user, путь этот многие падаваны прошли, на темную сторону перейдя.
user (20.03.2024 в 18:41):
Так работает, нормально.

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

[смеюсь]
ManHunter (20.03.2024 в 18:08):
align 4  <---- вот тут не указал выравнивание
fbitmap    dd ?

Поправил, спасибо. Архив обновлен.
user (20.03.2024 в 18:06):
Интересное дело.
Win7/x64.
Используется freeimage.dll (x32)

При запуске файлы конвертирует, но генерируется исключение.

Когда перетранслировал заново, без изменений,
то отрабатывает и завершается нормально и без ошибок.

Новый файл пришлю сейчас, для сравнения.

https://dropmefiles.com/2XVxx

Какая-то кривизна в архивном примере

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0032 сек.) / Память: 4.5 Mb
Наверх