Fact-checked by Grok 2 weeks ago

Bit blit

A bit blit, short for bit block transfer (often stylized as BitBlt), is a fundamental operation that copies a rectangular block of pixels—represented as bits in memory—from one location to another, typically allowing for logical operations such as , or XOR to combine source and destination images for effects like masking or . This primitive enables efficient manipulation of bitmapped graphics, supporting tasks like drawing windows, scrolling text, and rendering animations on raster displays. Developed in the at PARC as part of the Smalltalk programming environment, bit blit was invented by researcher to accelerate bitmap graphics on systems like the workstation. Ingalls implemented it initially in for the Alto's display hardware, where it operated on bitmaps (1 bit per ), but it quickly evolved into a versatile software routine applicable to color and higher-resolution displays. The operation's efficiency stemmed from its ability to process entire rectangles in a single instruction or loop, vastly outperforming pixel-by-pixel drawing methods prevalent at the time. Bit blit's influence extended beyond , becoming a cornerstone of graphical user interfaces (GUIs) in commercial systems; it was incorporated into the office workstation in 1981 and inspired implementations in the Apple Macintosh (1984) and Microsoft Windows, where the BitBlt API function remains a standard for 2D graphics acceleration. Its design facilitated overlapping windows, pop-up menus (also pioneered by Ingalls), and dynamic screen updates, enabling the interactive, bitmap-based computing that defines modern desktops and embedded graphics. Even today, variations of bit blit underpin hardware blitters in GPUs and software libraries for image processing, demonstrating its enduring role in .

Fundamentals

Definition

A in is a two-dimensional of bits, where each bit represents a in a monochrome image or contributes to pixel color in more advanced formats. Bit blit, an abbreviation of "bit block transfer" or "bit block image transfer," is a core data operation in that copies a rectangular block of pixels from a source to a destination . The process efficiently manipulates raster images by transferring data in blocks, enabling rapid updates to display memory without processing individual pixels sequentially. This supports essential tasks like drawing shapes, moving sprites, and compositing images on screen. The operation primarily involves three bitmaps: the source bitmap, containing the pixel data to transfer; the destination bitmap, specifying the target rectangular area to modify; and an optional bitmap, used for selective pixel transfer by defining which areas of the source should the destination. During the blit, a specified boolean logic function—such as OR, AND, , or NOT—is applied to corresponding bits pixel-by-pixel from the source, destination, and mask (if present). For instance, an OR function combines source and destination bits by setting a result bit to 1 if either input is 1, allowing overlay effects that preserve existing background content without erasure. Masked blitting extends this basic operation to simulate transparency by using the mask to control which source pixels are applied.

Core Operations

In a basic bit blit, pixel-level processing occurs by iterating over each bit or pixel in the defined source block and combining it with the corresponding destination bit using a bitwise operator to produce a new value in the destination. This operation enables efficient manipulation of raster images at the binary level, where each source bit influences the destination directly through logical combination. Common bitwise operations in bit blits include OR, AND, XOR, and NOT, each serving distinct purposes such as overlaying, masking, reversible compositing, or inversion. The OR operation (source | destination) sets a destination bit to 1 if either the source or destination bit is 1, useful for additive overlays. The AND operation (source & destination) sets a bit to 1 only if both are 1, often for selective masking. The XOR operation (source ^ destination) toggles the destination bit where the source is 1, enabling reversible overlays since applying the same source again restores the original. The NOT operation (~source) inverts the source bits before transfer, creating negative or inverted images. These operations can be represented by the following truth tables, where S is the source bit and D is the destination bit:
OperationSDResult
OR000
OR011
OR101
OR111
AND000
AND010
AND100
AND111
XOR000
XOR011
XOR101
XOR110
NOT0-1
NOT1-0
Block transfer parameters specify the region and transformation, including source coordinates (x_s, y_s), destination coordinates (x_d, y_d), width (w), and height (h) to define the rectangular area, along with optional flags for shifts or rotations to adjust alignment during transfer. For a simple unmasked blit, the process applies the operation pixel by pixel across the block: \text{destination} = \text{operation}\left(\text{source}[i + s_x][j + s_y], \text{destination}\right) where (i, j) ranges over the block dimensions, and (s_x, s_y) are offsets derived from the coordinate difference between source and destination. In color bitmaps, the operation extends to multi-bit pixels by applying bitwise logic separately to each (e.g., , , ) or by manipulating palette indices, where an 8-bit pixel value indexes a color for the final RGB output. A naive software implementation of bit blit exhibits of O(width × height × bits_per_pixel), as it processes each bit sequentially, though optimizations like word-aligned transfers can reduce effective constants. may be referenced briefly to enable by selectively applying operations only where mask bits are set.

History

Origins

