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çõesdata
descrita adiante, se possível) "maxval" (não suportado, obrigatoriamente deve ser255
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:
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:
LUMINANCE
LUMINANCE_ALPHA
RGB
RGBA
ALPHA
... 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.
AUTO
AUTO
não pode trabalhar com dados de imagem no formato ‘raw’.
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:
TIFF
. Somente suportado se o executável
tifftopnm
puder ser executado no caminho de execução atual.
PNG
. Somente suportado se o executável
pngtopnm
puder ser executado no caminho de execução atual.
JPEG
. Somente suportado se o executável
jpegtopnm
puder ser executado no caminho de execução atual.
GIF
image file format. Somente suportado se o executável
giftoppm
puder ser executado no caminho de execução atual.
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.