Formatos

BMP (Windows 3.x ou OS/2 1.x Device Independent Bitmaps)

O formato suporta imagens com 1, 4, 8, 16, 24 ou 32 bits per pixel. As imagens de até 8 bits por pixel podem estar comprimidas com algoritmo semelhante ao padrão RLE (exceto 1 bpp) e possuem uma palette RGB associada.

As imagens com mais de 8 bits per pixel não podem ser comprimidas e representam a cor RGB diretamente. Em 16 bits per pixel as combinações mais usuais para os bits de um pixel são 5-5-5 ou 5-6-5, para respectivamente R-G-B. Em 32 bits geralmente a cor é representada com 24 bits mais um byte extra para o canal alfa.

O formato é acessado na sua completude, incluindo imagens comprimidas. Mas imagens com 4 bpp comprimidas não são suportadas. O formato pode possuir informação de resolução definida em pixels por centimetro.

PCX (ZSoft PC-PaintBrush Picture)

O formato suporta imagens com 1, 4, 8 ou 24 bits per pixel. Todos os bpp disponíveis podem ser comprimidos com algoritmo semelhante ao padrão RLE. Recomenda-se o uso do formato sempre comprimido para melhor compatibilidade com aplicações existentes, pois algumas delas julgam que o PCX sempre estará comprimido e tentam invariavelmente descomprimi-lo, mesmo que não o esteja gerando erros diversos.

O formato é acessado na sua completude. O formato pode possuir informação de resolução definida em pixels por polegada.

GIF (Compuserve Graphics Interchange Format)

O formato suporta imagens com 1, 4 ou 8 bits per pixel. Não podem ser salvas imagens RGB comprimidas ou não, o formato não suporta.

Pela especificação todas as imagens seriam sempre comprimidas com o algoritmo LZW. Mas a IM implementa um algoritmo de compressão falsa para o GIF de forma que não fica sujeita a Patente do algoritmo que pertence a Unisys. Se for especificado IM_COMPRESSED, em vez de IM_DEFAULT, a compressão LZW é utilizada, neste caso a aplicação cliente deve ter um contrato de licensa feito com a Unisys. Veja em http://corp2.unisys.com/LeadStory/lzwfaq.html.

O formato pode conter mais de uma imagem, apenas a primeira imagem é lida, as outras são ignoradas. O formato pode possuir informação de resolução definida em pixels por polegada.

TIF (TIFF, Tagged Image File Format)

Devido a vasta possibilidades de imagens neste formato convém lembrar que a biblioteca se resumirá a ler imagens com 1, 4, 8, e 24 bpp, seguindo o Baseline TIFF. As imagens podem estar comprimidas nos padrões CITT3, Huffman, LZW e PackBits. A IM irá salvar imagens comprimidas usando o formato Packbits. O formato pode possuir informação de resolução definida em pixels por centimetro ou em pixels por polegada.

Consideramos o TIFF como o formato mais completo e mais bem suportado pelas aplicações para armazenamento de imagens.

Está sendo usada a biblioteca de domínio público LibTiff © Sam Leffer, que sofre atualizações periódicas, ver em http://www-mipl.jpl.nasa.gov/~ndr/tiff/ ou ftp://sgi.com/graphics/tiff.

SGI (BW/RGB/RGBA, Silicon Graphics)

O formato suporta imagens com 8, 24 ou 32 bits per pixel. Mas cada pixel pode conter também dois bytes por canal, resultando em imagens de 16, 48 e 64 bpp. No caso de dois bytes por canal o formato fornece o maior valor que corresponde ao branco e o menor valor que corresponde ao preto, para que possamos converter para valores entre 0 e 255. O formato suporta compressão usando um algoritmo semelhante ao padrão RLE.

As imagens de 8 bpp com 1 ou 2 bytes são sempre tons de cinza. Exceto numa especificação obsoleta onde a imagem possue uma palette fixa. O formato pode conter uma palette em vez de uma imagem, este modo não é suportado.

Não está implementado o suporte para escrita de imagens comprimidas, pois não conhecemos o algoritmo de compressão. É feito a leitura de imagens comprimidas e pode-se testar o algoritmo de descompressão pois foram encontrados exemplos para isso.

RAS (Sun RasterFile)

O formato suporta imagens com 1, 8, 24 ou 32 bits per pixel. As imagens de até 8 bpp podem ser tons de cinza. O formato suporta compressão usando um algoritmo semelhante ao padrão RLE.

Não está implementado o suporte para escrita de imagens comprimidas, pois não conhecemos o algoritmo de compressão do mesmo, embora saibamos o de descompressão. Embora o algoritmo de leitura do formato RAS comprinido esteja implementado, não se encontrou nenhum programa comercial ou público que gerasse um RAS comprimido para testes.