The concept of bit block transfer, commonly known as bit blit, was first conceptualized in the early as a fundamental primitive for raster display systems. In their 1973 book Principles of Interactive Computer Graphics, William M. Newman and Robert F. Sproull introduced the concepts of "RasterOp" and "CopyRaster" as efficient operations for copying rectangular regions of pixels to support image manipulation such as scrolling windows and avoiding redundant scan conversion. This approach addressed the limitations of vector-based graphics by enabling direct manipulation of pixel arrays in frame buffers, facilitating more realistic and interactive visual feedback on raster-scan displays. The practical implementation of bit blit emerged at Xerox Palo Alto Research Center (PARC) in the mid-1970s, where it was developed for the computer as part of the Smalltalk programming environment. , a key contributor to Smalltalk, designed and implemented the BitBlt operation to handle the transfer of bit blocks between memory regions, supporting operations like OR and XOR for combining bitmaps. and other PARC researchers integrated it into the Alto's architecture, motivated by the need to transition from to bitmap-based systems for creating responsive graphical user interfaces (GUIs). This shift allowed for efficient screen updates in interactive applications, overcoming the constraints of slower character-mapped displays prevalent at the time. The provided the first real-world application of bit blit on its bit-mapped display, which featured a resolution of 606 × 808 pixels stored in main memory. Here, bit blit replaced cumbersome character-based drawing methods by enabling rapid movement of pixel blocks, such as for text rendering and window scrolling, thus supporting dynamic GUIs with immediate visual feedback. As a core graphics primitive in Smalltalk, bit blit was embedded directly into the language's imaging model, where all graphical operations—like drawing text or shapes—could be expressed through source-to-destination form copies. This integration influenced subsequent systems, including Machines, where bit blit primitives were adopted for window management and bitmap operations in their display systems.

Key Developments

Bit blit operations were further optimized at PARC, building on foundational research where it was initially invented for the workstation, and incorporated into the office workstation released in 1981 as part of its . The saw widespread adoption of bit blit in personal computing, particularly with Apple's system released in 1983 and the Macintosh in 1984, where it underpinned windowing and icon manipulation through the graphics library, facilitating dynamic screen updates in a bit-mapped environment. Similarly, integrated bit blit into in 1985 as part of the (GDI), supporting 256 raster operation codes (ROPs) for combining source and destination bitmaps during rendering. Bit blit's influence extended to standardization efforts, shaping the introduced in 1984, which incorporated bitblt as a core primitive for bitmap graphics in networked environments. It also informed and its Display PostScript extension, providing low-level bitblt-like primitives for efficient vector-to-bitmap rendering on displays. During the 1990s, hardware evolution integrated bit blit acceleration into VGA and SVGA standards, with chips like the S3 86C924 and ATI Mach32 enabling hardware-accelerated blits over local buses, significantly boosting performance for Windows applications on graphics cards. Bit blit operations transitioned from monochrome to support higher color depths across the and , extending from 1-bit displays to 8-bit paletted color in systems like the (1987) and VGA adapters, and ultimately to 24-bit in SVGA cards by the mid-1990s, allowing per-pixel RGB transfers without palette limitations.

Implementation

Software Methods

Software bit blitting typically relies on a naive loop-based that iterates over the source and destination rectangles using nested loops for rows and columns, applying bitwise operations to corresponding memory blocks. For simple copies, this can leverage efficient functions like memcpy to move entire rows at once, while more complex raster operations (ROPs) require custom loops to perform bitwise AND, OR, XOR, or other combinations on pixel data. This approach processes the bitmaps as arrays of bytes or words, ensuring the operation respects the specified transfer mode without intervention. Memory management in software bit blitting involves handling aligned and unaligned bitmaps, where bitmaps are often stored with row to optimize patterns. For , rows are typically padded to multiples of 32-bit boundaries, allowing faster word-aligned reads and writes that align with lines and reduce partial word operations. Unaligned es may incur performance penalties, so implementations often include alignment checks or adjustments before processing. In , for instance, the rowBytes field specifies the padded row length, which CopyBits uses to compute offsets and ensure contiguous memory handling during transfers. To optimize , software blitters in word-sized chunks, such as 32-bit or 64-bit units, rather than individual bytes or pixels, minimizing loop iterations and leveraging CPU integer operations. Further acceleration comes from SIMD instructions, like Intel's MMX or extensions, which enable of multiple pixels or words in a single instruction, significantly speeding up bitwise operations on aligned blocks. These techniques reduce the computational overhead in bandwidth-limited software environments by exploiting vector registers for bulk operations. A simple example of an OR blit in pseudocode illustrates the loop-based approach:
for y from source_y to source_y + height - 1:
    source_row = source_base + (y * source_row_bytes)
    dest_row = dest_base + ((y + dest_y - source_y) * dest_row_bytes)
    for x from 0 to width - 1 (in word steps):
        word = *(source_row + (x / word_size)) | *(dest_row + (x / word_size))
        *(dest_row + (x / word_size)) = word
This code loops over rows using precomputed offsets, then applies the OR operation word-by-word within each row, assuming aligned for simplicity. Software bit blitting faces challenges from memory bandwidth limitations, as repeated CPU accesses to large bitmaps can bottleneck performance compared to hardware alternatives. A common solution is dirty rectangle tracking, where only modified regions of the destination are identified and blitted, minimizing unnecessary operations and reducing data transfer volume—particularly useful in dynamic graphics updates like animations. Early software libraries implemented bit blitting through dedicated APIs, such as Apple's QuickDraw with its CopyBits procedure for transferring and compositing bit images between ports. Microsoft's GDI provides the BitBlt function for performing ROP-enabled transfers between device contexts, handling pixel data iteration internally. Modern libraries continue this tradition; Python's Pillow (PIL) uses the Image.paste method to composite source images onto destinations with optional masks and blending modes, while Java's Graphics2D employs drawImage for efficient software rendering of image subsets.

