SAIL bildavkodningsbibliotek tillgängligt

Under MIT-licens publicerat plattformsoberoende bildavkodningsbibliotek SAIL. SAIL är en omprofilering av codecs från en bildvisare som länge inte stöds omskriven i C KSquirrel, men med ett abstrakt API på hög nivå och många förbättringar. Målgrupp: bildvisare, spelutveckling, laddning av bilder i minnet för andra ändamål. Biblioteket är under utveckling, men är redan användbart. Binär- och källkodskompatibilitet garanteras inte i detta utvecklingsstadium.

funktioner:

  • Ett enkelt, kompakt och snabbt bibliotek skrivet i C utan beroenden från tredje part (förutom codecs);
  • Enkelt, begripligt och samtidigt kraftfullt API för alla behov;
  • Bindningar för C++;
  • Bildformat stöds av dynamiskt laddade codecs;
  • Läs (och skriv) bilder från en fil, minne eller till och med din egen datakälla;
  • Bestämma bildtypen genom filtillägg eller efter magiska siffran;
  • Format som stöds för närvarande: png (läs, endast Windows), JPEG (läs, skriv) PNG (läs, skriv).
    Arbete pågår med att lägga till nya format. KSquirrel-libs stödde cirka 60 format på ett eller annat sätt, de mest populära formaten är först i raden;

  • Läsoperationer kan alltid mata ut pixlar i RGB- och RGBA-format;
  • Vissa codecs kan mata ut pixlar i en ännu större lista med format;
  • De flesta codecs kan också mata ut SOURCE-pixlar. Detta är användbart till exempel för dem som vill få fullständig information från CMYK- eller YCCK-bilder;
  • Läsa och skriva ICC-profiler;
  • Exempel i C, Qt, SDL;
  • Plattformar som stöds:
    Windows (installationsprogram), macOS (brew) och Linux (Debian).

Vad SAIL inte tillhandahåller:

  • Bildredigering;
  • Andra färgrymdskonverteringsfunktioner än de som tillhandahålls av underliggande codecs (libjpeg, etc.);
  • Färghanteringsfunktioner (användning av ICC-profiler, etc.)

Det enklaste exemplet på avkodning i C:

struct sail_context *kontext;

SAIL_TRY(sail_init(&context));

struct sail_image *image;
osignerad char *image_pixels;

SAIL_TRY(sail_read(sökväg,
sammanhang,
&bild,
(void **)&image_pixels));

/*
* Här bearbetar de mottagna pixlarna.
* För att göra detta, använd bild->bredd, bild->höjd, bild->bytes_per_linje,
* och bild->pixel_format.
*/

/* Städa */
gratis(bildpixlar);
sail_destroy_image(bild);

Kort beskrivning av API-nivåer:

  • Nybörjare: "Jag vill bara ladda ner den här JPEG"
  • Avancerat: "Jag vill ladda denna animerade GIF från minnet"
  • Djuphavsdykare: "Jag vill ladda denna animerade GIF från minnet och ha full kontroll över de codecs och pixelutgångarna som jag väljer."
  • Teknisk dykare: "Jag vill ha allt ovan och min egen datakälla"

Direkta konkurrenter från samma område:

  • Gratisbild
  • Jäkel
  • SDL_Bild
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Skillnader från andra bibliotek:

  • Human API med förväntade enheter - bilder, paletter, etc.
  • De flesta codecs kan mata ut mer än bara RGB/RGBA-pixlar.
  • De flesta codecs kan mata ut originalpixlar utan konvertering till RGB.
  • Du kan skriva codecs på vilket språk som helst och även lägga till/ta bort dem utan att kompilera om hela projektet.
  • Bevara information om originalbilden.
  • "Probing" är processen att få information om en bild utan att avkoda pixeldata.
  • Storlek och hastighet.

Källa: opennet.ru

Lägg en kommentar