Saltar para o conteúdo

Bitmap: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
(Sem diferenças)

Revisão das 01h32min de 14 de agosto de 2004

Armazenamento de Imagens:

Para armazenar uma imagem é preciso digitalizá-la, ou seja, dividir a imagem em vários pixels. Suponha que queremos guardar a imagem abaixo que está inserida em um espaço de uma polegada quadrada:

[1]

Digitalizando-a temos uma matriz quadrada de 10 x 10, ou seja, 100 pixels. Neste caso, temos uma resolução de 10 pontos por polegada (10dpi). Para melhorar a resolução da imagem, devemos aumentar o número de pontos utilizados. É bom ponderar a relação custo-beneficio, pois quanto melhor a qualidade da imagem, maior é o espaço em disco necessário para armazena-la. Para guardar cada ponto dessa imagem, temos que saber quantas cores são utilizadas em toda a imagem. O número de bits requerido é dois elevado ao número de cores desejadas. No exemplo acima só temos duas cores: preto e branco. Assim, somente um bit é necessário.

Imagem Raster

Uma imagem Raster é uma imagem digital criada ou capturada como um conjunto de pontos de um dado espaço.Uma raster é definida como um vetor retangular(grid) de pixels(pontos de cor) em duas ou três dimensões. A cor de cada pixel é determinada por uma das possíveis combinação de vermelho,verde e azul, ou seja, uma imagem raster opera no RGB color space.Este é o formato "base" que o dispositivos gráficos do computador utiliza para projetar uma imagem em seu monitor, este formato é base para uma gama de outros formatos.

A qualidade de uma imagem raster é determinada pela o número total de pixels(chamado de resolução), e pela quantidade de informação em cada pixel(freqüentemente chamando de color depth).Por exemplo, uma imagem que armazena 24 bits de informação de cor pode ser representada por níveis de camadas de 15 bits por pixel. Mas, deste modo uma imagem de 640 x 480 pixels irá ter 307,200 pixels no total e uma imagem de 1280 x 1024 irá possuir 1,310,720 pixel. Concluímos, portanto, que o raster consome muito espaço para armazenar uma imagem de alta qualidade, por isso se utiliza técnicas de compactação de dados para reduzir o tamanho que a imagem ocupa no disco. Mas algumas destas técnicas provocam perda de informação, em outras palavras, perda de qualidade ao realizar a compressão do tamanho da imagem.Tais técnicas são chamadas de "lossy compression".

Imagens raster não pode ser redimensionadas sem aparente perda de qualidade, ou mais precisamente, quando uma imagem é "rasterized" sua qualidade é fixada e não podemos aprimorar a sua qualidade nos dispositivos gráficos.Este tipo de imagem apresenta qualidade muito melhor do que as imagem baseadas em modelagem geométrica( do inglês: Vector graphics ou geometric modeling) para armazenar imagens ricas em detalhes como fotografias. Muito embora os formatos baseados em modelagem geométrica são capazes de ser redimensionadas.

Raster não é um formato de imagem mas sim um tipo, ou melhor, um estrutura de dados para armazenamento de imagens.Há vários formatos que se baseiam do Raster.


Formatos de Raster:

   * TIFF (Tagged Image File Format) Formato de alta qualidade extensamente suportado de raster.É padrão em áreas como a faxing, imaging and archiving. Arquivos TIFF podem ser single-page or multi-page, preto e branco ou colorido, de alta resolução para impressão ou de baixa resolução para impressão em tela.
   * GIF (Graphics Interchange Format) É um tipo de raste utilizado principalmente para publicação na internet.
     O GIF é formato para web adequado para imagens com transições claras de cor, como logos, screenshots, text images
     e vector graphics (gráficos, mapas, diagramas etc.).A maioria das imagens vistas on-line são GIF, os quais também são uados em aplicações desktop.
   * JPEG (Joint Photographic Experts Group) É um formato de raster usado principalmente para armazenamento e publicação de fotografias.Sendo um formato baseado nas técnicas de lossy compression, não é boa escolha para imagens com transições distintas de cor.
   * BMP (Bitmap Graphics) É o formato raster nativo do Sistema Operacional Windows.Quando um imagem qualquer é desenhada em um monitor ou copiado para a área de transferência, clipboard,como um bitmap, o windows converte um vetor de imagem em uma imagem BMP.


Exemplo de Estrutura Raster SIMPLE = T / Written by IDL: 14-Jan-1998 17:39:11.00

  1. required. This is a standard (simple) FITS format file

BITPIX = -32 / FITS BITS/PIXEL

  1. the - sign means the data are to be interpreted as unscaled floating point.

