Galima SAIL vaizdo dekodavimo biblioteka

Pagal MIT licenciją paskelbta kelių platformų vaizdo dekodavimo biblioteka SAIL. SAIL yra kodekų prekės ženklo keitimas iš ilgai nepalaikomos vaizdų peržiūros priemonės, perrašytas C K voverė, bet su aukšto lygio abstrakčia API ir daugybe patobulinimų. Tikslinė auditorija: vaizdų peržiūros priemonės, žaidimų kūrimas, vaizdų įkėlimas į atmintį kitiems tikslams. Biblioteka kuriama, bet jau tinkama naudoti. Šiame kūrimo etape negarantuojamas dvejetainio ir šaltinio kodo suderinamumas.

Savybės:

  • Paprasta, kompaktiška ir greita biblioteka, parašyta C kalba be priklausomybių nuo trečiųjų šalių (išskyrus kodekus);
  • Paprasta, suprantama ir tuo pačiu galinga API visiems poreikiams;
  • Įrišimai C++;
  • Vaizdo formatus palaiko dinamiškai įkeliami kodekai;
  • Skaityti (ir rašyti) vaizdus iš failo, atminties ar net savo duomenų šaltinio;
  • Vaizdo tipo nustatymas pagal failo plėtinį arba pagal magiškas skaičius;
  • Šiuo metu palaikomi formatai: png (skaityti, tik Windows), JPEG (skaityti, rašyti) PNG (skaityti, rašyti).
    Šiuo metu vyksta naujų formatų įtraukimas. KSquirrel-libs vienaip ar kitaip palaikė apie 60 formatų, populiariausi formatai yra pirmoje eilėje;

  • Skaitymo operacijos visada gali išvesti pikselius RGB ir RGBA formatu;
  • Kai kurie kodekai gali išvesti pikselius dar didesniu formatų sąrašu;
  • Dauguma kodekų taip pat gali išvesti SOURCE pikselius. Tai naudinga, pavyzdžiui, tiems, kurie nori gauti visą informaciją iš CMYK ar YCCK vaizdų;
  • ICC profilių skaitymas ir rašymas;
  • C, Qt, SDL pavyzdžiai;
  • Palaikomos platformos:
    Windows (diegimo programa), macOS (brew) ir Linux (Debian).

Ko SAIL nesuteikia:

  • Vaizdo redagavimas;
  • Spalvų erdvės konvertavimo funkcijos, išskyrus tas, kurias teikia pagrindiniai kodekai (libjpeg ir kt.);
  • Spalvų valdymo funkcijos (ICC profilių naudojimas ir kt.)

Paprasčiausias C dekodavimo pavyzdys:

struct sail_context *kontekstas;

SAIL_TRY(sail_init(&kontekstas));

struct sail_image *vaizdas;
nepasirašytas simbolis *vaizdo_pikseliai;

SAIL_TRY(sail_read(kelias,
kontekstas,
&vaizdas,
(negalioja **)&vaizdo_pikseliai));

/*
* Čia apdorojami gauti pikseliai.
* Norėdami tai padaryti, naudokite image->width, image->height, image->bytes_per_line,
* ir image->pixel_format.
*/

/* Išvalyti */
nemokama(vaizdo_pikseliai);
sail_destroy_image(vaizdas);

Trumpas API lygių aprašymas:

  • Naujokas: "Aš tiesiog noriu atsisiųsti šį JPEG"
  • Išplėstinė: „Noriu įkelti šį animuotą GIF iš atminties“
  • Giliavandenis naras: „Noriu įkelti šį animuotą GIF iš atminties ir visiškai valdyti pasirinktus kodekus ir pikselių išvestį.
  • Techninis naras: „Noriu visko aukščiau ir savo duomenų šaltinio“

Tiesioginiai konkurentai iš tos pačios srities:

  • Nemokamas vaizdas
  • Velnias
  • SDL_Vaizdas
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Skirtumai nuo kitų bibliotekų:

  • Žmogaus API su numatomais subjektais – vaizdais, paletėmis ir kt.
  • Dauguma kodekų gali išvesti ne tik RGB/RGBA pikselius.
  • Dauguma kodekų gali išvesti originalius pikselius nekonvertuodami į RGB.
  • Galite rašyti kodekus bet kuria kalba, taip pat pridėti / pašalinti juos neperkompiliuodami viso projekto.
  • Išsaugokite informaciją apie pradinį vaizdą.
  • „Tinkavimas“ yra informacijos apie vaizdą gavimo procesas neiššifruojant pikselių duomenų.
  • Dydis ir greitis.

Šaltinis: opennet.ru

Добавить комментарий