JPG (JPEG, Join Photographic Experts Group)

O formato suporta imagens com 8, 24 ou 32 bits per pixel. Imagens de 8 bpp são sempre tons de cinza. Imagens com mais de 8 bpp podem ser RGB, CMYK, YCbCr ou YCCK, todos esses formatos são convertidos para o formato RGB. O formato pode possuir informação de resolução definida em pixels por centimetro ou em pixels por polegada.

O formato é sempre comprimido usando a compressão JPEG com perdas. As mesmas só são notadas para imagens com poucos detalhes onde pequenas mudaças são facilmente notadas.

Devido à complexidade da compressão JPEG usamos uma biblioteca de domínio público desenvolvida pelas pessoas do próprio grupo JPEG, ver em ver em ftp://ftp.uu.net/graphics/jpeg.

LED (IUP/LED, Linguagem de Especificação de Diálogos)

Esse não é propriamente um formato de imagem, mas conter imagens e por sua difusão no TeCGraf foi necessário inclui-lo na IM. O formato suporta apenas imagens de 8 bpp, não comprimidas. Assim não é possível gravar imagens RGB de 24 bpp.

Por ser um arquivo texto pode ser facilmente editado, mas implica em arquivos muito grandes se a imagem for grande. É usado mais para imagens pequena, por exemplo 32x32 pixels, para uso em botões e diálogos.

O formato contém muitas outras informações além da imagem, por ser uma arquivo texto de fácil acesso optou-se por forçar o usuário a criar um arquivo separado para que a IM possa le-lo. Neste novo arquivo remova todos os comentários e coloque a declaração da imagem no início do mesmo e com as letras LED como as três primeiras letras do arquivo.

Por exemplo:

LEDImage = IMAGE[
0= "0 0 0",
1= "192 192 192",
2= "0 0 128",
3= "255 255 255"]
(20,19
,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 etc...

A IM irá salvar um arquivo exatamente com esssa características para ser posteriormente incluido em outro arquivo LED.

TGA (True Vision Targa)

O formato suporta imagens RGB, RGB indexadas por palette e tons de cinza. As imagens pode ser comprimidas no padrão RLE.

O formato é acessado na sua completude, mas são acessadas apenas imagens com 8, 16, 24 e 32 bits per pixel.


Quadro Comparativo

  8 BPP 24 BPP
  Not Compressed Compressed Not Compressed Compressed
  Read Write Read Write Read Write Read Write
PCX Ok OkN Ok Ok Ok OkN Ok Ok
BMP Ok Ok Ok Ok Ok Ok --- ---
TIF Ok Ok Ok Ok Ok Ok Ok Ok
SGI Ok OkG Ok ??? Ok Ok Ok ???
RAS Ok Ok *** ??? Ok Ok *** ???
GIF --- --- Ok Ok --- --- --- ---
JPG --- --- Ok OkG --- --- Ok Ok
TGA Ok Ok Ok Ok Ok Ok Ok Ok
LED Ok Ok --- --- --- --- --- ---

Legenda:
Ok - Implementado e funcionando de acordo.
OkG - Somente como gray scale.
OkN - Não recomendado.
--- - Não aplicável.
??? - Não implementado pois não tem documentação.
*** - Implementado mas sem exemplos para testes.

Comentários

Convém lembrar que imagens de até 8 bits per pixel são convertidas para 8 bpp. E imagens com mais de 8 bpp são convertidas para 24 bpp. A representação de cor é sempre RGB. Imagens tons de cinza são retornadas com uma palette de tons de cinza. A função imSaveMap sempre salva a imagem com 8 bpp e a função imSaveRGB sempre salva a imagem com 24 bpp. Se o formato só suporta imagens tons de cinza para 8 bpp então a imagem é automaticamente convertida para tons de cinza antes de ser salva.

A função imLoadRGB fará com que imagens de até 8 bpp sejam convertidas para 24 bpp. A função imLoadMap retorna erro se a imagem a ser lida for com mais de 8 bpp.

Existem formatos que não suportam imagens com mais de 24 bpp fazendo com que a função imSaveRGB retorne erro.

A opção de compressão nos diversos formatos não obedece padrão algum entre sí, cada formato implementa a sua própria ou variação de alguma conhecida. Se for especificado que a imagem deve ser comprimida e o formato não suporta compressão, ou for especificado que a imagem não deve ser comprimida e o formato exige compressão as funções imSaveMap e imSaveRGB retornarão erro.

A compressão RLE é mais adequada para imagens com muitas áreas uniformes. Quando a imagen possue muita informação distinta o arquivo pode ser maior que o não comprimido.