Hardware Support

Hardware support for bit blit operations emerged in the mid-1970s with the computer, which implemented bit block transfers through custom in its display hardware to enable efficient manipulation of the bit-mapped raster display. This approach allowed for rapid on-screen updates without burdening the main CPU, establishing bit blit as a core graphics primitive. In the 1980s, bit-slice processors in workstations, such as those built around AMD's Am2901 family, facilitated custom graphics pipelines that accelerated bitwise operations, including blits, by processing multiple bits in parallel across sliced modules. Dedicated accelerators in the late further advanced bit blit with specialized engines. The 8514/A display adapter, introduced in 1987, featured a for block copies and raster operations (ROPs), offloading 2D drawing tasks from the host CPU to achieve hardware-accelerated speeds. Similarly, ATI's VGA Wonder series and subsequent Mach32 cards incorporated 8514/A-compatible blitters, supporting ROPs like source-and-destination mixing at rates far exceeding software equivalents on contemporary PCs. In modern graphics processing units (GPUs), bit blit serves as a fundamental primitive integrated into rendering pipelines. OpenGL's glBlitFramebuffer function, available since version 3.0, enables efficient transfer of rectangular regions between framebuffers, often leveraging copies for high-throughput operations. 11 provides analogous support via ID3D11DeviceContext::CopySubresourceRegion, which copies subregions of s or buffers, utilizing GPU shaders for format conversion and bitwise logic where needed. These mechanisms allow blits to process data at gigapixel-per-second rates, contrasting sharply with software implementations limited to megabyte-per-second throughput on general-purpose CPUs. Field-programmable gate arrays (FPGAs) and application-specific integrated circuits () enable custom bit blit implementations through dedicated logic circuits. These designs typically include stages for source data fetch, execution (e.g., AND, OR, XOR via ROPs), and destination write-back, optimizing for low-latency, high-bandwidth transfers in embedded graphics systems. API evolution has standardized hardware bit blit across platforms, exemplified by Vulkan's vkCmdBlitImage command introduced in 2016. This function supports cross-platform GPU blits with features like , filtering, and format conversion, allowing developers to perform efficient transfers without vendor-specific extensions.

Techniques

Masked Blitting

Masked blitting extends basic bit block transfer operations by incorporating a separate bitmap to enable selective pixel copying, commonly used to simulate effects in rendering. The is a bitmap, typically 1-bit per pixel, where each bit corresponds to a pixel in the source and destination bitmaps; a 1 bit indicates an opaque source pixel that should be transferred, while a 0 bit marks a transparent pixel to be skipped, preserving the underlying destination content. This technique often employs a two-pass process to achieve the desired without directly modifying the source or destination in a single operation. In the first pass, the destination is cleared in the regions defined by the mask to prepare for the source pixels; in the second pass, the source pixels are applied only where the mask specifies opacity. This approach ensures that transparent areas reveal the original destination content rather than overwriting it with a uniform color. The detailed steps for a masked blit are as follows: (1) Update the destination by performing a bitwise AND with the inverted mask, effectively setting masked regions (where mask=1) to 0 while leaving unmasked regions (where mask=0) unchanged: dest = dest & ~mask. (2) Create a temporary by ANDing the source with the mask, retaining source pixels only in opaque regions: temp = source & mask. (3) OR the temporary result into the destination, drawing the source pixels into the cleared areas: dest = dest | temp. These operations can be implemented pixel-by-pixel or in hardware-accelerated blocks for efficiency. At the pixel level, the overall effect of the masked is: for each position (i, j), destination[i][j] = (original_destination[i][j] & ~[mask](/page/Mask)[i][j]) | (source[i][j] & [mask](/page/Mask)[i][j]). Equivalently, if [mask](/page/Mask)[i][j] == 1, then destination[i][j] = source[i][j]; otherwise, destination[i][j] remains the original value. This formulation replaces the destination with the source in opaque regions (assuming a black (0) background in cleared areas) while preserving the original values in transparent regions, suitable for transfer effects like rendering. A representative example is rendering a , such as a character icon, over a complex background scene. The sprite's defines its (1 bits for the character's body, 0 bits for the surrounding area), allowing the to transfer only the icon's pixels while leaving the background visible through the transparent gaps, as commonly used in early games and user interfaces. Variations include inverse masking, where the mask is inverted (1 bits for cutouts) to erase shapes from the destination rather than drawing them, useful for creating holes or windows in bitmaps. Additionally, multi-bit masks (e.g., 8-bit ) can approximate partial by scaling source pixels based on mask , serving as a precursor to full in later graphics systems.

Raster Operations

