SAIL-kuvan dekoodauskirjasto saatavilla

MIT-lisenssillä julkaistu monikäyttöinen kuvanpurkukirjasto SAIL. SAIL on pitkään tuetun kuvankatseluohjelman koodekkien uudelleenbrändäys, joka on kirjoitettu uudelleen C-kielellä Orava, mutta korkean tason abstraktilla API:lla ja lukuisilla parannuksilla. Kohdeyleisö: kuvankatselijat, pelien kehitys, kuvien lataaminen muistiin muihin tarkoituksiin. Kirjastoa kehitetään, mutta se on jo käyttökelpoinen. Binaari- ja lähdekoodien yhteensopivuutta ei taata tässä kehitysvaiheessa.

ominaisuudet:

  • Yksinkertainen, kompakti ja nopea C-kielellä kirjoitettu kirjasto ilman kolmannen osapuolen riippuvuuksia (paitsi koodekkeja);
  • Yksinkertainen, ymmärrettävä ja samalla tehokas API kaikkiin tarpeisiin;
  • Sidokset C++:lle;
  • Dynaamisesti ladatut koodekit tukevat kuvamuotoja;
  • Lue (ja kirjoita) kuvia tiedostosta, muistista tai jopa omasta tietolähteestäsi;
  • Kuvatyypin määrittäminen tiedostotunnisteen tai sen mukaan maaginen numero;
  • Tällä hetkellä tuetut muodot: apng (luku, vain Windows), JPEG (luku, kirjoitus) PNG (luku, kirjoitus).
    Uusien formaattien lisääminen on käynnissä. KSquirrel-libs tuki noin 60 formaattia tavalla tai toisella, suosituimmat muodot ovat ensimmäisinä;

  • Lukutoiminnot voivat aina tulostaa pikseleitä RGB- ja RGBA-muodossa;
  • Jotkut koodekit voivat tulostaa pikseleitä vielä suuremmassa luettelossa muotoja;
  • Useimmat koodekit voivat myös lähettää SOURCE-pikseleitä. Tämä on hyödyllistä esimerkiksi niille, jotka haluavat saada täyden tiedon CMYK- tai YCCK-kuvista;
  • ICC-profiilien lukeminen ja kirjoittaminen;
  • Esimerkkejä C, Qt, SDL;
  • Tuetut alustat:
    Windows (asennusohjelma), macOS (brew) ja Linux (Debian).

Mitä SAIL ei tarjoa:

  • Kuvankäsittely;
  • muut kuin taustalla olevien koodekkien (libjpeg jne.) tarjoamat väriavaruuden muunnostoiminnot;
  • Värinhallintatoiminnot (ICC-profiilien käyttö jne.)

Yksinkertaisin esimerkki dekoodauksesta C:ssä:

struct sail_context *konteksti;

SAIL_TRY(sail_init(&context));

struct sail_image *kuva;
unsigned char *image_pixels;

SAIL_TRY(sail_read(polku,
yhteydessä
&kuva,
(void **)&image_pixels));

/*
* Tässä käsitellään vastaanotetut pikselit.
* Käytä tätä varten kuva->leveys, kuva->korkeus, kuva->tavua_riviä kohti,
* ja image-> pixel_format.
*/

/* Siivota */
ilmainen(kuva_pikseliä);
sail_detroy_image(image);

API-tasojen lyhyt kuvaus:

  • Aloittelija: "Haluan vain ladata tämän JPEG:n"
  • Lisäasetukset: "Haluan ladata tämän animoidun GIF:n muistista"
  • Syvänmeren sukeltaja: "Haluan ladata tämän animoidun GIF:n muistista ja hallita täysin valitsemiani koodekkeja ja pikselilähtöä."
  • Technical Diver: "Haluan kaiken yllä olevan ja oman tietolähteeni"

Suorat kilpailijat samalta alueelta:

  • FreeImage
  • Paholainen
  • SDL_Image
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Erot muihin kirjastoihin:

  • Ihmisen sovellusliittymä, jossa on odotettuja entiteettejä – kuvia, paletteja jne.
  • Useimmat koodekit voivat lähettää enemmän kuin vain RGB/RGBA-pikseleitä.
  • Useimmat koodekit voivat tulostaa alkuperäisiä pikseleitä muuntamatta RGB-muotoon.
  • Voit kirjoittaa koodekkeja millä tahansa kielellä ja myös lisätä/poistaa niitä kääntämättä koko projektia uudelleen.
  • Säilytä alkuperäisen kuvan tiedot.
  • "Probing" on prosessi, jossa saadaan tietoa kuvasta ilman pikselitietojen dekoodausta.
  • Koko ja nopeus.

Lähde: opennet.ru

Lisää kommentti