Articulo de referencia

Bit blit

Bit blit (también escrito BITBLT , BIT BLT , BitBLT , Bit BLT , Bit Blt , etc., que significa transferencia de bloque de bits ) es una operación de datos comúnmente utilizada en...

Bit blit (también escrito BITBLT , BIT BLT , BitBLT , Bit BLT , Bit Blt , etc., que significa transferencia de bloque 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 solo utilizando una función booleana . [ 1 ]

La operación involucra al menos dos mapas de bits: un "origen" (o "primer plano") y un "destino" (o "fondo"), y posiblemente un tercero que a menudo se denomina " máscara ". El resultado puede escribirse en un cuarto mapa de bits, aunque a menudo reemplaza al destino. Los píxeles de cada uno se combinan usando una operación raster seleccionable por el programa, una fórmula booleana bit a bit . La operación raster más obvia sobrescribe el destino con el origen. Otras pueden involucrar operaciones AND , OR , XOR y NOT . [ 1 ] El chipset gráfico del Commodore Amiga (y otros) podía combinar tres mapas de bits de origen usando cualquiera de las 256 posibles funciones booleanas de 3 entradas .

El software gráfico moderno ha sustituido casi por completo las operaciones bit a bit por 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 asemejen a la combinación física de luces o tintas. Algunos programas aún utilizan la operación XOR para dibujar rectángulos de resaltado interactivos o bordes de región; cuando esto se aplica a imágenes a color, los colores resultantes, inusuales, se aprecian 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. Posteriormente, Dan Ingalls implementó una versión rediseñada en microcódigo .

El desarrollo de métodos rápidos para diversas operaciones de transferencia de bits impulsó la evolución de las pantallas de ordenador, pasando de utilizar gráficos de caracteres ( modo texto ) a utilizar gráficos rasterizados (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 ) suelen tener circuitos especiales llamados blitter .

Ejemplo de implementación de blit enmascarado

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

Un bucle que examine cada bit de la máscara y copie el píxel del sprite solo si la máscara está activada será mucho más lento que un hardware que pueda aplicar exactamente la misma operación a cada píxel. En cambio, se puede implementar una copia de bits enmascarada con dos operaciones BitBlit regulares utilizando las operaciones de trama AND y OR.

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

Técnica

Al preparar el sprite, los colores son cruciales. Los píxeles de la máscara son 0 (negro) donde se mostrará el píxel correspondiente del sprite, y 1 (blanco) donde se conservará el fondo. El sprite debe ser 0 (negro) en las zonas transparentes, pero cabe destacar que también se puede usar el negro en las regiones no transparentes.

En la primera operación de blit, la máscara se aplica al fondo mediante el operador de trama AND . Dado que cualquier valor al que se le aplica AND con 0 es igual a 0, y cualquier valor al que se le aplica AND con 1 permanece sin cambios, se crean áreas negras donde aparecerán los sprites reales, dejando el resto del fondo intacto.

En la segunda operación de blit, el sprite se aplica al fondo modificado mediante el operador de trama OR . Dado que cualquier valor que se combine con 0 mediante OR no cambia, el fondo permanece inalterado y las áreas negras se rellenan con la imagen real del sprite.

También es posible lograr el mismo efecto usando un objeto con fondo blanco y una máscara blanca sobre fondo negro . En este caso, primero se aplicaría la operación OR a la máscara y luego la operación AND al objeto.

Blitting vs sprites de hardware

El blitting es similar al dibujo de sprites por hardware , ya que ambos sistemas reproducen un patrón, generalmente un área cuadrada, en diferentes ubicaciones de la pantalla. [ 2 ] Los sprites por hardware tienen la ventaja de almacenarse en una memoria separada y, por lo tanto, no interfieren con la memoria principal de la pantalla. Esto permite moverlos por la pantalla, cubriendo el "fondo", sin afectarlo.

El 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 un patrón en primer plano en la pantalla, los píxeles de fondo que se encuentran debajo se sobrescriben o "dañan". El software es responsable de reparar este daño mediante dos blitting: uno para restaurar los píxeles que se modificaron y otro para colocar el patrón en primer plano en su nueva ubicación. Una forma de hacerlo es almacenar los patrones necesarios en la VRAM fuera de la pantalla y reservar otra área fuera de la pantalla como una especie de pila para almacenar temporalmente la sección de la pantalla afectada. Suponiendo que el chip gráfico tenga VRAM dedicada, esto es útil para reducir la carga en la RAM del sistema, pero también en la ranura de expansión ISA de ancho de banda limitado en sistemas PC más antiguos.

Sin embargo, existen varias maneras de optimizar esto. Si los patrones ocupan grandes áreas de la pantalla, puede ser más eficiente transferir el fondo a la pantalla en lugar de borrar cada patrón individualmente. Una variante consiste en dividir la pantalla en segmentos y borrar solo aquellos donde se han dibujado patrones. Esta técnica se conoce como rectángulos sucios.

Véase también

Referencias

  1. 1 2 Sánchez, Julio; María P. Canton (2007). "Visualización de imágenes de mapa de bits" . Soluciones de software para ingenieros y científicos . CRC Press. pág.  690. ISBN 978-1-4200-4303-7.
  2. "Framebuffer - OpenGL Wiki" . www.khronos.org . Consultado el 23 de junio de 2020. Una operación blit es una forma especial de operación de copia; copia un área rectangular de píxeles de un framebuffer a otro. Esta función también tiene algunas propiedades muy específicas con respecto al muestreo múltiple.
  • Memorando interno de Xerox, 19 de noviembre de 1975