SAIL-Bilddekodierungsbibliothek verfügbar

Unter MIT-Lizenz herausgegeben von Plattformübergreifende Bilddekodierungsbibliothek SAIL. SAIL ist eine Umbenennung der Codecs eines lange Zeit nicht unterstützten Bildbetrachters, der in C neu geschrieben wurde KShörnchen, aber mit einer abstrakten API auf hoher Ebene und zahlreichen Verbesserungen. Zielgruppe: Bildbetrachter, Spieleentwicklung, Laden von Bildern in den Speicher für andere Zwecke. Die Bibliothek befindet sich in der Entwicklung, ist aber bereits nutzbar. Die Kompatibilität von Binär- und Quellcode kann in dieser Entwicklungsphase nicht garantiert werden.

Features:

  • Eine einfache, kompakte und schnelle in C geschriebene Bibliothek ohne Abhängigkeiten von Drittanbietern (außer Codecs);
  • Einfache, verständliche und zugleich leistungsstarke API für alle Bedürfnisse;
  • Bindungen für C++;
  • Bildformate werden durch dynamisch geladene Codecs unterstützt;
  • Lesen (und schreiben) Sie Bilder aus einer Datei, einem Speicher oder sogar Ihrer eigenen Datenquelle.
  • Bestimmen des Bildtyps anhand der Dateierweiterung oder nach magische Zahl;
  • Derzeit unterstützte Formate: APNG (Lesen, nur Windows), JPEG (Lesen, Schreiben) PNG (Lesen, Schreiben).
    Es wird daran gearbeitet, neue Formate hinzuzufügen. KSquirrel-libs unterstützte auf die eine oder andere Weise etwa 60 Formate, die beliebtesten Formate stehen an erster Stelle;

  • Lesevorgänge können Pixel immer im RGB- und RGBA-Format ausgeben;
  • Einige Codecs können Pixel in einer noch größeren Liste von Formaten ausgeben;
  • Die meisten Codecs können auch SOURCE-Pixel ausgeben. Dies ist beispielsweise nützlich für diejenigen, die vollständige Informationen aus CMYK- oder YCCK-Bildern erhalten möchten;
  • Lesen und Schreiben von ICC-Profilen;
  • Beispiele in C, Qt, SDL;
  • Unterstützte Plattformen:
    Windows (Installer), macOS (Brew) und Linux (Debian).

Was SAIL nicht bietet:

  • Bildbearbeitung;
  • Andere Funktionen zur Farbraumkonvertierung als diejenigen, die von den zugrunde liegenden Codecs (libjpeg usw.) bereitgestellt werden;
  • Farbmanagementfunktionen (Verwendung von ICC-Profilen etc.)

Das einfachste Beispiel für die Dekodierung in C:

struct Sail_context *context;

SAIL_TRY(sail_init(&context));

struct Sail_image *image;
unsigned char *image_pixels;

SAIL_TRY(sail_read(Pfad,
Kontext,
&Bild,
(void **)&image_pixels));

/*
* Hier werden die empfangenen Pixel verarbeitet.
* Verwenden Sie dazu image->width, image->height, image->bytes_per_line,
* und image->pixel_format.
*/

/* Aufräumen */
free(image_pixels);
Sail_destroy_image(image);

Kurze Beschreibung der API-Ebenen:

  • Neuling: „Ich möchte nur dieses JPEG herunterladen“
  • Erweitert: „Ich möchte dieses animierte GIF aus dem Speicher laden“
  • Tiefseetaucher: „Ich möchte dieses animierte GIF aus dem Speicher laden und die volle Kontrolle über die Codecs und Pixelausgabe haben, die ich wähle.“
  • Technischer Taucher: „Ich möchte alles oben Genannte und meine eigene Datenquelle“

Direkte Konkurrenten aus der gleichen Gegend:

  • Freeimage
  • Teufel
  • SDL_Image
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Unterschiede zu anderen Bibliotheken:

  • Menschliche API mit erwarteten Entitäten – Bilder, Paletten usw.
  • Die meisten Codecs können mehr als nur RGB/RGBA-Pixel ausgeben.
  • Die meisten Codecs können Originalpixel ohne Konvertierung in RGB ausgeben.
  • Sie können Codecs in jeder Sprache schreiben und diese hinzufügen/entfernen, ohne das gesamte Projekt neu kompilieren zu müssen.
  • Behalten Sie Informationen über das Originalbild bei.
  • „Probing“ ist der Prozess, Informationen über ein Bild zu erhalten, ohne die Pixeldaten zu dekodieren.
  • Größe und Geschwindigkeit.

Source: opennet.ru

Kommentar hinzufügen