Raster operations, or ROPs, extend the basic bit-block transfer (BitBlt) functionality by applying bitwise operations to combine pixels from , destination, and optionally a or , enabling complex effects such as painting, erasing, and inverting without requiring multiple separate blits. In systems like the Windows (GDI), these operations are standardized through 256 possible ROP codes, each represented as an 8-bit index that selects one of 256 unique combinations of , XOR, and NOT operations on the three operands in . Common examples include SRCPAINT (hex 0xEE0086), which performs a bitwise OR between the source and destination (result = source | destination), useful for overlaying non-transparent elements; PATCOPY (hex 0xF00021), which copies the directly to the destination (result = ), ideal for filling areas with tiled es; and DSTINVERT (hex 0x550009), which inverts the destination bits (result = ~destination), often employed for temporary flashing or highlighting effects. These codes allow developers to achieve effects like merging images or applying textures in a single operation, with the typically derived from the current selected in the device context. Ternary operations incorporate a third —the —for more versatile fills and composites, such as result = (source & ) | destination (corresponding to ROP code 0xFA0029 or DSaPno in mnemonic form), which ANDs the source with the before ORing with the destination to create masked fills or textured overlays. Masking itself serves as a special case of ROP application, where a mask bitmap acts as the to selectively apply source pixels. Implementation typically relies on lookup tables that map the 8-bit ROP index to the corresponding , allowing software emulation or via arithmetic logic units (ALUs) configured for the 16 binary or full 256 variants; the general form is result = ROP_index(source, destination, pattern), evaluated pixel-by-pixel during the . Hardware support in graphics cards uses dedicated ROP engines to compute these operations efficiently, often in parallel for multiple pixels. These ROPs were part of the Windows GDI from its early versions, including (1985), with hardware-accelerated 2D support for the same ROP set added via (introduced in 1996) to improve performance in games and multimedia applications. While binary ROPs (limited to source and destination) offered speed advantages in resource-constrained environments, the bitwise nature of all ROPs proved inadequate for smooth blending or transparency gradients, prompting the shift to techniques in modern graphics APIs.

Applications

Early Uses

Bit blit operations played a pivotal role in the development of early graphical user interfaces (GUIs), enabling efficient manipulation of screen content on bitmapped displays. In the system, released in 1981, bit blits facilitated smooth window dragging and resizing by rapidly copying rectangular blocks of pixels to update the display without redrawing entire screens, supporting the system's overlapping windows and . Similarly, the Apple Macintosh, introduced in 1984, relied on bit blits within its graphics library—developed by —to handle dynamic GUI elements like window movement and icon repositioning, ensuring responsive interactions on limited hardware. For icon and cursor rendering, bit blits using XOR operations provided reversible highlighting, allowing temporary overlays without permanent alteration of underlying pixels. This technique inverted pixels under a moving cursor, making it visible against any background and enabling easy erasure by reapplying the same operation, a method essential for non-flickering pointer feedback in early GUIs like those on the and Macintosh. In practice, developers blitted cursor bitmaps in XOR mode to the screen buffer, supporting precise user selection in -based interfaces. In early during the , bit blits accelerated sprite movement by transferring character bitmaps between off-screen buffers and the display, optimizing performance on systems with constrained processing power. On platforms like the Atari ST and , software or hardware blitters copied data to simulate fluid animation, as seen in titles requiring rapid updates of multiple on-screen elements, reducing CPU overhead for rendering. Text rendering in raster displays shifted to bit blitting of bitmaps, replacing slower drawing with pre-rasterized character images for faster output. This approach allowed efficient placement of fonts on bitmapped screens, supporting variable-pitch in early systems. A key case study is Smalltalk's BitBlt class, developed in the 1970s at PARC under and implemented by , which served as the foundational primitive for all graphics operations in object-oriented interfaces. BitBlt handled copying, scaling, and combining bitmaps for windows, icons, and text, enabling interactive GUIs where users could objects or edit content seamlessly, influencing subsequent systems through its microcode-optimized efficiency. The impact of bit blits extended to bitmap-based editing, exemplified by in 1984, where QuickDraw's blitting routines allowed users to draw, erase, and manipulate pixels intuitively, democratizing digital art on personal computers.

Modern Contexts

In contemporary , bit blitting remains integral to libraries, particularly for efficient image transfers in game engines and user interfaces. The (SDL2) provides functions like SDL_BlitSurface, which copies pixel data from one surface to another, supporting colorkey masking to treat specific colors as during the operation, enabling seamless rendering in games. Similarly, the Cairo library offers paint_with_alpha, a method that composites an image surface onto a destination with adjustable alpha , functioning as an equivalent to alpha-blended bit blits for vector and raster rendering in cross-platform applications. On the and mobile platforms, bit blit operations underpin efficient rendering in browser and app environments. The Canvas API's drawImage method performs blit-like transfers by drawing images, videos, or other canvases onto a target , facilitating dynamic graphics in web applications such as interactive visualizations and games. In development, the Canvas class's drawBitmap method serves a comparable role, copying bitmaps to the canvas for UI overlays and layered compositing, optimizing performance in resource-constrained mobile interfaces. GPU integration has extended bit blitting into programmable pipelines, where copies simulate traditional operations. In GLSL fragment , developers sample source and write to render targets to perform blits, allowing custom raster operations (ROPs) like bitwise blending through shader logic for effects in rendering. The specification, which reached Candidate Recommendation status in December 2024, includes copyExternalImageToTexture on the GPUQueue interface, which efficiently transfers external images (e.g., from canvases) to GPU , supporting low-latency 2D operations in web-based graphics. In modern graphics APIs such as , the vkCmdBlitImage command (introduced in Vulkan 1.0 in 2016) enables low-overhead image copies between textures, critical for high-frame-rate and experiences on mobile devices, where reduced CPU involvement minimizes latency in layered scene rendering. In , TensorFlow's tf.image.extract_glimpse acts as a blit variant by extracting and resizing image patches, used in data augmentation pipelines to generate varied training samples for models. Niche applications revive bit blitting for legacy and constrained environments. Retro emulators like faithfully replicate 1980s VGA bit blits through , ensuring accurate pixel-perfect rendering of classic games on modern systems. In systems for displays, bit blits accelerate via dedicated APIs like NXP's G2D, performing block copies and fills to update low-power screens efficiently without full frame redraws. Although higher-level APIs like and Skia often abstract bit blitting for simplicity, the technique persists in performance-critical 2D tasks, such as UI scaling in embedded UIs, where direct memory copies reduce overhead compared to vector recomputation.

