MIT lisansı altında platformlar arası görüntü kod çözme kütüphanesi SAIL. SAIL, uzun süredir desteklenmeyen bir resim görüntüleyicinin C dilinde yeniden yazılmış codec bileşenlerinin yeniden markalanmasıdır. , ancak üst düzey soyut bir API ve çok sayıda iyileştirmeyle. Hedef kitle: resim görüntüleyenler, oyun geliştirme, resimlerin başka amaçlarla belleğe yüklenmesi. Kütüphane geliştirilme aşamasındadır ancak halihazırda kullanılabilir durumdadır. Geliştirmenin bu aşamasında ikili kod ve kaynak kodu uyumluluğu garanti edilmez.
Özellikler:
- Üçüncü taraf bağımlılıkları olmadan (codec'ler hariç) C ile yazılmış basit, kompakt ve hızlı bir kitaplık;
- Tüm ihtiyaçlara yönelik basit, anlaşılır ve aynı zamanda güçlü API;
- C++ için bağlamalar;
- Görüntü formatları dinamik olarak yüklenen kodlayıcılar tarafından desteklenir;
- Bir dosyadan, bellekten ve hatta kendi veri kaynağınızdan görüntüleri okuyun (ve yazın);
- Görüntü tipini dosya uzantısına göre veya ;
- Şu anda desteklenen formatlar: (sadece okuma amaçlı) WindowsJPEG (okuma, yazma) PNG (okuma, yazma).
Yeni formatların eklenmesi için çalışmalar devam etmektedir. KSquirrel-lib'ler şu veya bu şekilde yaklaşık 60 formatı destekledi; en popüler formatlar ilk sırada yer alıyor; - Okuma işlemleri, piksellerin her zaman RGB ve RGBA formatında çıktısını alabilir;
- Bazı codec bileşenleri, pikselleri daha da geniş bir format listesinde yayınlayabilir;
- Çoğu codec bileşeni aynı zamanda SOURCE piksellerinin çıktısını da verebilir. Bu, örneğin CMYK veya YCCK görsellerinden tam bilgi almak isteyenler için kullanışlıdır;
- ICC profillerini okuma ve yazma;
- C, Qt, SDL'deki örnekler;
- Desteklenen platformlar:
Windows (kurulum programı), macOS (demlemek) ve Linux (Debian).
SAIL'in sağlamadığı şeyler:
- Resim düzenleme;
- Temel codec bileşenleri (libjpeg vb.) tarafından sağlananlar dışındaki renk alanı dönüştürme işlevleri;
- Renk yönetimi işlevleri (ICC profillerinin kullanımı vb.)
C'de kod çözmenin en basit örneği:
struct sail_context *context;
SAIL_TRY(sail_init(&context));
struct sail_image *image;
unsigned char *image_pixels;
SAIL_TRY(sail_read(yol,
bağlam,
&resim,
(void **)&image_pixels));
/*
* Burada alınan pikselleri işleyin.
* Bunu yapmak için image->width, image->height, image->bytes_per_line'ı kullanın,
* ve resim->pixel_format.
*/
/* Temizlemek */
ücretsiz(image_pixels);
sail_destroy_image(resim);
API seviyelerinin kısa açıklaması:
- Çaylak: "Sadece bu JPEG'i indirmek istiyorum"
- Gelişmiş: "Bu animasyonlu GIF'i bellekten yüklemek istiyorum"
- Derin deniz dalgıcı: "Bu animasyonlu GIF'i bellekten yüklemek ve seçtiğim codec'ler ve piksel çıktısı üzerinde tam kontrole sahip olmak istiyorum."
- Teknik Dalgıç: “Yukarıdaki her şeyi ve kendi veri kaynağımı istiyorum”
Aynı bölgeden doğrudan rakipler:
- FreeImage
- Şeytan
- SDL_Resmi
- WIC
- imlib2
- Boost.GIL
- gdk-pixbuf
Diğer kütüphanelerden farkları:
- Beklenen varlıklara (resimler, paletler vb.) sahip İnsan API'si.
- Çoğu codec bileşeni yalnızca RGB/RGBA piksellerinden daha fazlasını üretebilir.
- Çoğu codec bileşeni, RGB'ye dönüştürmeden orijinal piksellerin çıktısını alabilir.
- Codec'leri herhangi bir dilde yazabilir ve ayrıca tüm projeyi yeniden derlemeden bunları ekleyebilir/kaldırabilirsiniz.
- Orijinal görüntü hakkındaki bilgileri koruyun.
- “Sondalama”, piksel verilerinin kodunu çözmeden bir görüntü hakkında bilgi edinme işlemidir.
- Boyut ve hız.
Kaynak: opennet.ru
