Next: , Previous: Objetos de aparencia, Up: Objetos nao-geometricos


4.3.2 Objetos de imagem

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:

MASCDEST
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:

LUMINANCE
o mesmo que ‘1’, ‘0x1’, ‘\01
LUMINANCE_ALPHA
o mesmo que ‘3’, ‘0x3’, ‘\03
RGB
o mesmo que ‘7’, ‘0x7’, ‘\07
RGBA
o mesmo que ‘15’, ‘0xf’, ‘\017
ALPHA
dependendo 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.

AUTO
Dados 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’.

FILTER
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:

Descompressão de Dados
z
gz
gzip
os dados são direcionados por ‘gzip -dc
bz2
bzip2
os dados são direcionados por ‘bzip2 -dc

Formatos de Imagem
tiff
tif
Formato de imagem TIFF. Somente suportado se o executável tifftopnm puder ser executado no caminho de execução atual.
png
Formato de imagem PNG. Somente suportado se o executável pngtopnm puder ser executado no caminho de execução atual.
jpg
jpeg
Formato de imagem JPEG. Somente suportado se o executável jpegtopnm puder ser executado no caminho de execução atual.
gif
Formato de imagem GIF image file format. Somente suportado se o executável giftoppm puder ser executado no caminho de execução atual.
raw
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).

Filtros Explicitamente Especificados
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.