Comparisons

With Hardware Sprites

Hardware sprites represent a dedicated hardware approach to rendering small, movable bitmaps in , particularly for games and graphical user interfaces, where video hardware overlays these elements directly onto the display without modifying the main . This method supports typically 8 to 64 sprites per frame, depending on the system, with features such as built-in for efficient interaction handling. For instance, the Amiga's hardware sprites are 16 pixels wide, use two 16-bit data words per line for up to three colors plus , and are positioned via registers that attach them to specific scan lines, leveraging (DMA) for automatic display during horizontal blanking periods. In contrast, bit blitting relies on software routines to read from source bitmaps, perform operations like masking for , and write directly to display memory, which can introduce visual artifacts such as or flicker during updates, especially on unaccelerated systems. Additionally, after moving a blitted element, software must manually repair the background by redrawing obscured areas, increasing computational overhead and risking inconsistencies if not synchronized with the display refresh. Hardware sprites excel in scenarios with limited numbers of objects, such as the Amiga's eight sprites supporting layering and with minimal CPU intervention, enabling smooth animations at 50-60 frames per second. The NES Picture Processing Unit (PPU), for example, handles up to 64 sprites (8x8 or 8x16 pixels) with limited for the first sprite against the background via the "sprite 0 hit" flag, though limited to eight per scan line to avoid overflow. Bit blits, however, scale more flexibly for arbitrary quantities of elements through CPU or GPU , avoiding fixed limits but remaining CPU-intensive without acceleration. During the 1980s, consoles like the and Master System prioritized hardware sprites for efficiency, with the latter supporting 64 sprites to reduce processor demands in resource-constrained environments. This shifted in PC gaming with the adoption of SVGA standards in the early , where software bit blits became prevalent due to the lack of standardized sprite hardware, relying instead on general-purpose video memory operations for broader compatibility. Hybrid techniques emerged, where bit blits prepare sprite data in system memory before uploading to registers for rendering, combining software flexibility with speed. In modern GPUs, these approaches unify through texture layers and shader-based ting, effectively simulating unlimited sprites without legacy constraints. Performance-wise, sprites achieve 60 with negligible CPU usage by offloading rendering, whereas early bit s were heavily CPU-bound until via blitter chips or GPUs alleviated the load. Masked blits can simulate sprite-like transparency in software but still require background restoration, underscoring 's efficiency edge.

With Alpha Compositing

, introduced in the Porter-Duff model in 1984 by Thomas Porter and Tom Duff, utilizes an alpha channel representing opacity values from 0 (fully transparent) to 1 (fully opaque) to perform weighted blends between source and destination images. The foundational "over" operator in this model computes the result as C = \alpha_s C_s + (1 - \alpha_s) C_d, where \alpha_s is the source alpha, C_s the source color, and C_d the destination color, enabling smooth partial transparency without binary restrictions. In contrast, bit blits handle transparency through binary mechanisms like masks or XOR operations, which treat pixels as fully opaque or fully transparent, often resulting in and jagged edges due to the absence of sub-pixel blending for smooth transitions. This limitation stems from the bitwise nature of blits, which cannot interpolate opacity levels, leading to harsh boundaries in rendered images. Bit blits served as an early precursor to alpha compositing in computer graphics, providing efficient 2D image transfers that laid the groundwork for more advanced layering techniques, though modern systems have evolved to favor alpha methods for their flexibility in handling complex scenes. Contemporary graphics APIs, such as OpenGL's glBlendFunc, support blending operations that can approximate certain raster operations (ROPs) from bit blits but prioritize alpha compositing for achieving photorealistic effects like soft edges and layered transparency. A key distinction lies in their mathematical foundations: XOR blits perform reversible bitwise exclusive-or operations, allowing easy undoing by reapplying the same blit but producing stark, non-smooth results unsuitable for nuanced visuals, whereas 's formula C = \alpha_s C_s + (1 - \alpha_s) C_d yields gradual blends for natural-looking overlaps. Bit blits remain relevant in use cases requiring 1-bit or retro , such as games emulating 1980s hardware for authentic low-resolution effects, while dominates modern applications like elements and video overlays, where smooth transparency enhances visual fidelity in software from web browsers to video editors. Performance-wise, typically involves floating-point multiplications and additions, which were slower on legacy hardware lacking dedicated units, whereas bit blits leverage fast integer bitwise operations for quicker execution in resource-constrained environments. On older systems, this made blits preferable for tasks, though modern GPUs handle alpha blending efficiently through .

