stringtranslate.com

Un poco arruinado

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 . [1]

La operación implica 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 se puede escribir en un cuarto mapa de bits, aunque a menudo reemplaza el destino. Los píxeles de cada uno se combinan mediante una operación ráster seleccionable por el programa, una fórmula booleana bit a bit . La operación ráster más obvia sobrescribe el destino con el origen. Otros pueden implicar operaciones AND , OR , XOR y NOT . [1] El chipset de gráficos del Commodore Amiga (y otros) podría combinar tres mapas de bits de origen utilizando cualquiera de las 256 funciones booleanas de 3 entradas posibles .

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 en color no suelen producir resultados que se asemejen a la combinación física de luces o tintas. Algunos programas todavía usan XOR para dibujar rectángulos resaltados interactivos o bordes de regiones; cuando esto se hace 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 en bloques con límites 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 implementó posteriormente 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 computadora desde el uso de gráficos de caracteres ( modo texto ) hasta el uso de gráficos rasterizados (mapa de bits) para todo. Las máquinas que dependen en gran medida del rendimiento de gráficos 2D (como las consolas de videojuegos ) suelen tener un circuito especial llamado blitter .

Ejemplo de implementación de blit enmascarado

Un uso clásico del blitting es representar 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 combinación alfa .

Un bucle que examina cada bit de la máscara y copia el píxel del objeto sólo 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 cambio , se puede implementar un blit enmascarado con dos operaciones BitBlit regulares utilizando las operaciones ráster AND y OR.

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

Técnica

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

En el primer blit, la máscara se aplica al fondo usando el operador ráster AND . Debido a que cualquier valor con AND con 0 es igual a 0, y cualquier valor con AND con 1 no cambia, se crean áreas negras donde aparecerán los sprites reales, dejando el resto del fondo como está.

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

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

Blitting vs sprites de hardware

El blitting es similar al dibujo de sprites por hardware , en el sentido de que ambos sistemas reproducen un patrón, típicamente un área cuadrada, en diferentes ubicaciones de la pantalla. [2] Los sprites de hardware tienen la ventaja de ser almacenados en una memoria separada y, por lo tanto, no perturban la memoria de la pantalla principal. Esto les permite moverse por la pantalla, cubriendo el "fondo", sin ningún efecto sobre él.

Blitting mueve los mismos tipos de patrones en 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 de primer plano en la pantalla, los píxeles de fondo que se encuentran debajo se sobrescriben o se "dañan". Depende del software reparar este daño haciendo blitting dos veces, una para restaurar los píxeles que se cambiaron y otra para colocar el patrón de primer plano en su nueva ubicación. Una forma de hacerlo es almacenar los patrones requeridos en 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 visualización afectada. Suponiendo que el chip gráfico tenga VRAM dedicada, esto es útil para reducir la tensión en la RAM del sistema, pero también la ranura de expansión ISA limitada en ancho de banda en sistemas de PC más antiguos.

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

Ver también

Referencias

  1. ^ ab Sánchez, Julio; María P. Cantón (2007). "Visualización de imágenes en mapa de bits". Soluciones de software para ingenieros y científicos . Prensa CRC. pag. 690.
  2. ^ "Framebuffer - Wiki OpenGL". 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 multimuestreo.

enlaces externos