pam - Formato de bitmap bidimensional comum do Netpbm
GERAL
O formato de imagem PAM é um formato de mapa bidimensional de denominador comum.
Ele é projetado para ser usado para qualquer tipo de gráficos, mas teoricamente pode ser usado para qualquer tipo de dado que seja organizado como uma matriz retangular bidimensional. Na verdade, de outra perspectiva, pode ser visto como um formato para dados organizados como uma matriz tridimensional.
O nome "PAM" é um acrônimo derivado de "Portable Arbitrary Map" (Mapa Arbitrário Portátil). Essa derivação faz mais sentido se você considerá-lo no contexto dos outros nomes de formatos do Netpbm: PBM, PGM e PPM.
Este formato não define o significado dos dados em qualquer ponto específico da matriz. Ele pode ser intensidades de luz vermelha, verde e azul, de modo que a matriz represente uma imagem visual, ou pode ser os mesmos componentes vermelho, verde e azul, mais um componente de transparência, ou pode conter as precipitações anuais de locais na superfície da Terra. Qualquer processo que use o formato PAM deve definir ainda mais o formato para especificar o significado dos dados.
Uma imagem PAM descreve uma grade bidimensional de tuplas. As tuplas são organizadas em linhas e
colunas. A largura da imagem é o número de colunas. A altura da imagem é o número de linhas. Todas
as linhas têm a mesma largura e todas as colunas têm a mesma altura. As tuplas podem ter qualquer grau,
mas todas as tuplas têm o mesmo grau. O grau das tuplas é chamado de profundidade da imagem. Cada
membro de uma tupla é chamado de amostra. Uma amostra é um inteiro não assinado que representa um
locus ao longo de uma escala que começa em zero e termina em um determinado valor máximo chamado
maxval. O maxval é o mesmo para cada amostra na imagem. A matriz bidimensional de todas as amostras N-ésimas
de cada tupla é chamada de plano N-ésimo ou canal N-ésimo da imagem.
Embora o formato básico não atribua nenhum significado aos valores da tupla, ele inclui uma string opcional que descreve esse significado. O conteúdo desta string, chamado de tipo de tupla, é arbitrário do ponto de vista do formato PAM básico, mas os usuários do formato podem atribuir-lhe significado por convenção, para que possam identificar suas implementações particulares do formato PAM. Alguns tipos de tupla são definidos como subformatos oficiais do PAM. Veja Tipos de Tupla Definidos.
O Universo Confuso dos Formatos Netpbm
É fácil ficar confuso sobre o relacionamento entre o formato PAM e PBM, PGM, PPM e PNM. Aqui está um pouco de esclarecimento:
"PNM" não é realmente um formato. É uma abreviação para os formatos PBM, PGM e PPM coletivamente.
Também é o nome de um grupo de funções de biblioteca que podem lidar com todos os três formatos.
"PAM" é, de fato, um quarto formato. Mas é tão geral que você pode representar as mesmas informações em uma imagem PAM como pode em uma imagem PBM, PGM ou PPM. E, de fato, um programa que é projetado para ler PBM, PGM ou PPM e faz isso com uma versão recente da biblioteca Netpbm, lerá uma imagem PAM equivalente sem problemas, e o programa nem perceberá a diferença.
Para complicar ainda mais, existe uma coleção de rotinas de biblioteca chamadas funções "pam" que lêem e gravam o formato PAM, mas também leem e gravam os formatos PBM, PGM e PPM. Eles fazem isso porque os últimos formatos são muito mais antigos e populares, então até mesmo um novo programa deve funcionar com eles. Ter a biblioteca lidando com todos os formatos torna mais fácil escrever programas que também usam o formato PAM mais recente.
O LAYOUT
Uma maneira conveniente de ler e gravar o formato PAM com precisão é através da biblioteca de sub-rotinas C libnetpbm(1).
Um arquivo PAM consiste em uma sequência de uma ou mais imagens PAM. Não há dados, delimitadores ou preenchimento antes, depois ou entre as imagens.
Cada imagem PAM consiste em um cabeçalho seguido imediatamente por um raster.
Aqui está um exemplo de cabeçalho:
P7
WIDTH 227
HEIGHT 149
DEPTH 3
MAXVAL 255
TUPLTYPE RGB
ENDHDR
O cabeçalho começa com os caracteres ASCII "P7" seguidos por uma nova linha. Este é o número mágico.
Nota: as imagens de miniaturas xv também começam com o número mágico "P7". (Este e o PAM foram extensões independentes dos formatos Netpbm). O restante do formato torna fácil distinguir o PAM desse formato).
O cabeçalho continua com um número arbitrário de linhas de texto ASCII. Cada linha termina com um caractere de nova linha e é delimitada por ele.
Cada linha de cabeçalho consiste em zero ou mais tokens delimitados por espaços ou começa com "#". Se começar com "#", é um comentário e o restante desta especificação não se aplica a ele.
Uma linha de cabeçalho que tem zero tokens é válida, mas não tem significado.
O tipo de linha de cabeçalho é identificado por seu primeiro token, que tem 8 caracteres ou menos:
ENDHDR Esta é a última linha do cabeçalho. O cabeçalho deve conter exatamente uma dessas linhas de cabeçalho.
HEIGHT O segundo token é um número decimal que representa a altura da imagem (número de linhas). O cabeçalho deve conter exatamente uma dessas linhas de cabeçalho.
WIDTH O segundo token é um número decimal que representa a largura da imagem (número de colunas). O cabeçalho deve conter exatamente uma dessas linhas de cabeçalho.
DEPTH O segundo token é um número decimal que representa a profundidade da imagem (número de planos ou canais). O cabeçalho deve conter exatamente uma dessas linhas de cabeçalho.
MAXVAL O segundo token é um número decimal que representa o maxval da imagem. O cabeçalho deve conter exatamente uma dessas linhas de cabeçalho.
TUPLTYPE
O cabeçalho pode conter qualquer número dessas linhas de cabeçalho, incluindo zero. O restante da linha faz parte do tipo de tupla. O restante da linha não é tokenizado, mas o tipo de tupla não inclui nenhum espaço em branco imediatamente após TUPLTYPE ou no final da linha. Ele não inclui uma nova linha. Deve haver algo diferente de espaço em branco após o token TUPLTYPE.
Se houver várias linhas de cabeçalho TUPLTYPE, o tipo de tupla é a concatenação dos valores de cada uma delas, separados por um único espaço em branco, na ordem em que aparecem no cabeçalho. Se não houver linhas de cabeçalho TUPLTYPE, o tipo de tupla é uma string nula.
O raster consiste em cada linha da imagem, em ordem de cima para baixo, consecutivas sem nenhum delimitador de qualquer tipo entre, antes ou depois das linhas.
Cada linha consiste em cada tupla da linha, em ordem da esquerda para a direita, consecutivas sem nenhum delimitador de qualquer tipo entre, antes ou depois das tuplas.
Cada tupla consiste em cada amostra da tupla, em ordem, consecutivas sem nenhum delimitador de qualquer tipo entre, antes ou depois das amostras.
Cada amostra consiste em um inteiro sem sinal em formato binário puro, com o byte mais significativo primeiro. O número de bytes é o número mínimo de bytes necessários para representar o maxval da imagem.
O caractere referido como "nova linha" aqui é o caractere conhecido em ASCII como Avanço de Linha ou LF.
LIMITAÇÕES
Altura, largura, profundidade e maxval são pelo menos 1.
Altura, largura e profundidade não têm um máximo definido, mas processadores e geradores de imagens geralmente têm suas próprias limitações.
O maxval de uma imagem nunca é maior que 65535. (A razão pela qual é limitado é para facilitar a construção de um processador de imagem, no qual os valores aritméticos intermediários geralmente têm que se ajustar a 31 ou 32 bits). Não havia limitação especificada antes de outubro de 2005, mas essencialmente todas as implementações sempre a observaram.
TIPOS DE TUPPLA DEFINIDOS
Alguns tipos de tupla são definidos nesta especificação para especificar subformatos oficiais de PAM para aplicações particularmente populares do formato. Os usuários do formato também podem definir seus próprios tipos de tupla e, assim, seus próprios subformatos.
O tipo de tupla afeta apenas os significados das amostras (que são inteiros sem sinal) nas tuplas da imagem. Não afeta como as amostras ou tuplas são codificadas. O tipo de tupla pode afetar o significado da posição de uma tupla na matriz (por exemplo, pode indicar em uma imagem visual que uma tupla na Linha 1 é uma na parte superior da imagem em vez da inferior).
O tipo de tupla nunca determina quantas amostras existem em uma tupla (isso é determinado pela linha de cabeçalho DEPTH). Pode-se dizer que o tipo de tupla implica uma profundidade (número de amostras por tupla), porque certos tipos de tupla são válidos apenas em combinação com certos valores DEPTH, mas é uma boa prática de programação usar DEPTH para a profundidade ao decodificar o raster e validar separadamente que a profundidade é consistente com o tipo de tupla. Além disso, é uma boa prática aceitar uma profundidade que seja muito grande e simplesmente ignorar os planos de número mais alto.
PAM Usado para Imagens Visuais
Um uso comum de imagens PAM é representar imagens visuais, como as que são normalmente representadas pelas imagens nos formatos mais antigos e concretos PBM, PGM e PPM.
Preto e Branco
Uma imagem em preto e branco, como seria representada por uma imagem PBM, tem um tipo de tupla de "BLACKANDWHITE". Uma imagem PAM desse tipo tem uma profundidade de 1 e maxval 1, onde a única amostra em cada tupla é 0 para representar um pixel preto e 1 para representar um pixel branco. O maxval, altura, largura e ordem das tuplas no raster têm a relação óbvia com os da imagem PBM equivalente.
Observe que no formato PBM, um valor de amostra de zero significa branco, mas em PAM, zero significa preto.
Escala de Cinza
Uma imagem em escala de cinza, como seria representada por uma imagem PGM, tem um tipo de tupla de "GRAYSCALE". Uma imagem PAM desse tipo tem uma profundidade de 1. O maxval, altura, largura e raster têm a relação óbvia com os da imagem PGM equivalente.
Cor
Uma imagem colorida, como seria representada por uma imagem PPM, tem um tipo de tupla de "RGB". Uma imagem PAM desse tipo tem uma profundidade de 3. O maxval, altura, largura e raster têm a relação óbvia com os da imagem PPM equivalente. O primeiro plano representa o vermelho, o segundo o verde e o terceiro o azul.
Transparente
Cada um dos formatos de imagem visual mencionados acima tem uma variação que contém informações de transparência. Nessa variação, o tipo de tupla tem "_ALPHA" adicionado (por exemplo, "RGB_ALPHA") e um plano a mais. O plano de número mais alto é o plano de opacidade (às vezes chamado de plano alfa ou plano de transparência).
Nesse tipo de imagem, a cor representada por um pixel é, na verdade, uma combinação de uma cor de primeiro plano especificada explicitamente e uma cor de fundo a ser identificada posteriormente.
Os planos diferentes do plano de opacidade descrevem a cor de primeiro plano. Uma amostra no plano de opacidade indica o quão opaco é o pixel, indicando qual fração da luz do pixel vem da cor de primeiro plano. O restante da luz do pixel vem da cor de fundo (não especificada).
Por exemplo, em uma imagem GRAYSCALE_ALPHA, suponha que o Plano 0 indica um tom de cinza 60% do branco e o Plano 1 indica opacidade de 25%. A cor de primeiro plano é o cinza 60% e 25% disso contribui para a cor final do pixel. Os outros 75% vêm de alguma cor de fundo. Então, suponha ainda que a cor de fundo do pixel seja branco total. Então, a cor do pixel é 90% do branco: 25% do primeiro plano 60%, mais 75% do fundo 100%.
O valor da amostra é a fração de opacidade, conforme descrito, como uma fração do maxval. Observe que não é ajustado pelo gama como as amostras de cor de primeiro plano.
TIPO DE MÍDIA DA INTERNET
Nenhum tipo de mídia da Internet (também conhecido como tipo MIME, tipo de conteúdo) para PAM foi registrado com a IANA, mas o valor não oficial image/x-portable-arbitrarymap é atribuído por esta especificação, para ser consistente com os valores convencionais para os formatos Netpbm mais antigos.
NOME DO ARQUIVO
O sufixo convencional para o nome de um arquivo PAM é ".pam". No entanto, isso não é obrigatório.
VEJA TAMBÉM
Netpbm(1), pbm(1), pgm(1), ppm(1), pnm(1), libnetpbm(1)
FONTE DO DOCUMENTO
Esta página de manual foi gerada pela ferramenta Netpbm 'makeman' a partir de uma fonte HTML. A documentação principal está em
http://netpbm.sourceforge.net/doc/pam.html