Under MIT-licensen SAIL bibliotek for billedafkodning på tværs af platforme. SAIL er en C-baseret rebranding af codecs'ene fra den længe udgåede billedfremviser. , men med en abstrakt API på højt niveau og adskillige forbedringer. Målgruppe: billedfremvisere, spiludvikling, indlæsning af billeder i hukommelsen til andre formål. Biblioteket er under udvikling, men er allerede klar til brug. Binær kompatibilitet og kildekodekompatibilitet er ikke garanteret på dette udviklingsstadium.
features:
- Et simpelt, kompakt og hurtigt bibliotek skrevet i C uden tredjepartsafhængigheder (undtagen codecs);
- Enkel, klar og samtidig kraftfuld API til alle behov;
- Bindinger til C++;
- Billedformater understøttes af dynamisk indlæste codecs;
- Læs (og skriv) billeder fra en fil, hukommelse eller endda din egen datakilde;
- Identificer billedtype efter filtypenavn eller ;
- Aktuelt understøttede formater: (læser kun på Windows), JPEG (læse, skrive) PNG (læse, skrive).
Arbejdet med at tilføje nye formater er i gang. KSquirrel-libs understøttede omkring 60 formater på den ene eller anden måde, hvor de mest populære formater var de første i rækken; - Læseoperationer kan altid producere pixels i RGB- og RGBA-format;
- Nogle codecs kan udsende pixels i et endnu bredere udvalg af formater;
- De fleste codecs kan også udsende SOURCE-pixels. Dette vil for eksempel være nyttigt for dem, der ønsker at få fuldstændige oplysninger fra CMYK- eller YCCK-billeder;
- Læsning og skrivning af ICC-profiler;
- Eksempler i C, Qt, SDL;
- Understøttede platforme:
Windows (installatør), macOS (bryg) og Linux (Debian).
Hvad SAIL ikke tilbyder:
- Billedredigering;
- Funktioner til konvertering af andre farverum end dem, der leveres af underliggende codecs (libjpeg osv.);
- Farvestyringsfunktioner (anvendelse af ICC-profiler osv.)
Det enkleste eksempel på afkodning i C:
struktur sejl_kontekst *kontekst;
SAIL_TRY(sail_init(&kontekst));
struktur sejl_billede *billede;
usigneret char *billed_pixels;
SAIL_TRY(sail_read(sti,
sammenhæng,
&billede,
(void **)&billed_pixels));
/*
* Behandl de resulterende pixels her.
* Brug til dette billede->bredde, billede->højde, billede->bytes_per_linje,
* og billede->pixel_format.
*/
/* Rydning */
fri(billedpixels);
sejl_ødelæg_billede(billede);
Kort beskrivelse af API-niveauer:
- Nybegynder: "Jeg vil bare downloade denne JPEG"
- Avanceret: "Jeg vil indlæse denne animerede GIF fra hukommelsen"
- Deep Sea Diver: "Jeg vil indlæse denne animerede GIF fra hukommelsen og have fuld kontrol over de valgte codecs og formatet på de returnerede pixels"
- Teknisk dykker: "Jeg vil have alt ovenstående og min egen datakilde"
Direkte konkurrenter fra samme felt:
- FreeImage
- Djævel
- SDL_billede
- WIC
- imlib2
- Boost.GIL
- gdk-pixbuf
Forskelle fra andre biblioteker:
- En menneskelig API med forventede enheder - billeder, paletter osv.
- De fleste codecs kan ikke kun udsende RGB/RGBA-pixels.
- De fleste codecs kan returnere de originale pixels uden at konvertere dem til RGB.
- Du kan skrive codecs i ethvert sprog, og også tilføje/fjerne dem uden at skulle kompilere hele projektet igen.
- Bevar oplysninger om det originale billede.
- Probing er processen med at indhente information om et billede uden at afkode pixeldataene.
- Størrelse og hastighed.
Kilde: opennet.ru
