Пад ліцэнзіяй MIT крос-платформавая бібліятэка дэкадавання малюнкаў SAIL. SAIL - гэта перапісаны на З рэбрэндынг кодэкаў з даўно не падтрымліваемай праграмы прагляду малюнкаў , Але з наяўнасцю высокаўзроўневага абстрактнага API і шматлікімі паляпшэннямі. Мэтавая аўдыторыя: праглядальнікі малюнкаў, распрацоўка гульняў, загрузка малюнкаў у памяць для іншых мэт. Бібліятэка знаходзіцца на стадыі распрацоўкі, але ўжо прыдатная для выкарыстання. Бінарная сумяшчальнасць і сумяшчальнасць зыходнага кода на дадзеным этапе распрацоўкі не гарантуецца.
магчымасці:
- Простая, кампактная і хуткая бібліятэка, напісаная на З без іншых залежнасцяў (акрамя кодэкаў);
- Просты, зразумелы і ў той жа час магутны API для ўсіх патрэб;
- Біндзінгі да C++;
- Фарматы выяў падтрымліваюцца дынамічна загружанымі кодэкамі;
- Чытанне (і запіс) малюнкаў з файла, памяці ці нават сваёй уласнай крыніцы дадзеных;
- Вызначэнне тыпу выявы па пашырэнні файла, або па ;
- Падтрымліваюцца на дадзены момант фарматы: (чытанне, толькі на Windows), JPEG (чытанне, запіс) PNG (чытанне, запіс).
Праца па даданні новых фарматаў вядзецца. KSquirrel-libs так ці інакш падтрымліваў каля 60 фарматаў, найболей папулярныя фарматы стаяць у чарзе першымі; - Аперацыі чытання заўсёды могуць выдаваць пікселі ў фармаце RGB і RGBA;
- Некаторыя кодэкі могуць выдаваць пікселі ў яшчэ большым спісе фарматаў;
- Большасць кодэкаў умеюць выдаваць таксама і зыходныя (SOURCE) пікселі. Гэта спатрэбіцца, напрыклад, тым, хто захоча атрымаць поўную інфармацыю з CMYK-ці YCCK-малюнкаў;
- Чытанне і запіс ICC профіляў;
- Прыклады на C, Qt, SDL;
- Падтрымліваюцца платформы:
Windows (installer), macOS (brew) і Linux (Debian).
Што SAIL не дае:
- Рэдагаванне відарысаў;
- Функцыі пераўтварэнні каляровых прастор акрамя тых, што даюць найнізкія кодэкі (libjpeg і т.д.);
- Функцыі кіравання колерам (ужыванне ICC профіляў і г.д.)
Найпросты прыклад дэкадавання на C:
struct sail_context *context;
SAIL_TRY(sail_init(&context));
struct sail_image *image;
unsigned char *image_pixels;
SAIL_TRY(sail_read(path,
кантэкст,
&image,
(void **)&image_pixels));
/*
* Тут апрацуйце атрыманыя пікселі.
* Для гэтага выкарыстоўвайце image->width, image->height, image->bytes_per_line,
* і image->pixel_format.
*/
/* Ачыстка */
free(image_pixels);
sail_destroy_image(image);
Кароткае апісанне ўзроўняў API:
- Навічок: «Я проста хачу загрузіць гэты JPEG»
- Прасунуты: "Я хачу загрузіць гэты аніміраваны GIF з памяці"
- Глыбакаводны дайвер: «Я жадаю загрузіць гэты аніміраваны GIF з памяці і мець поўны кантроль над абранымі кодэкамі і фарматам якія аддаюцца пікселяў»
- Тэхнічны дайвер: «Я жадаю ўсё што вышэй, і мая ўласная крыніца дадзеных»
Прамыя канкурэнты з гэтай жа вобласці:
- FreeImage
- DevIL
- SDL_Image
- WIC
- imlib2
- Boost.GIL
- gdk-pixbuf
Адрозненні ад іншых бібліятэк:
- Чалавечы API з чаканымі сутнасцямі - выявамі, палітрам і г.д.
- Большасць кодэкаў умеюць аддаваць не толькі RGB/RGBA пікселі.
- Большасць кодэкаў умеюць аддаваць зыходныя пікселі без пераўтварэнняў у RGB.
- Пісаць кодэкі можна на любой мове, а таксама дадаваць/выдаляць іх без перакампілявання ўсяго праекта.
- Захаванне інфармацыі аб зыходным відарысе.
- "Прамацванне" (probing) - атрыманне інфармацыі аб малюнку без дэкадавання піксельных дадзеных.
- Памер і скорасць.
Крыніца: opennet.ru
