SAIL bildedekodingsbibliotek tilgjengelig

Under MIT-lisens publisert bildedekodingsbibliotek på tvers av plattformer SAIL. SAIL er en rebranding av kodeker fra en bildeviser som lenge ikke støttes, omskrevet i C KSquirrel, men med en abstrakt API på høyt nivå og mange forbedringer. Målgruppe: bildeseere, spillutvikling, lasting av bilder i minnet for andre formål. Biblioteket er under utvikling, men er allerede brukbart. Binær- og kildekodekompatibilitet er ikke garantert på dette stadiet av utviklingen.

funksjoner:

  • Et enkelt, kompakt og raskt bibliotek skrevet i C uten tredjepartsavhengigheter (unntatt kodeker);
  • Enkel, forståelig og samtidig kraftig API for alle behov;
  • Bindinger for C++;
  • Bildeformater støttes av dynamisk lastede kodeker;
  • Les (og skriv) bilder fra en fil, minne eller til og med din egen datakilde;
  • Bestemme bildetypen etter filtype eller etter magisk tall;
  • For øyeblikket støttede formater: png (les, kun Windows), JPEG (les, skriv) PNG (les, skriv).
    Det arbeides med å legge til nye formater. KSquirrel-libs støttet rundt 60 formater på en eller annen måte, de mest populære formatene er først i køen;

  • Leseoperasjoner kan alltid sende ut piksler i RGB- og RGBA-format;
  • Noen kodeker kan sende ut piksler i en enda større liste med formater;
  • De fleste kodeker kan også sende ut SOURCE-piksler. Dette er nyttig for eksempel for de som ønsker å få full informasjon fra CMYK- eller YCCK-bilder;
  • Lese og skrive ICC-profiler;
  • Eksempler i C, Qt, SDL;
  • Støttede plattformer:
    Windows (installasjonsprogram), macOS (brygg) og Linux (Debian).

Hva SAIL ikke tilbyr:

  • Bilderedigering;
  • Andre fargeromkonverteringsfunksjoner enn de som tilbys av underliggende kodeker (libjpeg, etc.);
  • Fargebehandlingsfunksjoner (bruk av ICC-profiler osv.)

Det enkleste eksemplet på dekoding i C:

struct sail_context *kontekst;

SAIL_TRY(seil_init(&kontekst));

struct sail_image *image;
usignert tegn *image_pixels;

SAIL_TRY(sail_read(bane,
kontekst,
&bilde,
(ugyldig **)&image_pixels));

/*
* Her behandle de mottatte piksler.
* For å gjøre dette, bruk bilde->bredde, bilde->høyde, bilde->bytes_per_linje,
* og bilde->pikselformat.
*/

/* Rydde opp */
gratis(bilde_piksler);
sail_destroy_image(bilde);

Kort beskrivelse av API-nivåer:

  • Nybegynner: "Jeg vil bare laste ned denne JPEG"
  • Avansert: "Jeg vil laste denne animerte GIF-en fra minnet"
  • Dyphavsdykker: "Jeg vil laste denne animerte GIF-en fra minnet og ha full kontroll over kodekene og pikselutgangen jeg velger."
  • Teknisk dykker: "Jeg vil ha alt ovenfor, og min egen datakilde"

Direkte konkurrenter fra samme område:

  • FreeImage
  • Djevel
  • SDL_Bilde
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Forskjeller fra andre biblioteker:

  • Human API med forventede enheter - bilder, paletter, etc.
  • De fleste kodeker kan sende ut mer enn bare RGB/RGBA-piksler.
  • De fleste kodeker kan gi originale piksler uten konvertering til RGB.
  • Du kan skrive kodeker på hvilket som helst språk, og også legge til/fjerne dem uten å rekompilere hele prosjektet.
  • Ta vare på informasjon om originalbildet.
  • "Probing" er prosessen med å skaffe informasjon om et bilde uten å dekode pikseldataene.
  • Størrelse og hastighet.

Kilde: opennet.ru

Legg til en kommentar