NAXIS = 2 / NUMBER OF AXES NAXIS1 = 302 /Number of positions along axis 1 NAXIS2 = 303 /Number of positions along axis 2

  1. the data are a 302X303 array 2-dimensional array

OBJECT = 'HR 1442 ' / ORIGIN = 'KPNO-IRAF' /

  1. the original image was written by IRAF

DATE = '19-02-97' /

  1. date the image was obtained

IRAFNAME= 'n2c.140.imh' / NAME OF IRAF IMAGE FILE IRAF-MAX= 0.000000E0 / DATA MAX IRAF-MIN= 0.000000E0 / DATA MIN IRAF-BPX= 32 / DATA BITS/PIXEL IRAFTYPE= 'REAL ' / PIXEL TYPE

  1. instrumental parameters required for the data reductions follow

CHANNEL = 'only ' / INSTRUME= 'IRIM ' / FWL_POS = 0. / COADDS = 3 / LNRS = 1 / INT_S = 0.400000005960465 / MODE = 'stare ' / SPMODE = 'low high ' / UCODE = 'NicmMed01_01 ' / TELESCOP= 'ct15m ' / RA = '04:33:31.69 ' / DEC = '18:00:44.9 ' / EPOCH = 2000. / OFFSET = '15 west 15 south ' / IMAGETYP= 'object ' / COMMENT = ' ' / DETECTOR= 'NICMOS256x256 ' / OBSERVAT= 'CTIO ' / DATE-OBS= '970219.001914 ' / ST = '05:32:00.5 ' / UT = '00:19:15.1 ' / HA = '00:58:38.3 ' / RECID = 'ct15m.970219.001914.69 FILTER = 'k ' / HISTORY New copy of n2.140.imh

  1. all entries above here and below NAXIS2 were written by IRAF

AIRMASS = 1.5633514 /

  1. This was added later in the data reduction

HISTORY Processed by DoCIRIM on Fri Apr 4 16:31:01 1997 HISTORY arrays: data, sigma, sky (256x256), orig 4

  1. the History keyword provides a running commentary on the processing steps

END

  1. All FITS headers must end with this keyword


BITMAP

Um bitmap é um objeto gráfico usado para criar manipular e armazenar imagens como arquivo no disco. Cada arquivo BMP é composto por um cabeçalho (header), por uma área de informação do cabeçalho (bitmap-information header), uma tabela de cores (color table) e uma seqüência de bits (bitmap bits) que definem o conteúdo da imagem. Assim sendo o arquivo possui a seguinte forma genérica: BITMAPFILEHEADER bmfh; BITMAPINFOHEADER bmih;

RGBQUAD ColorTable[]; BYTE BitmapBits[];


- O BITMAPFILEHEADER contém informações referentes ao tipo, tamanho e formato do arquivo. Como na estrutura abaixo:

typedef struct tagBITMAPFILEHEADER {

DWORD Type; DWORD Size; LONG Reserved; LONG Reserved2; DWORD OffsetBits;

}

Valores Padrões: começo

tamanho

nome

stdvalor

Propósito 1

2

Type

19778 Deve sempre ser 'BM' para especificar que este é um arquivo .bmp. 3

4

Size

- Especfica o tamanho do arquivo em bytes. 7

2

Reserved1

0 Deve sempre ser zero. 9

2

Reserved2

0 Deve sempre ser zero. 11

4

OffsetBits

1078 Especifica o offset do começo do arquivo para o dado em bitmap.


- A BITMAPINFOHEADER contém informações a respeito do tamanho, tipo de compressão e codificação de cores da imagem. E pode ser definido como na estrutura abaixo:

