SAIL billeddekodningsbibliotek tilgængeligt

Under MIT-licens offentliggjort cross-platform billedafkodningsbibliotek SAIL. SAIL er en rebranding af codecs fra en længe ikke-understøttet billedfremviser omskrevet i C KSquirrel, 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 brugbart. Binær og kildekodekompatibilitet er ikke garanteret på dette udviklingstrin.

features:

  • Et enkelt, kompakt og hurtigt bibliotek skrevet i C uden tredjepartsafhængigheder (undtagen codecs);
  • Enkel, forståelig og samtidig kraftfuld API til alle behov;
  • Bindinger for C++;
  • Billedformater understøttes af dynamisk indlæste codecs;
  • Læs (og skriv) billeder fra en fil, hukommelse eller endda din egen datakilde;
  • Bestemmelse af billedtypen ved filtypenavn eller efter magiske tal;
  • Aktuelt understøttede formater: png (læs, kun Windows), JPEG (læs, skriv) PNG (læs, skriv).
    Der arbejdes på at tilføje nye formater. KSquirrel-libs understøttede omkring 60 formater på den ene eller anden måde, de mest populære formater er først i rækken;

  • Læseoperationer kan altid udlæse pixels i RGB- og RGBA-format;
  • Nogle codecs kan udskrive pixels i en endnu større liste af formater;
  • De fleste codecs kan også udsende SOURCE pixels. Dette er f.eks. nyttigt for dem, der ønsker at få fuld information fra CMYK- eller YCCK-billeder;
  • Læsning og skrivning af ICC-profiler;
  • Eksempler i C, Qt, SDL;
  • Understøttede platforme:
    Windows (installationsprogram), macOS (brew) og Linux (Debian).

Hvad SAIL ikke tilbyder:

  • Billedredigering;
  • Andre farverumskonverteringsfunktioner end dem, der leveres af underliggende codecs (libjpeg osv.);
  • Farvestyringsfunktioner (brug af ICC-profiler osv.)

Det enkleste eksempel på afkodning i C:

struct sejl_kontekst *kontekst;

SAIL_TRY(sail_init(&kontekst));

struct sail_image *image;
usigneret tegn *image_pixels;

SAIL_TRY(sail_read(sti,
sammenhæng,
&billede,
(ugyldig **)&image_pixels));

/*
* Her behandles de modtagne pixels.
* For at gøre dette skal du bruge billede->bredde, billede->højde, billede->bytes_per_linje,
* og billede->pixel_format.
*/

/* Ryd op */
gratis(billede_pixels);
sail_destroy_image(image);

Kort beskrivelse af API-niveauer:

  • Nybegynder: "Jeg vil bare downloade denne JPEG"
  • Avanceret: "Jeg vil indlæse denne animerede GIF fra hukommelsen"
  • Dybhavsdykker: "Jeg vil indlæse denne animerede GIF fra hukommelsen og have fuld kontrol over de codecs og pixeloutput, som jeg vælger."
  • Teknisk dykker: "Jeg vil have alt ovenfor og min egen datakilde"

Direkte konkurrenter fra samme område:

  • FreeImage
  • Djævel
  • SDL_Billede
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Forskelle fra andre biblioteker:

  • Human API med forventede entiteter - billeder, paletter osv.
  • De fleste codecs kan udsende mere end blot RGB/RGBA-pixel.
  • De fleste codecs kan udskrive originale pixels uden konvertering til RGB.
  • Du kan skrive codecs på ethvert sprog og også tilføje/fjerne dem uden at genkompilere hele projektet.
  • 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

Tilføj en kommentar