Objetos de imagem são usados para especificar dados de pixmap ou para texturas (Veja Mapeamento de Textura), ou para imagens de fundo de câmeras (Veja Objetos de camera).
Ao mesmo tempo em que imagens são escritas elas são também comprimidas de 1 a 4 canais, um
canal fornece um número simples no intervalo que vai de 0 a maxval
para cada ponto de imagem (pixel); e maxval é colocado em 255. A interpretação dos dados de imagem dependente do número de canais é como segue:
| #Canais | No. do Canal | Interpretação |
|---|---|---|
| 1 | 1 | escala de cinza ou dados de luminância |
| 2 | 1 | escala de cinza ou dados de luminância |
| 2 | canal alfa (0: transparente, maxval: opaco) |
| 3 | 1 | canal vermelho |
| 2 | canal verde | |
| 3 | canal azul | |
| 4 | 1 | canal vermelho |
| 2 | canal verde | |
| 3 | canal azul | |
| 4 | canal alfa (0: transparente, maxval: opaco) |
Dados de imagem podem ser especificados inline (embutidos dentro do fluxo de dados atual) ou via referências de arquivos; em ambos os casos os dados são lidos e interpretados ao mesmo tempo que o objeto de imagem é passado. Essa forma é diferente da antiga (e desatualizada) forma de especificação de textura de imagem, onde os dados de imagem em uma mídia podem eventualmente serem re-lidos pelo Geomview.
A sintaxe geral de objetos de imagem é como segue:
<image> ::=
[ "{" ] (abertura de chave, geralmente precisam informar
o fim do objeto de forma clara.)
[ "image" ] (palavra chave opcional; desnecessária se o tipo
é determinado pelo contexto, o que
usualmente acontece.)
[ "define" <nome> ]
(define uma imagem chamada <nome>, escolhendo
seus valores a partir do material adiante)
|
"<" <nomedearquivo> (significando: leia a imagem de contida
em nomedearquivo)
|
":" <nome> (significando: use a variável nome,
definida em algum lugar; se a variável não
for definida em algum lugar a imagem
é tida como vazia)
|
(material atual de definição de imagem; dados
da imagem obrigatóriamente vêm por ultimo,
após a definição da largura e da altura
e do número de canais)
"width" (largura da imagem, detectado automaticamente
a partir dos dados da imagem se possível)
"height" (altura da imagem, detectado automaticamente
a partir dos dados da imagem se possível)
"channels" (número de canais, detectado automaticamente
a partir dos dados da imagem e a partir das
especificações data descrita
adiante, se possível)
"maxval" (não suportado, obrigatoriamente deve ser 255 se
especificado)
"data MASCDEST [FILTER] [{] < NOMEDOARQUIVO [}]"
"data MASCDEST [FILTER] TAMAN_IMAGEM [{][\n]DADOS_LIT_IMAGEM[}]"
(dados de imagem ou externos ou embutidos,
veja abaixo para uma descrição detalhada do
significado de MASCDEST e FILTER. Uma imagem
pode -e tem, em geral- multiplas seções de
dados.)
[ "}" ] (fechamento correspondente da chave)
Detalhes relativos à especificação dos dados de uma imagem:
Esse é um campo-bit descrevendo onde os dados da imagem especificada devem ser
colocados no pixmap de destino. O campo-bit é especificado por meio de um
inteiro em um dos formatos conhecidos (decimal, octal, hexadecimal). Os
canais dos dados fonte são sempre enumerados consecutivamente. Se,
e.g. ‘NOMEDOARQUIVO’ ou ‘DADOS_LIT_IMAGEM’ especificam um
imagem (provavelmente RGB …) de três canais e ‘MASCDEST’ for igual a
0xD (i.e. o primeiro bit é 0), então o terceiro canal do pixmap fonte
pode ser substituído no quarto canal do objeto imagem de destino (o
canal alfa), o segundo canal pode determinar o valor de destino
‘azul’ e o primeiro canal da fonte determina o valor de destino
correspondente ao ‘vermelho’.
O número de canais dos dados fontes sempre tem que coincidir com o número de bits especificado como ‘MASCDEST’. Exceção: se o pixmap fonte possui somente um canal, então o número de canais dos dados fonte pode ser usado para preencher qualquer número de canais de destino; todos os canais especificados em ‘MASCDEST’ são preenchidos com os dados do canal simples do pixmap fonte.
Geomview conhece as seguintes constantes simbólicas, que podem ser usadas em lugar de especificar o campo-bit ‘MASCDEST’ numericamente:
LUMINANCEo mesmo que ‘1’, ‘0x1’, ‘\01’
LUMINANCE_ALPHAo mesmo que ‘3’, ‘0x3’, ‘\03’
RGBo mesmo que ‘7’, ‘0x7’, ‘\07’
RGBAo mesmo que ‘15’, ‘0xf’, ‘\017’
ALPHAdependendo do contexto: o número absoluto de canais deve obrigatoriamente ser conhecido; i.e. ‘data ALPHA …’ deve obrigatoriamente ser colocado antes de alguma coisa de forma a determinar o número de canais da imagem, e.g.
... data RGB ... data ALPHA ...
é válido, mas
<nenhumoutrocanalouespecificaçãodedadosdeimagem> data ALPHA ... <todo o resto ...>
não é válido, porque Geomview não tem meios de determinar o canal de destino a partir do contexto.
AUTODados de imagem no formato PGM é interpretado como canal simples em escala de cinza, dados RGB PNM
como dados de imagem RGB. AUTO não pode trabalhar com dados de imagem no formato ‘raw’.
A especificação ‘FILTER’ é opcional. se for omitida, então Geomview tenta determinar o tipode imagem usando o sufixo de ‘NOMEDOARQUIVO’. Se ão houver sufixo ou o sufixo for desconhecido, ou para dados embutidos de imagem, Geomview está apto a auto-detectar o formato do arquivo de imagem SGI (por razões históricas …) e formatos de imagem NetPBM (por razões práticas). A auto-detecção de formatos NetPBM incluem o novo formato de imagem PAM que permite (em meio a um monte de outras coisas) armazenar um canal alfa juntamente com os dados de luminânica ou de RGB. Da mesma forma, a saída final de qualquer dos filtros especificados devem ou ser no formato de arquivo de imagem SGI, ou especificar uma imagem PAM, PNM ou PGM. Se o formato de arquivo de imagem não puder ser determinado por ou pelo sufixo do nome de arquivo ou pela especificação de filtro ou pela auto-detecção de dados SGI ou NetPBM, então Geomview assume que os dados sejam "raw". Veja abaixo.
Os filtros de descompressão podem ser deduzidos ou de um dos formatos de imagem conhecidos ou de um especificador de filtro explícito, e.g. o seguinte é válido:
data LUMINANCE raw.gzip { < arquivoemtonsdecinzagzipado }
A linha acima deve ser equivalente a
data LUMINANCE raw { < arquivoemtonsdecinza },
fornece dados descomprimidos realizados através de dados de canal simples, com o primeiro pixel correspondendo ao canto inferior esquerdo (devido ao formato ‘raw’ de imagem, veja abaixo).
Geomview tem conhecimento interno dos seguintes filtros/sufixos:
os dados são direcionados por ‘gzip -dc’
os dados são direcionados por ‘bzip2 -dc’
Formato de imagem TIFF. Somente suportado se o executável
tifftopnm puder ser executado no caminho de execução atual.
Formato de imagem PNG. Somente suportado se o executável
pngtopnm puder ser executado no caminho de execução atual.
Formato de imagem JPEG. Somente suportado se o executável
jpegtopnm puder ser executado no caminho de execução atual.
Formato de imagem GIF image file format. Somente suportado se o executável
giftoppm puder ser executado no caminho de execução atual.
Dados de imagem em Raw; o número de canais deve coincidir com o número de bits informado em ‘MASCDEST’. Pixels são especificados com 1 byte por canal. Os pixels são organizados em linhas como em ‘liminance[-alpha]’ ou em amostras ‘RGB[A]’. O pixel mais à esquerda é o primeiro pixel em cada linha de dados, a linha de dados mais acima deve vir primeiramente (isso é apenas o mesmo que a convenção de NetPBM, os sistemas de coordenadas de imagem têm sua orígem no canto superior esquerdo, da forma usual).
Se nenhum dos sufixos especificados acima coincidirem, então o
sufixo/filtro é interpretado como um filtro de programa externo; o programa do
filtro externo deve ler de STDIN (da entrada padrão) e escrever para STDOUT (a saída padrão). A
saída deve ou ser no formato de imagem SGI, ou no formatos de image
PNM ou PGM. De outra forma os dados de saída são interpretados como dados de imagem no formato raw (veja
acima).
Alguma coisa como o seguinte pode trabalhar, garantindo que o programa ${HOME}/bin/bububfilter exista, seja executável e faça alguma coísa útil:
...
data RGB "${HOME}/bin/bububfilter.bzip2" 7
{ # dados binários seguem
bububub
}
...
Note que – previamente fornecendo os dados para ‘bububfilter’ – Geomview irá tentar descompactar o material com ‘bzip2 -dc’.
Omitindo dados de imagem: Normalmente, o número de canais de imagem é
determinado automaticamente a partir das especificações dos dados de imagem; se
a especificação de imagem carrega um número explícito de canais via
palavra chave channels que excede o número de canais encontrado nas
especificações de dados, ou se a união de todas
as especificações ‘MASCDEST’ possuem buracos, então omitindo luminância e
canais RGB são initializados para 0, e um canal alfa omitido é
inicializado para maxval, i.e. omitindo os dados do canal alfa para
uma imagem RGBA é apenas o mesmo que definir uma imagem RGB.