Unter der MIT-Lizenz eine plattformübergreifende Bilderdecodierungsbibliothek SAIL. SAIL ist eine auf C umgeschriebene Codec-Bibliothek aus einem längst nicht mehr unterstützten Bildbetrachter , jedoch mit einer hochgradig abstrakten API und zahlreichen Verbesserungen. Zielgruppe: Bildbetrachter, Spieleentwicklung, Bildspeicherung im Arbeitsspeicher für andere Zwecke. Die Bibliothek befindet sich in der Entwicklungsphase, ist jedoch bereits einsatzbereit. Binäre Kompatibilität und Quellcodekompatibilität werden in diesem Entwicklungsstadium nicht garantiert.
Möglichkeiten:
- eine einfache, kompakte und schnelle Bibliothek, die in C ohne externe Abhängigkeiten (außer Codecs) geschrieben wurde;
- eine einfache, verständliche und zugleich leistungsstarke API für alle Bedürfnisse;
- Bindings für C++;
- Bildformate werden durch dynamisch ladbare Codecs unterstützt;
- Lesen (und Schreiben) von Bildern aus Dateien, dem Speicher oder sogar Ihrer eigenen Datenquelle;
- Bestimmung des Bildtyps anhand der Dateierweiterung oder durch ;
- Aktuell unterstützte Formate: (lesen, nur unter Windows), JPEG (lesen, schreiben), PNG (lesen, schreiben).
Die Arbeit an der Hinzufügung neuer Formate läuft. KSquirrel-libs hat etwa 60 Formate unterstützt, wobei die beliebtesten Formate zuerst in der Warteschlange stehen. - Lesevorgänge geben immer Pixel im RGB- und RGBA-Format aus.
- Einige Codecs können Pixel in einer noch größeren Liste von Formaten ausgeben.
- Die meisten Codecs können auch die korrespondierenden (SOURCE) Pixel ausgeben. Dies ist 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 bereitstellt:
- Bildbearbeitung.
- Funktionen zur Umwandlung von Farb-Räumen, außer diejenigen, die von den zugrunde liegenden Codecs bereitgestellt werden (libjpeg usw.).
- Funktionen zur Farbverwaltung (Anwendung von ICC-Profilen usw.).
Ein einfaches Beispiel für das Decodieren in C:
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));
/*
* Hier verarbeiten Sie die erhaltenen Pixel.
* Verwenden Sie dafür image->width, image->height, image->bytes_per_line,
* und image->pixel_format.
*/
/* Очистка */
free(image_pixels);
sail_destroy_image(image);
Kurze Beschreibung der API-Ebenen:
- Einsteiger: „Ich möchte einfach dieses JPEG laden“
- Продвинутый: «Я хочу загрузить этот анимированный GIF из памяти»
- Глубоководный дайвер: «Я хочу загрузить этот анимированный GIF из памяти и иметь полный контроль над выбранными кодеками и форматом отдаваемых пикселей»
- Технический дайвер: «Я хочу всё что выше, и мой собственный источник данных»
Прямые конкуренты из этой же области:
- FreeImage
- DevIL
- SDL_Image
- WIC
- imlib2
- Boost.GIL
- gdk-pixbuf
Отличия от других библиотек:
- Человеческий API с ожидаемыми сущностями — изображениями, палитрами и т.д.
- Большинство кодеков умеют отдавать не только RGB/RGBA пиксели.
- Большинство кодеков умеют отдавать исходные пиксели без преобразований в RGB.
- Писать кодеки можно на любом языке, а также добавлять/удалять их без перекомпиляции всего проекта.
- Сохранение информации об исходном изображении.
- «Прощупывание» (probing) — получение информации об изображении без декодирования пиксельных данных.
- Размер и скорость.
Quelle: opennet.ru
