Bit blit

Origem: Wikipédia, a enciclopédia livre.
Saltar para a navegação Saltar para a pesquisa

Bit blit (também BITBLT, BIT BLT, BitBLT, Bit BLT, Bit Blt, blitting, etc., de "bit block transfer", "Transferência de blocos em bit") é uma técnica de operação de dados normalmente usada em Computação gráfica onde vários bitmaps são combinados em um através da função booleana.[1]

Descrição[editar | editar código-fonte]

A operação envolve ao menos dois bitmaps, uma fonte e destino, possivelmente um terceiro chamado de "máscara" e, às vezes, o quarto usado para criar um Estêncil. Os pixels de cada um são combinados bit a bit de acordo com a ROP (do inglês "raster operation, "operação de raster") especificada e o resultado é escrito ao destino. A ROP é essencialmente uma fórmula booleana. A operação ROP mais óbvia substitui o destino com a fonte. Outras ROPs podem incluir operações AND, OR, XOR, and NOT.[1] O chipset de gráficos do sistema Commodore Amiga (and others) poderia combinar três bitmaps de fonte qualquer uma das 256 possíveis Função booleanas com três entradas.

Origens[editar | editar código-fonte]

O nome deriva da instrução "BitBLT" para o computador Xerox Alto. O nome deriva do inglês "bit-boundary block transfer". Os programadores Dan Ingalls, Larry Tesler, Bob Sproull, e Diana Merry programaram esta operação em novembro de 1975 para sistema Smalltalk-72 enquanto estiveram na empresa Xerox PARC. Dan Ingalls posteriormente implementou uma versão redesenhada em microcóddigo.

O desenvolvimento de métodos rápidos para várias operações BitBLT deu ímpeto à evolução de monitores de computadores, desde o uso do modo texto até o uso de gráficos de bitmap para tudo. Máquinas que dependem muito do desempenho de gráficos 2D (como consoles de videogame) geralmente possuem circuitos para fins especiais chamados de blitter.

Exemplo de uso da técnica[editar | editar código-fonte]

Um uso clássico para a técnica é renderizar sprites transparentes sobre um fundo. Neste exemplo, uma imagem de fundo, um sprite, e uma máscara de recorte de 1-bit são usados. Assim que a máscara possui 1-bit de cor, não há possibilidade de transparência parcial através de alpha blending.

Um ciclo que examina cada bit na máscara (e que copia o pixel do sprite somente se a máscara estiver configurada) será muito mais lenta que o hardware que pode aplicar exatamente a mesma operação a cada pixel. Em vez disso, um blit de máscara pode ser implementado com duas operações regulares do BitBlit usando as operações em raster de AND e OR.

Imagem de fundo Sprite (à esquerda) e a máscara (à direita)
Blit back.png XBlit dot.png

O sprite é projetado em várias posições sobre a imagem de fundo, dando resultado à imagem a seguir:

Resultado esperado
XBlit final.png

Técnica[editar | editar código-fonte]

Ao preparar o sprite, as cores são muito importantes. Os valores de píxeis de máscara são 0 (preto) onde o pixel correspondente do sprite deve ser exibido, e são 1 (branco) onde o fundo precisa ser preservado. O sprite deve ser 0 (preto) em qualquer lugar em que deva ser transparente, mas observe que o preto pode ser usado em regiões não transparentes.

Na primeira parte, a máscara é moldada no fundo usando o operador raster AND. Devido a qualquer valor AND combinado com 0 igual a 0, e qualquer valor AND combinado com 1 é inalterado, são criadas áreas pretas onde os sprites reais aparecerão, enquanto o resto do plano de fundo é preservado.

Moldagem da máscara
XBlit and.png

Na segunda parte, o sprite é transferido no fundo recém-alterado pela máscara usando o operador raster OR. Devido a qualquer valor OR combinado com 0 permanentemente é inalterado, o fundo não é afetado e as áreas pretas são preenchidas com a imagem de sprite real.

Resultado final
XBlit final.png

Também é possível obter o mesmo efeito usando um sprite com fundo branco e uma máscara branca sobre preto. Nesse caso, a máscara seria operada em OR antes e posteriormente o sprite operado em AND.

Comparação aos sprites de hardware[editar | editar código-fonte]

Ver artigo principal: Sprite (computação gráfica)

A técnica de blitting é semelhante à geração de sprite de hardware, pois ambos os sistemas reproduzem um molde, geralmente uma área quadrada, em diferentes locais da tela. Sprites de hardware têm a vantagem de serem armazenados em memória separada e, portanto, não alteram a memória principal da tela. Isso significa que eles se movem sobre o "plano de fundo" (cenário) sem alterar sua imagem.

A técnica de blitting move os mesmos tipos de moldes na tela, porém move ao escrever na mesma memória e no restante da tela. Isso significa que a tela de "abaixo" é substituída ou "danificada" toda vez que o molde é colocado sobre ela. Cabe ao software consertar esse dano através de blitting em dobro, uma vez para remover o dano e, em seguida, novamente para colocar o bit em seu novo local. No entanto, existem várias maneiras de otimizar isso. Se grandes áreas da tela forem ocupadas pelos moldes, pode ser mais eficiente mesclar o plano de fundo com a tela em vez de apagar cada molde individualmente. Uma variação envolve dividir a tela em segmentos e apagar apenas os segmentos onde os moldes foram desenhados. Essa técnica é conhecida como retângulos sujos.

Como se pode imaginar, isso torna a técnica significativamente mais lenta que a manipulação de sprites. No entanto, possui uma grande vantagem: não há limite físico de número e tamanho de seus moldes. Assim, o blitting pode ser usado para exibir qualquer coisa na tela, incluindo a simulação de sprites (através de moldes de programação dupla mencionado acima) ou até mesmo um texto.

Referências

  1. a b Sanchez, Julio; Maria P. Canton (2007). «Displaying Bit-Mapped images». Software solutions for engineers and scientists. [S.l.]: CRC Press. 690 páginas 

Ligações externas[editar | editar código-fonte]