Dostępna biblioteka dekodowania obrazu SAIL

Na licencji MIT opublikowany wieloplatformowa biblioteka dekodowania obrazów SAIL. SAIL to rebranding kodeków z długo nieobsługiwanej przeglądarki obrazów napisanej w języku C KSwiewiórka, ale z abstrakcyjnym interfejsem API wysokiego poziomu i licznymi ulepszeniami. Grupa docelowa: przeglądarki obrazów, tworzenie gier, ładowanie obrazów do pamięci w innych celach. Biblioteka jest w fazie rozwoju, ale już można z niej korzystać. Na tym etapie rozwoju nie jest gwarantowana kompatybilność kodu binarnego i kodu źródłowego.

Cechy:

  • Prosta, kompaktowa i szybka biblioteka napisana w C bez zależności innych firm (z wyjątkiem kodeków);
  • Proste, zrozumiałe i jednocześnie potężne API dla wszystkich potrzeb;
  • Powiązania dla C++;
  • Formaty obrazów są obsługiwane przez dynamicznie ładowane kodeki;
  • Odczytuj (i zapisuj) obrazy z pliku, pamięci, a nawet własnego źródła danych;
  • Określanie typu obrazu według rozszerzenia pliku lub według magiczny numer;
  • Aktualnie obsługiwane formaty: png (odczyt, tylko Windows), JPEG (odczyt, zapis) PNG (odczyt, zapis).
    Trwają prace nad dodaniem nowych formatów. KSquirrel-libs obsługuje w ten czy inny sposób około 60 formatów, najpopularniejsze formaty są na pierwszym miejscu;

  • Operacje odczytu mogą zawsze wyprowadzać piksele w formacie RGB i RGBA;
  • Niektóre kodeki mogą wyświetlać piksele w jeszcze większej liczbie formatów;
  • Większość kodeków może również wysyłać piksele SOURCE. Jest to przydatne na przykład dla tych, którzy chcą uzyskać pełną informację z obrazów CMYK lub YCCK;
  • Czytanie i pisanie profili ICC;
  • Przykłady w C, Qt, SDL;
  • Obsługiwane platformy:
    Windows (instalator), macOS (brew) i Linux (Debian).

Czego SAIL nie zapewnia:

  • Edycja obrazka;
  • Funkcje konwersji przestrzeni kolorów inne niż te udostępniane przez podstawowe kodeki (libjpeg itp.);
  • Funkcje zarządzania kolorami (wykorzystanie profili ICC itp.)

Najprostszy przykład dekodowania w C:

struktura żagla_kontekst *kontekst;

SAIL_TRY(żagiel_init(&kontekst));

struktura żagla_image *image;
znak bez znaku *image_pixels;

SAIL_TRY(żagiel_czytany(ścieżka,
kontekst,
&obraz,
(puste **)&piksele_obrazu));

/*
* Tutaj przetwarzane są otrzymane piksele.
* Aby to zrobić, użyj image->width, image->height, image->bytes_per_line,
* i obraz->pixel_format.
*/

/* Posprzątać */
wolny(piksele_obrazu);
żagiel_destroy_image(image);

Krótki opis poziomów API:

  • Nowicjusz: „Chcę tylko pobrać ten plik JPEG”
  • Zaawansowane: „Chcę załadować ten animowany GIF z pamięci”
  • Nurek głębinowy: „Chcę załadować ten animowany GIF z pamięci i mieć pełną kontrolę nad wybranymi przeze mnie kodekami i wyjściem pikseli”.
  • Nurek techniczny: „Chcę wszystkiego powyżej i własnego źródła danych”

Bezpośredni konkurenci z tego samego obszaru:

  • Darmowy obraz
  • Diabeł
  • Obraz SDL
  • WIC
  • imlib2
  • Zwiększ.GIL
  • gdk-pixbuf

Różnice w stosunku do innych bibliotek:

  • Human API z oczekiwanymi encjami - obrazami, paletami itp.
  • Większość kodeków może wysyłać więcej niż tylko piksele RGB/RGBA.
  • Większość kodeków może wysyłać oryginalne piksele bez konwersji na RGB.
  • Możesz pisać kodeki w dowolnym języku, a także dodawać/usuwać je bez konieczności ponownej kompilacji całego projektu.
  • Zachowaj informacje o oryginalnym obrazie.
  • „Sondowanie” to proces uzyskiwania informacji o obrazie bez dekodowania danych pikseli.
  • Rozmiar i prędkość.

Źródło: opennet.ru

Dodaj komentarz