Mehrere bedeutende Updates der Bilddecodierungsbibliothek SAIL wurden veröffentlicht, die einen überarbeiteten Codec aus dem seit langem nicht unterstützten Bildbetrachter KSquirrel bereitstellt, jedoch mit einem hochgradig abstrahierten API und zahlreichen Verbesserungen. Die Bibliothek ist einsatzbereit, wird aber weiterhin kontinuierlich verbessert. Die binäre und API-Kompatibilität wird derzeit nicht garantiert. Demonstration.
Eigenschaften von SAIL
- Eine schnelle und benutzerfreundliche Bibliothek;
- In C11 geschrieben mit Bindungen zu C++17;
- Unterstützung von Bildformaten wird durch dynamisch ladbare Codecs realisiert, die unabhängig vom Client hinzugefügt und entfernt werden können;
- Lesen aus Dateien, Speicher, eigenen Quellen;
- Unterstützung für mehrseitige und animierte Bilder;
- Die Unterstützung gängiger Formate erfolgt dennoch mithilfe entsprechender Bibliotheken wie libjpeg, libpng, etc.
- Plattformübergreifend: Linux, Windows, macOS;
- Probing – Informationsbeschaffung über das Bild ohne Dekodierung der Pixel;
- Menschliche Bezeichnungen für Entitäten (keine FIMULTIBITMAP);
- Lesen und Schreiben von ICC-Profilen;
- Gibt RGBA oder BGRA Pixel zurück;
- Gibt die ursprünglichen Pixel (z. B. CMYK) zurück, wenn vom Codec unterstützt;
Änderungsliste seit der letzten Veröffentlichung:
- API wurde erheblich verbessert und vereinfacht. Früher: struct sail_context *context; SAIL_TRY(sail_init(&context)); struct sail_image *image; unsigned char *image_pixels; SAIL_TRY(sail_read(path, context, &image, (void **)&image_pixels)); … free(image_pixels); sail_destroy_image(image);
Jetzt: struct sail_image *image; SAIL_TRY(sail_read_file(path, &image); … sail_destroy_image(image);
- Formate BMP, GIF, TIFF wurden hinzugefügt;
- Verfügbarkeit in VCPKG auf allen Plattformen außer UWP;
- Vergleichstests der Leistung veröffentlicht;
- C++-Bindung auf C++17 umgestellt;
- Funktionen zur Speicherallokation wurden an einem Ort gesammelt, um sie leicht ersetzen zu können, aber derzeit kann dies nur durch Neukompilierung erfolgen;
- Benutzer können jetzt CMake find_package() zur Integration von SAIL verwenden;
- Statische Kompilierung ermöglicht (SAIL_STATIC=ON);
- Möglichkeit hinzugefügt, alle Codecs in eine gemeinsame Bibliothek zu kompilieren (SAIL_COMBINE_CODECS=ON);
- Arbeiten an der Hinzufügung von Tests auf Basis von µnit begonnen;
Empfohlene Installationsmethode
- Linux — vcpkg, Debian-Regeln ebenfalls verfügbar
- Windows — vcpkg
- macOS — brew
Quelle: opennet.ru