References

  1. [1]
    The Bit-Block Transfer - Programming Windows®, Fifth Edition [Book]
    Bitblt (pronounced “bit blit”) stands for “bit-block transfer.” The BLT ... The term “bitblt” was first used in graphics in connection with the SmallTalk ...
  2. [2]
    How the Graphical User Interface Was Invented - IEEE Spectrum
    Experimenting with bit-map manipulation, Smalltalk researcher Dan Ingalls developed the bit-block transfer procedure, known as BitBlt. The BitBlt software ...
  3. [3]
    Dan Ingalls - CHM - Computer History Museum
    As part of his work on Smalltalk graphics, Ingalls designed and implemented the BitBlt (bit block transfer) graphics primitive enabling fast and flexible bitmap ...
  4. [4]
    [PDF] Digital Image Basics
    A bitmap is a simple black and white image, stored as a 2D array of bits (ones and zeros). In this representation, each bit represents one pixel of the image.
  5. [5]
    Types of Bitmaps - Windows Forms - Microsoft Learn
    A bitmap is an array of bits that specify the color of each pixel in a rectangular array of pixels. The number of bits devoted to an individual pixel ...
  6. [6]
    Bit block transfer - WebGlossary.info
    Bit block transfer. A data operation commonly used in computer graphics in which several bitmaps are combined into one using a Boolean function. The ...
  7. [7]
    [PDF] Bitmap Graphics SIGGRAPH'84 Course Notes - PDOS-MIT
    The first bitblt operated on a single scan line, but the outer loop was later added, making bitblt a rectangle operator. As bitblt was experimented with, it ...
  8. [8]
    [PDF] A Language for Bitmap Manipulation
    This paper proposes that bitmaps, or raster ... The first instance of this instruction was coded by Dan Ingalls and Diana Merry at Xerox PARC in 1975.
  9. [9]
    BitBlt function (wingdi.h) - Win32 apps - Microsoft Learn
    Oct 13, 2021 · Combines the colors of the source and destination rectangles by using the Boolean AND operator. Copies the source rectangle directly to the ...Missing: mask | Show results with:mask
  10. [10]
    Bit blit | EPFL Graph Search
    ... bit block transfer) is a data operation commonly used in computer graphics in which several bitmaps are combined into one using a boolean function. The ...
  11. [11]
    [PDF] Graphics in Overlapping Bitmap Layers
    Apr 1, 1983 · our current bitblt() also does not have a mask. However ... best, an intersection of the source and destination layers can be maintained.
  12. [12]
    [PDF] Principles of interactive computer graphics - Parent Directory
    Jun 23, 1977 · Newman, William M 1939-. Principles of interactive computer graphics. (McGraw-Hill computer science series) (McGraw-Hill series in artificial.
  13. [13]
    16.1 Xerox PARC – Computer Graphics and Computer Animation
    The bitmapped GUI display would help promote the concept of WYSIWYG (what you see is what you get) allowing people to laser print exactly what they saw on the ...
  14. [14]
    Rasterop (aka Bitblt) - Leptonica
    Aug 23, 2022 · At Xerox, the operation was called Bitblt, pronounced "bit blit", which is short for "Bit Block Transfer." (The Alto displays were 1 bit ...
  15. [15]
  16. [16]
    Digibarn Documents: The Xerox "Star": A Retrospective
    Bit-mapped display -- Until recently, most video display terminals were character-mapped. ... bit-mapped screen was worth the cost anyway. Based upon this ...
  17. [17]
    Smalltalk-80 - The graphics kernel
    The BitBlt operation is inten- tionally a very general operation, although most applications of it are graphically simple, such as ~move this rectangle of ...Missing: blit core
  18. [18]
    [PDF] Performance Comparison of the Window Systems of Two LISP ...
    Bitbit: Create a 320 by 320 array of random bits, and display using the bitblt primitives, in a random location on the window. Perform this operation ten ...
  19. [19]
    Y Combinator's Xerox Alto: restoring the legendary 1970s GUI ...
    Jun 26, 2016 · “Blitting” became a standard graphics operation and can still be found in Windows. The Alto implemented many functions in microcode that most ...
  20. [20]
    Bitblt - research!rsc
    Jan 7, 2008 · Dan Ingalls invented bitblt for the Alto workstation developed at Xerox PARC. Rob Pike and Bart Locanthi used bitblt as the graphics ...Missing: paper | Show results with:paper
  21. [21]
    [PDF] The integrated software and user interface of Apple's Lisa
    In 1979 Apple began to develop Lisa, a workstation to enhance the productivity of office workers. The hardware was built around a Motorola 68000, ...<|separator|>
  22. [22]
    [PDF] Display PostScript System - 13thmonkey.org
    Apr 15, 1993 · Uses the Display PostScript extension to draw an ochre box and uses X primitives to wait for a mouse click before terminating. */. #include ...
  23. [23]
    DOS Days - 2D and 3D Graphics Card Technology - Part 2
    ### Summary of BitBlt Acceleration in VGA SVGA Cards in the 1990s
  24. [24]
    Computer graphics: Introduction and history - Explain that Stuff
    Jul 12, 2022 · An easy-to-understand introduction to computer graphics, including raster and vector graphics, 2D and 3D, and CGI.
  25. [25]
    [PDF] Understanding the Linux Graphics Stack training - Bootlin
    • Also known as bit blit or BITBLT (in reference to the hardware opcode). ▷ Implemented as a line-per-line copy (maximum memory-contiguous block).
  26. [26]
    Bitmap Basics - A GDI tutorial - CodeProject
    Mar 4, 2000 · The logic that GDI uses to convert a pixel is thus: First, GDI resolves the RGB value of the source (DIB) pixel it is converting. If the DIB is ...<|separator|>
  27. [27]
    [PDF] Basic QuickDraw - Apple Developer
    This chapter describes how to initialize basic QuickDraw and how to create and manage a basic graphics port—the drawing environment in which your ...
  28. [28]
    Image module - Pillow (PIL Fork) 12.0.0 documentation
    The Image module provides a class with the same name which is used to represent a PIL image. The module also provides a number of factory functions.Source code for PIL.Image · Image file formats · Concepts · ImageDraw module
  29. [29]
    Inside the Am2901: AMD's 1970s bit-slice processor
    Apr 18, 2020 · The Am2901 is a bit-slice processor, processing 4 bits per chip, with multiple chips combined for larger word sizes. It was a building block, ...Missing: blit | Show results with:blit
  30. [30]
    IBM Forges on with 8514/A Standard: But Who Wants It?
    Although the 8514/A controller doesn't run VGA graphics software, it can input VGA signals via a special-feature connector and display them on a multiple- ...Missing: blit | Show results with:blit
  31. [31]
    I finally got this ATI VGA Blitter Working! - YouTube
    Dec 11, 2022 · ... IBM 8514/A compatible blitter. I finally get it to work correctly, including the ATI specific blitter hardware and I use it to generate some ...Missing: bit | Show results with:bit
  32. [32]
    glBlitFramebuffer - OpenGL 4 Reference Pages - Khronos Registry
    glBlitFramebuffer and glBlitNamedFramebuffer transfer a rectangle of pixel values from one region of a read framebuffer to another region of a draw framebuffer.Missing: bit | Show results with:bit
  33. [33]
    ID3D11DeviceContext::CopySubresourceRegion (d3d11.h) - Win32 ...
    Nov 18, 2024 · CopySubresourceRegion can reinterpret the resource data between a few format types. For more info, see Format conversion using Direct3D 10.1. If ...
  34. [34]
    The *fastest* way to do Blit. - Graphics and GPU Programming
    Apr 25, 2000 · On ET6000 hardware blitting beats sofware when the size of the image is more than 1024 bytes. video cards do much, much better.Missing: bit performance gigapixel/ second
  35. [35]
    FPGA and ASIC implementation of robust invisible binary image ...
    It provides imperceptibility and robustness and has the ability to hide many bits. In the proposed watermarking technique, the pixels are flipped and hidden ...Missing: blit | Show results with:blit
  36. [36]
    vkCmdBlitImage(3) - Vulkan Documentation
    srcImage is the source image. srcImageLayout is the layout of the source image subresources for the blit. dstImage is the destination image.Missing: 2016 | Show results with:2016
  37. [37]
    [PDF] Section F.1.1 Display Management: The X Window System - MIT
    Oct 29, 1986 · ((source FUNC destination) AND mask) OR (destination AND (NOT mask)) ... This is the usual bitblt, or 'bit block transfer" operation. The ...<|control11|><|separator|>
  38. [38]
    Drawing a monochrome bitmap with transparency - The Old New ...
    Aug 3, 2005 · The first erases the pixels that are about to be overwritten by setting the foreground to black and background to white, then using SRCAND .
  39. [39]
    Ternary Raster Operations - Win32 apps - Microsoft Learn
    Jan 7, 2021 · Ternary raster-operation codes define how GDI combines the bits in a source bitmap with the bits in the destination bitmap.
  40. [40]
    The OS/2 Display Driver Zoo
    Oct 14, 2025 · It should be kept in mind that the Windows GDI was designed circa 1985, before any such accelerators actually existed. So it wasn't crazy to ...
  41. [41]
    The Real History of the GUI - SitePoint
    Feb 12, 2024 · Along the way we'll learn about the memex, the first wooden mouse, “bit-blitting,” the Xerox Star, the Apple Lisa, and what really happened that ...
  42. [42]
    Milestone-Proposal:Introduction of the Apple Macintosh Computer ...
    Mar 24, 2016 · As Bill was at least initially unaware that the BitBlt graphics code for the Xerox Alto (originally written by Dan Ingalls) was done in ...<|separator|>
  43. [43]
    Was there a specific benefit to inverted (XOR) mouse cursors other ...
    Mar 30, 2021 · XOR screen operations work best on monochrome screens or screens with a very limited color depth: On modern high-colour screens, XOR operations ...
  44. [44]
    [PDF] Smalltalk Session - Department of Computer Science
    Nov 15, 1982 · SmaUtalk was part of this larger pursuit of ARPA, and later of Xerox PARC, that I called personal computing. There were so many people involved ...
  45. [45]
    SDL2/SDL_BlitSurface - SDL Wiki
    The blit function should not be called on a locked surface. The blit semantics for surfaces with and without blending and colorkey are defined as follows: RGBA- ...Missing: Cairo paint_with_alpha
  46. [46]
    CanvasRenderingContext2D: drawImage() method - Web APIs | MDN
    Sep 25, 2025 · The CanvasRenderingContext2D.drawImage() method of the Canvas 2D API provides different ways to draw an image onto the canvas.Missing: UI | Show results with:UI
  47. [47]
  48. [48]
    GPUQueue: copyExternalImageToTexture() method - Web APIs | MDN
    Jun 23, 2025 · The copyExternalImageToTexture() method of the GPUQueue interface copies a snapshot taken from a source image, video, or canvas into a given GPUTexture.Missing: GLSL blits
  49. [49]
  50. [50]
    tf.image.extract_glimpse | TensorFlow v2.16.1
    Extracts a glimpse from the input tensor.Missing: Vulkan low- overhead blits VR AR 2020s blit<|separator|>
  51. [51]
    How much of the VGA graphics card hardware is emulated in DosBox?
    Jan 17, 2022 · VGA register behavior is emulated well enough, otherwise not very many games (and especially demoscene productions) would be supported. Most ...Emulating Monochrome/VGA Multi-Screen setup? - Page 2 \ VOGONSThe Quest for Pixel Perfect DOS Emulation - VOGONSMore results from www.vogons.orgMissing: blit | Show results with:blit
  52. [52]
    [PDF] i.MX Graphics User's Guide - NXP Semiconductors
    Dec 15, 2022 · The G2D Application Programming Interface (API) is designed to be easy to understand and to use the 2D Bit blit (BLT) function. It allows ...<|separator|>
  53. [53]
    4 Sprite Hardware / Sprite Hardware Details - Amiga Developer Docs
    Sprites are produced by the circuitry shown in Figure 4-13. This figure shows in block form how a pair of data words becomes a set of pixels displayed on ...
  54. [54]
    PPU programmer reference - NESdev Wiki
    Mar 29, 2010 · Sprite 0 hit flag. Sprite 0 hit is a hardware collision detection feature that detects pixel-perfect collision between the first sprite in OAM ( ...
  55. [55]
    Blit operations | ugBASIC user manual
    The blitting is a data operation used in computer graphics in which several bitmaps are combined into one using a boolean (or mathematical) function.
  56. [56]
    Sega Master System/Hardware comparison
    The Master System displays 32 hardware sprites on screen, compared to the A500's 8 hardware sprites (though blitting allows the A500 to exceed this limit).
  57. [57]
    How were sprites in DOS games programmed?
    Mar 24, 2022 · I would like to know how sprites in DOS games for vintage video cards like Hercules, CGA, EGA and VGA were programmed.What acceleration features did 2D PC video cards have? [closed]Were there any "off the shelf" graphics chips that supported 2D ...More results from retrocomputing.stackexchange.comMissing: 1990s | Show results with:1990s
  58. [58]
    [PDF] Computer Graphics Volume 18, Number 3 July 1984 - keithp.com
    Computer Graphics Volume 18, Number 3 July 1984. Compositing. Digital Images. Thomas Porter. Tom Duff 'f. Computer Graphics Project. Lucasfilm Ltd. ABSTRACT.
  59. [59]
    [PDF] Transparency and Anti-Aliasing Techniques for Real-Time Rendering
    Anti-aliasing (AA) is also important, since jagged edges can be easily spotted and create disruptive distractions during a scene walkthrough, which are ...
  60. [60]
    Method and apparatus for anti-aliasing in a graphics system
    In more detail, the invention relates to anti-aliasing techniques for eliminating jagged edges from a computer graphics display. ... BLIT with alpha transparency ...
  61. [61]
    [PDF] Alpha and the History of Digital Compositing - cs.Princeton
    Aug 15, 1995 · The integral alpha channel and premultiplied alpha are fundamentally new compositing concepts, intrinsically supporting full matting, that are ...
  62. [62]
    glBlendFunc - OpenGL 4 Reference Pages - Khronos Registry
    glBlendFunc defines the operation of blending for all draw buffers when it is enabled. glBlendFunci defines the operation of blending for a single draw ...
  63. [63]
    Pixel art games aren't retro, they're the future - The Verge
    Jul 3, 2014 · Pixel art is best thought of as video gaming's most characteristic visual style, one that was forged throughout the history of the medium and is inextricably ...
  64. [64]
    Video Compositing: How to Work With Alpha Mattes ... - Pond5 Blog
    You can utilize these techniques to blend real footage and VFX together, helping to keep your projects fresh and interesting, while improving your skills.Missing: UI overlays modern applications
  65. [65]
    [PDF] Alpha Blending with No Division Operations - arXiv
    Feb 17, 2022 · This tutorial explains how to avoid division op- erations when alpha blending with 32-bit RGBA pixels. An RGBA pixel contains four 8-bit ...
  66. [66]
    Faster Alpha Blending? - GameDev.net
    This processor has a good FPU, but still, floating-point operations are quite slow. Using integers will be much faster. Also, are you writing to graphics memory ...Missing: bitwise hardware