Disponibile la libreria di decodifica delle immagini SAIL

Sotto licenza MIT pubblicato libreria di decodifica di immagini multipiattaforma SAIL. SAIL è un rebranding dei codec da un visualizzatore di immagini non supportato da tempo, riscritto in C KSquirrel, ma con un'API astratta di alto livello e numerosi miglioramenti. Destinatari: visualizzatori di immagini, sviluppo di giochi, caricamento di immagini in memoria per altri scopi. La libreria è in fase di sviluppo, ma è già utilizzabile. La compatibilità del codice binario e sorgente non è garantita in questa fase di sviluppo.

Возможности:

  • Una libreria semplice, compatta e veloce scritta in C senza dipendenze di terze parti (eccetto i codec);
  • API semplici, comprensibili e allo stesso tempo potenti per tutte le esigenze;
  • Associazioni per C++;
  • I formati di immagine sono supportati da codec caricati dinamicamente;
  • Leggi (e scrivi) immagini da un file, memoria o anche dalla tua fonte dati;
  • Determinare il tipo di immagine in base all'estensione del file o in base a numero magico;
  • Formati attualmente supportati: png (lettura, solo Windows), JPEG (lettura, scrittura) PNG (lettura, scrittura).
    Sono in corso i lavori per aggiungere nuovi formati. KSquirrel-libs supporta circa 60 formati in un modo o nell'altro, i formati più popolari sono i primi in fila;

  • Le operazioni di lettura possono sempre restituire pixel in formato RGB e RGBA;
  • Alcuni codec possono emettere pixel in un elenco di formati ancora più ampio;
  • La maggior parte dei codec può anche emettere pixel SOURCE. Ciò è utile, ad esempio, per chi vuole ottenere informazioni complete da immagini CMYK o YCCK;
  • Lettura e scrittura di profili ICC;
  • Esempi in C, Qt, SDL;
  • Piattaforme supportate:
    Windows (programma di installazione), macOS (brew) e Linux (Debian).

Cosa non fornisce SAIL:

  • Modifica delle immagini;
  • Funzioni di conversione dello spazio colore diverse da quelle fornite dai codec sottostanti (libjpeg, ecc.);
  • Funzioni di gestione del colore (uso dei profili ICC, ecc.)

L'esempio più semplice di decodifica in C:

struct sail_context *context;

SAIL_TRY(sail_init(&contesto));

struttura sail_image *immagine;
carattere senza segno *image_pixels;

SAIL_TRY(sail_read(percorso,
contesto,
&Immagine,
(vuoto **)&pixel_immagine));

/*
* Qui elabora i pixel ricevuti.
* Per fare questo, usa image->width, image->height, image->bytes_per_line,
* e immagine->pixel_format.
*/

/* Ripulire */
libero(pixel_immagine);
sail_destroy_image(immagine);

Breve descrizione dei livelli API:

  • Principiante: "Voglio solo scaricare questo JPEG"
  • Avanzato: "Voglio caricare questa GIF animata dalla memoria"
  • Subacqueo: "Voglio caricare questa GIF animata dalla memoria e avere il pieno controllo sui codec e sull'output pixel che scelgo."
  • Subacqueo Tecnico: “Voglio tutto quello che c'è sopra e la mia fonte di dati”

Concorrenti diretti della stessa zona:

  • FreeImage
  • Diavolo
  • SDL_Immagine
  • WIC
  • imlib2
  • Potenzia.GIL
  • gdk-pixbuf

Differenze rispetto ad altre biblioteche:

  • API umana con entità previste: immagini, tavolozze, ecc.
  • La maggior parte dei codec può emettere più di semplici pixel RGB/RGBA.
  • La maggior parte dei codec può emettere pixel originali senza conversione in RGB.
  • Puoi scrivere codec in qualsiasi lingua e anche aggiungerli/rimuoverli senza ricompilare l'intero progetto.
  • Conserva le informazioni sull'immagine originale.
  • Il "probing" è il processo per ottenere informazioni su un'immagine senza decodificare i dati dei pixel.
  • Dimensioni e velocità.

Fonte: opennet.ru

Aggiungi un commento