Bit blit - Bit blit

Bit blit (también escrito BITBLT , BIT BLT , BitBLT , Bit BLT , Bit Blt , etc., que significa transferencia de bloques de bits ) es una operación de datos comúnmente utilizada en gráficos por computadora en la que varios mapas de bits se combinan en uno usando una función booleana .

La operación involucra al menos dos mapas de bits, uno de origen y de destino, posiblemente un tercero que a menudo se denomina "máscara" y, a veces, un cuarto que se utiliza para crear una plantilla . Los píxeles de cada uno se combinan bit a bit de acuerdo con la operación de ráster especificada (ROP) y luego el resultado se escribe en el destino. El ROP es esencialmente una fórmula booleana . El ROP más obvio sobrescribe el destino con el origen. Otros ROP pueden involucrar operaciones AND , OR , XOR y NOT . El conjunto de chips de gráficos del Commodore Amiga (y otros) podría combinar tres mapas de bits de origen utilizando cualquiera de las 256 funciones booleanas posibles con tres entradas.

El software de gráficos moderno ha reemplazado casi por completo las operaciones bit a bit con operaciones matemáticas más generales utilizadas para efectos como la composición alfa . Esto se debe a que las operaciones bit a bit en pantallas a color no suelen producir resultados que se parezcan a la combinación física de luces o tintas. Algunos programas todavía usan XOR para dibujar rectángulos de resaltado interactivo o bordes de regiones; cuando se hace esto para colorear imágenes, los colores resultantes inusuales se ven fácilmente.

Orígenes

El nombre deriva de la rutina BitBLT para la computadora Xerox Alto , que significa transferencia de bloques de límite de bits . Dan Ingalls , Larry Tesler , Bob Sproull y Diana Merry programaron esta operación en Xerox PARC en noviembre de 1975 para el sistema Smalltalk-72 . Dan Ingalls luego implementó una versión rediseñada en microcódigo .

El desarrollo de métodos rápidos para varias operaciones de bit blit impulsó la evolución de las pantallas de computadora desde el uso de gráficos de caracteres hasta el uso de gráficos de mapa de bits para todo. Las máquinas que dependen en gran medida del rendimiento de los gráficos 2D (como las consolas de videojuegos ) a menudo tienen circuitos para propósitos especiales llamados blitter .

Ejemplo de implementación de blit enmascarado

Un uso clásico de blitting es renderizar sprites transparentes sobre un fondo. En este ejemplo, se utilizan una imagen de fondo, un objeto y una máscara de 1 bit. Como la máscara es de 1 bit, no hay posibilidad de transparencia parcial mediante la combinación alfa .

Un bucle que examina cada bit de la máscara y copia el píxel del sprite solo si la máscara está configurada será mucho más lento que el hardware que puede aplicar exactamente la misma operación a cada píxel. En su lugar, se puede implementar un blit enmascarado con dos operaciones BitBlit regulares utilizando las operaciones de trama AND y OR.

Imagen de fondo Sprite (izquierda) y máscara (derecha)
Blit back.png XBlit dot.png

El sprite se dibuja en varias posiciones sobre la imagen para producir esto:

Resultado previsto
XBlit final.png

Técnica

Al preparar el sprite, los colores son muy importantes. Los píxeles de la máscara son 0 (negro) donde quiera que se muestre el píxel de sprite correspondiente y 1 (blanco) donde sea que se deba conservar el fondo. El sprite debe ser 0 (negro) en cualquier lugar donde se suponga que sea transparente, pero tenga en cuenta que el negro se puede usar en las regiones no transparentes.

En el primer blit, la máscara se transfiere al fondo utilizando el operador de trama AND . Debido a que cualquier valor AND con 0 es igual a 0, y cualquier valor AND con 1 no cambia, se crean áreas negras donde aparecerán los sprites reales, dejando el resto del fondo solo.

Resultado del primer blit
XBlit y.png

En el segundo blit, el sprite se transfiere al fondo recién alterado utilizando el operador ráster de OR . Debido a que cualquier valor con O con 0 no cambia, el fondo no se ve afectado y las áreas negras se rellenan con la imagen del sprite real.

Resultado final
XBlit final.png

También es posible lograr el mismo efecto usando un objeto con un fondo blanco y una máscara de blanco sobre negro . En este caso, la máscara se usaría primero en OR y el sprite en AND a continuación.

Blitting vs sprites de hardware

Blitting es similar al dibujo de sprites por hardware , en que ambos sistemas reproducen un patrón, típicamente un área cuadrada, en diferentes lugares de la pantalla. Los sprites de hardware tienen la ventaja de almacenarse en una memoria separada y, por lo tanto, no alteran la memoria principal de la pantalla. Esto les permite moverse por la pantalla, cubriendo el "fondo", sin ningún efecto sobre él.

Blitting mueve los mismos tipos de patrones por la pantalla, pero lo hace escribiendo en la misma memoria que el resto de la pantalla. Esto significa que cada vez que se coloca el patrón en la pantalla, la visualización "debajo" se sobrescribe o se "daña". Depende del software limpiar este daño haciendo blitting dos veces, una vez para eliminar el daño y luego nuevamente para colocar la broca en su nueva ubicación. Sin embargo, hay varias formas de optimizar esto. Si los patrones se apoderan de grandes áreas de la pantalla, puede que sea más eficaz iluminar el fondo de la pantalla en lugar de borrar cada patrón individualmente. Una variación implica dividir la pantalla en segmentos y borrar solo los segmentos en los que se han dibujado patrones. Esta técnica se conoce como rectángulos sucios.

Referencias

enlaces externos