Biblioteca de decodificação de imagens SAIL disponível

Sob licença do MIT publicado biblioteca de decodificação de imagens multiplataforma SAIL. SAIL é uma reformulação da marca de codecs de um visualizador de imagens há muito não suportado, reescrito em C KSquirrelGenericName, mas com uma API abstrata de alto nível e inúmeras melhorias. Público-alvo: visualizadores de imagens, desenvolvimento de jogos, carregamento de imagens na memória para outros fins. A biblioteca está em desenvolvimento, mas já pode ser utilizada. A compatibilidade do binário e do código-fonte não é garantida neste estágio de desenvolvimento.

Características:

  • Uma biblioteca simples, compacta e rápida escrita em C sem dependências de terceiros (exceto codecs);
  • API simples, compreensível e ao mesmo tempo poderosa para todas as necessidades;
  • Ligações para C++;
  • Os formatos de imagem são suportados por codecs carregados dinamicamente;
  • Leia (e grave) imagens de um arquivo, memória ou até mesmo de sua própria fonte de dados;
  • Determinar o tipo de imagem por extensão de arquivo ou por número mágico;
  • Formatos atualmente suportados: APNG (leitura, somente Windows), JPEG (leitura, gravação) PNG (leitura, gravação).
    O trabalho está em andamento para adicionar novos formatos. KSquirrel-libs suportava cerca de 60 formatos de uma forma ou de outra, os formatos mais populares são os primeiros da fila;

  • As operações de leitura sempre podem gerar pixels nos formatos RGB e RGBA;
  • Alguns codecs podem gerar pixels em uma lista ainda maior de formatos;
  • A maioria dos codecs também pode gerar pixels SOURCE. Isto é útil, por exemplo, para quem deseja obter informações completas de imagens CMYK ou YCCK;
  • Ler e escrever perfis ICC;
  • Exemplos em C, Qt, SDL;
  • Plataformas suportadas:
    Windows (instalador), macOS (brew) e Linux (Debian).

O que o SAIL não oferece:

  • Edição de imagem;
  • Funções de conversão de espaço de cores diferentes daquelas fornecidas pelos codecs subjacentes (libjpeg, etc.);
  • Funções de gerenciamento de cores (uso de perfis ICC, etc.)

O exemplo mais simples de decodificação em C:

estrutura vela_context *contexto;

SAIL_TRY(sail_init(&contexto));

struct vela_imagem *imagem;
caractere não assinado *image_pixels;

SAIL_TRY(sail_read(caminho,
contexto,
&imagem,
(void **)&image_pixels));

/*
* Aqui processe os pixels recebidos.
* Para fazer isso, use imagem->largura, imagem->altura, imagem->bytes_per_line,
* e imagem->formato_pixel.
*/

/* Limpar */
grátis(imagem_pixels);
Sail_destroy_image(imagem);

Breve descrição dos níveis de API:

  • Novato: “Só quero baixar este JPEG”
  • Avançado: “Quero carregar este GIF animado da memória”
  • Mergulhador de águas profundas: “Quero carregar este GIF animado da memória e ter controle total sobre os codecs e a saída de pixels que eu escolher.”
  • Mergulhador Técnico: “Quero tudo acima e minha própria fonte de dados”

Concorrentes diretos da mesma área:

  • FreeImage
  • Diabo
  • SDL_Image
  • WIC
  • imlib2
  • Boost.GIL
  • gdk-pixbuf

Diferenças de outras bibliotecas:

  • API humana com entidades esperadas – imagens, paletas, etc.
  • A maioria dos codecs pode produzir mais do que apenas pixels RGB/RGBA.
  • A maioria dos codecs pode gerar pixels originais sem conversão para RGB.
  • Você pode escrever codecs em qualquer linguagem e também adicioná-los/removê-los sem recompilar o projeto inteiro.
  • Preservar informações sobre a imagem original.
  • “Sondagem” é o processo de obtenção de informações sobre uma imagem sem decodificar os dados do pixel.
  • Tamanho e velocidade.

Fonte: opennet.ru

Adicionar um comentário