typedef struct tagBITMAPINFOHEADER { DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount; DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;


começo

tamanho

nome

stdvalor

Propósito 15

4

biSize

40

Especifica o tamanho da estrutura BITMAPINFOHEADER,em bytes. 19

4

biWidth

100

Especifica a largura da imagem, em pixels 23

4

biHeight

100

Especifica a altura da imagem, em pixels. 27

2

biPlanes

1

Especifica o número de planos do intrumento alvo. Deve ser 1. 29

2

biBitCount

8

Especifica o número de bits por pixel. 31

4

biCompression

0

Especifica o tipo de compressão, geralmente é zero(sem compressão). 35

4

biSizeImage

0

Especifica o tamanho da imagem em bytes. Se não há compressão, é setado para zero.

39

4

biXPelsPerMeter

0

Especifica a resolução horizontal em pixels por metros. 43

4

biYPelsPerMeter

0

Especifica a resolução vertical em pixels por metros.

47

4

biClrUsed

0

Especifica o número de cores usadas no bitmap. Se for zero, o número de cores é calculado usando o membro biBitCount . 51

4

biClrImportant

0

Especifica o número de cores que são importantes para o bitmap. Se for zero, todas as cores são importantes.



- ColorTable[] é definida como um array de structs do tipo RGBQUAD e contém quantos elementos forem necessários para acomodar a codificação de paleta adotada pelo arquivo em questão.

typedef struct tagRGBQUAD { BYTE rgbBlue; BYTE rgbGreen; BYTE rgbRed; BYTE rgbReserved; } RGBQUAD;


Começo

Tamanho

Nome

Stdvalor

Propósito 1

1

rgbBlue

-

Especifica a parte azul da cor. 2

1

rgbGreen

-

Especifica a parte verde da cor. 3

1

rgbRed

-

Especifica a parte vermelha da cor 4

1

rgbReserved

-

Deve ser sempre zero.


A array BitmapBits[] contém seqüência de bits da imagem, seguindo-se imediatamente à ColorTable[].

A ordem de apresentação das linhas é não usual: de baixo -> para cima, assim sendo a origem da imagem situa-se no canto INFERIOR esquerdo da tela, enquanto o sistema de coordenadas de tela normalmente tem sua origem do canto SUPERIOR esquerdo. Veja o exemplo abaixo:

Pixels apresentados na tela

Pixels guardados no arquivo .bmp


JPG

Formato desenvolvido por um comitê, que teve o início de suas atividades em 1990, chamado Joint Photographers Experts Group, daí de onde vem JPEG, nome dado ao padrão de compressão de imagens desenvolvido por esse grupo. O JPEG foi o primeiro padrão internacional de compressão de imagens.

O JPG é o formato ideal ideal para imagens que precisam ter tamanho reduzido, como imagens para serem usadas em sites da web, ou para serem enviadas por email, etc...

As imagens tornam-se bastante pequenas pois sua compressão pode chegar a até 90%, mas é claro que com um poder de compressão tão grande existe uma perda na qualidade da imagem. E vale ressaltar que essa qualidade uma vez perdida, não pode ser recuperada. Ao contrário de outros padrões de compressão, como TIF, PNG, GIF e BMP que podem ter sua qualidade recuperada. Outro fator importante em relação a esses outros formatos é que eles são lossless, ou seja sem perda de qualidade na compressão, ao contrário do JPG, que como já foi dito é lossy. Ou seja, há perda de qualidade na compressão da imagem.

O processo de compressão do padrão JPEG funciona, em linhas gerais, da seguinte forma: Os dados sobre os valores de cores dos pixels da imagem são modificados, e alguns detalhes que não podem ser comprimidos são ignorados, o que permite grandes compressões. O segredo do JPEG está em explorar as limitações de percepção do olho humano, que não percebe pequenas modificações nas cores e sim pequenas percepções de brilho.

Vejamos o processo de modificação nas cores um pouco mais a fundo:

   * Primeiramente, o formato de representação de cores é alterado de RGB (cores são representados em escalas de vermelho, verde e azul) para um formato chamado de YUV, tomando como base os valores RGB. Esse formato, YUV, é semelhante aos formatos PAL e NTSC dos televisores comuns.
   * Com a imagem nesse formato, os pixels são organizados em grupos de 8 por 8, onde cada componente, (Y, U e V), sofre uma transformação matemática bastante complexa chamada DCT, (Discrete Cosine Transform), que altera os valores de cor que é o que realmente faz a imagem diminuir de tamanho.

Por fim, vejamos como se estrutura um arquivo JPG:

ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00

00 ff fe 00 46 76 77 78 79 7a 83 84 85 86 b5 b6 b7 b8 b9

ba c2 03 00 04 ff db 00 43 00 08 06 06 07 06 05 08 07 07

07 09 09 08 0a 0c 14 0d 0c 0b 0b 0c 19 12 13 0f 14 1d 1a

1f 1e 1d 1a 1c 1c 20 24 2e 27 20 22 2c 23 1c 1c 28 37 29

2c 30 31 34 34 34 1f 27 39 3d 38 32 3c 2e 33 34 32 ff c0

00 0b 08 01 00 01 00 01 01 11 00 ff da 00 08 01 01 00 00

3f 00 ff d9

Os dados do tipo ff ** indicam um marcador de dados.

Vejamos o que significa cada um desses marcadores:

FF D8 | Início da Imagem

FF FE | Comentários (Esse marcador pode ser retirado)

FF E0 | Marcador de Dados da Aplicação (Geralmente não muito usado)

FF DB | Define Tabela de Quantização

FF C0 | Dados referentes ao cálculo do DCT

FF DA | Começo dos dados

FF D9 | Fim da imagem


Obs.: Qualquer imagem jpeg pode ser transformada num formato hexadecimal e os marcadores acima também podem ser observados.