Fact-checked by Grok 2 weeks ago

Adam7 algorithm

The Adam7 algorithm is an interlacing method for raster images, defined as interlace method 1 in the specification, which enables progressive display by dividing the image into seven distinct passes that transmit subsets of pixels in a patterned order, allowing decoders to render a low-resolution preview that gradually sharpens as more data arrives. Named after its creator, Adam M. Costello, the algorithm was developed in 1995 alongside the initial standard to improve upon the limitations of one-dimensional interlacing in formats like . Adam7 operates on an 8×8 that repeats across the entire , starting from the top-left corner, with pixels scanned left-to-right within scanlines and top-to-bottom across passes. The seven passes use specific starting positions and increments for rows and columns, as outlined in the PNG specification:
  • Pass 1: Starts at row 0, column 0; increments by 8 for both (1/64 of pixels, forming an 8×8 block grid).
  • Pass 2: Starts at row 0, column 4; row increment 8, column increment 8 (adds horizontal details to pass 1).
  • Pass 3: Starts at row 4, column 0; row increment 8, column increment 4 (adds details on offset rows for initial columns).
  • Pass 4: Starts at row 0, column 2; row increment 4, column increment 4 (transitions to denser spacing).
  • Pass 5: Starts at row 2, column 0; row increment 4, column increment 2 (complements pass 4).
  • Pass 6: Starts at row 0, column 1; row increment 2, column increment 2 (provides finer detail on remaining even rows).
  • Pass 7: Starts at row 1, column 0; row increment 2, column increment 1 (fills all remaining pixels at full resolution).
This two-dimensional approach ensures even distribution of pixels across passes, supporting efficient filtering and while avoiding empty scanlines in small images (e.g., those narrower than 5 pixels may skip early passes). In files, interlacing is optional and signaled via the IHDR chunk with a value of 1; decoders must handle it by expanding partial scanlines (e.g., duplicating pixels to fill rectangles) for smooth rendering, often blending with a for visual enhancement. Though designed for slow connections, Adam7's compression interactions can sometimes increase file sizes compared to non-interlaced s, leading to its declining use in modern web contexts favoring simpler sequential loading.

Introduction

Definition and Purpose

The Adam7 algorithm is a seven-pass interlacing method that divides a raster into seven subimages based on an 8×8 pattern, facilitating progressive loading and display by transmitting pixels in a sequence that allows for partial rendering. This approach enables decoders to display a coarse approximation of the early in the , with subsequent passes refining the detail, which improves the perceived performance of image loading in bandwidth-limited environments such as the web. Specified as an optional feature in the format under ISO/IEC 15948:2004, Adam7 contrasts with non-interlaced images by providing this capability without mandating its use by encoders or decoders beyond basic support. The algorithm generates seven increasingly detailed versions of the image, starting with the first pass that covers only 1/64 of the pixels in a sparse , building toward full resolution by the seventh pass.

Benefits and Use Cases

The Adam7 algorithm provides significant benefits in scenarios involving progressive loading, particularly over slow or unreliable network connections. By dividing the image into seven passes that progressively refine the display from a low-resolution preview to full detail, it enables faster visual feedback during transmission. For instance, the first pass delivers a coarse 1/8th-scale approximation of the image, allowing users to immediately recognize without waiting for the entire file to download. This contrasts with non-interlaced PNGs, which load sequentially and may appear blank until complete, thereby reducing perceived wait times in web browsers and improving . A key advantage is the reduced for meaningful visibility; interlaced PNGs can begin rendering recognizable previews after receiving only a fraction of the , making them appear sooner than equivalent non-interlaced files of similar size. However, this comes at the cost of increased due to the repeated transmission of headers and ancillary chunks across passes, as well as potentially less efficient from fragmented scanlines. One example demonstrates an 18% increase for a 152×96 (from 4,000 bytes non-interlaced to 4,731 bytes interlaced). Adam7 has been used for web graphics where progressive loading enhances perceived performance, such as in image galleries or banners that benefit from early previews, though its use has declined in modern contexts due to the size penalty and preference for sequential loading. It also suits thumbnails in progressive image viewers and archival formats like in digital libraries, where partial access to content is valuable for quick scanning. Conversely, it is less ideal for animations (e.g., ) or applications prioritizing maximal compression, as the size penalty can outweigh benefits on fast connections. While early passes may introduce minor visual artifacts if is applied by the viewer to upscale low-resolution data, Adam7 remains simpler and more lightweight than transform-based progressive methods like wavelet compression in JPEG 2000.

Historical Development

Origins in PNG Standardization

The Adam7 algorithm emerged during the development of the format in late 1994 and early 1995, as part of collaborative efforts by the PNG working group to establish a alternative to the format amid Unisys's enforcement of patents on the LZW compression algorithm used in GIF. The project gained momentum after announced its intent to replace GIF with PNG on February 7, 1995, prompting rapid refinement of core features including compression, color support, and progressive rendering capabilities. This work involved contributions from developers associated with libpng, an open-source library for PNG encoding and decoding, which paralleled the specification drafts. The specific Adam7 interlacing scheme was first proposed on February 2, 1995, by Adam M. Costello, as a two-dimensional method to enable faster visual feedback during image loading compared to GIF's one-dimensional approach. It was actively discussed in the png-list mailing list archives throughout 1995, where participants evaluated its balance of progressive display benefits and implementation simplicity within the emerging standard. Adam7 was incorporated into the PNG 1.0 draft by mid-1995, following the release of Draft 9 on March 7, 1995, which froze the core specification after just two months of intense development. The algorithm appeared in the official PNG 1.0 specification, approved as a W3C Recommendation on October 1, 1996, and published as RFC 2083 in March 1997. Subsequent updates, including minor clarifications to interlacing descriptions for better encoder/decoder consistency, were finalized in PNG 1.2 as an International Standard (ISO/IEC 15948:2003) in November 2003.

Naming and Key Contributors

The name "Adam7" derives from its primary proposer, Adam M. Costello, combined with the numeral 7 to denote the algorithm's seven distinct passes through the image data. Costello introduced the scheme via an email proposal on February 2, 1995, to the proto-PNG development mailing list, extending earlier ideas for progressive display in raster images. Key contributors to the Adam7 algorithm include Adam M. Costello as the primary architect of the 7-pass method, building on an initial 5-pass interlacing concept proposed by Lee Daniel Crocker during early PNG discussions. Crocker, Costello, and Tom Lane are all credited authors of the official PNG standard, reflecting their pivotal roles in integrating interlacing into the format. Costello's 1995 suggestion specifically aimed to balance progressive detail revelation with computational simplicity, avoiding overly complex schemes while improving upon one-dimensional interlacing like GIF's. This proposal is preserved in archives of the early PNG mailing lists hosted on SourceForge, dating to 1995. Community feedback on the proto-PNG mailing list played a crucial role in Adam7's adoption, where alternatives such as simpler 4- or 5-pass variants were debated and ultimately rejected in favor of the 7-pass design for its superior two-dimensional coverage without excessive overhead. This consensus ensured Adam7 became the standard interlacing method in the PNG specification, ratified in October 1996.

Core Algorithm

The 8x8 Interlacing Pattern

The Adam7 algorithm employs a fixed 8×8 interlacing pattern that serves as the foundational grid for mapping pixels to seven passes throughout the image. This pattern is replicated across the entire image, starting from the upper-left corner, to determine the order in which pixels are transmitted and displayed. For images whose dimensions are not multiples of 8, the pattern is applied using to the width and height, ensuring complete coverage without overflow. The 8×8 grid assigns each cell to one of the seven passes, with no cells left unassigned or designated for a pass 0 or 8. Visually, the pattern can be represented as follows, where the numbers indicate the pass number for each position (rows and columns indexed from 1 to 8):
1 6 4 6 2 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7
3 6 4 6 3 6 4 6
7 7 7 7 7 7 7 7
5 6 5 6 5 6 5 6
7 7 7 7 7 7 7 7
This layout extracts subimages from the full , where each pass corresponds to a of pixels selected according to the grid positions. The design of the 8×8 pattern ensures an even distribution of pixels across the passes, promoting a balanced progressive refinement that avoids the distorted, stretched appearance common in simpler line-by-line interlacing methods like those in . The choice of an 8×8 grid, a , aligns with common block sizes in image processing and , facilitating efficient and optimal visual progression by starting with a coarse 1/64 in the first pass and gradually filling in details.

Pass Structure and Pixel Selection

The Adam7 algorithm traverses the image through seven sequential passes, systematically selecting pixels according to predefined starting positions and increments within the repeating 8x8 interlacing pattern. This structure ensures progressive refinement, where each pass transmits a subset of pixels that interleave with those from prior passes to build a higher-resolution image without overlap or . The passes are executed in strict , beginning with the coarsest selection and culminating in the filling of all remaining pixels. Pixel selection in each pass follows a grid-based rule: starting from the specified row and column indices (0-based), the algorithm steps through the by adding the row distance to the row index and the column distance to the column index repeatedly until the image boundaries are reached. Within each selected row, pixels are processed from left to right. The parameters for the seven passes, which dictate these starting points and step sizes, are detailed in the following table:
PassStarting RowStarting ColumnRow DistanceColumn Distance
For Pass 1, pixels are chosen every 8 rows and every 8 columns starting at the top-left corner (equivalent to position (1,1) in 1-based indexing), capturing a sparse set that provides an initial low-resolution outline of the , covering 1/64 of the total pixels—for instance, effectively sampling a 32×32 in a 256×256 . Pass 2 then selects pixels every 8 rows starting at row 0 but every 8 columns starting at column 4 (position (5,1) in 1-based indexing for the offset within the ), adding details to the horizontal midpoints of the coarse from Pass 1. Pass 3 continues this progression by targeting every 8 rows starting at row 4 (position (5,1) vertically offset) and every 8 columns starting at column 0, further densifying the vertical structure. Subsequent passes narrow the distances for finer interleaving: Pass 4 selects every 4 rows from row 0 and every 4 columns from column 2, Pass 5 every 4 rows from row 2 and every 2 columns from column 0, and Pass 6 every 2 rows from row 0 and every 2 columns from column 1. Finally, Pass 7 captures all remaining pixels by stepping every 2 rows from row 1 and every 1 column from column 0, completing the with the densest fill. These selections align directly with the pattern, where each cell's pass number indicates the transmission order for pixels at equivalent modular positions (x mod 8, y mod 8). As a concrete example, in a 100×100 image, Pass 1 selects 13 rows (0, 8, ..., 96) and 13 columns, yielding approximately 169 pixels in a widely spaced grid. Each pass builds upon the previous by inserting pixels into the gaps, enabling viewers to perceive gradual sharpening without reprocessing earlier data.

Mathematical Details

Coverage per Pass

The Adam7 algorithm divides an image into seven passes, each transmitting a specific subset of pixels based on a repeating 8×8 interlacing pattern, resulting in progressive coverage that starts sparse and becomes denser. In an 8×8 block, Pass 1 covers 1 pixel (1/64 of the block), providing the coarsest approximation at positions like the top-left corner. Pass 2 adds 1 more pixel (additional 1/64, cumulative 2/64 or 1/32), typically at a horizontally offset position in the same coarse rows. Pass 3 contributes 2 pixels (additional 2/64 or 1/32, cumulative 4/64 or 1/16), filling in vertically offset locations to double the detail in both dimensions roughly. Subsequent passes follow this pattern of refinement: Pass 4 adds 4 pixels (additional 4/64 or 1/16, cumulative 8/64 or 1/8); Pass 5 adds 8 pixels (additional 8/64 or 1/8, cumulative 16/64 or 1/4); Pass 6 adds 16 pixels (additional 16/64 or 1/4, cumulative 32/64 or 1/2); and Pass 7 completes the image with the remaining 32 pixels (additional 32/64 or 1/2, cumulative 64/64 or full coverage). This coverage can be summarized in the following for an 8×8 , illustrating the incremental counts and fractions:
PassPixels AddedFraction AddedCumulative PixelsCumulative Fraction
111/6411/64
211/6421/32
321/3241/16
441/1681/8
581/8161/4
6161/4321/2
7321/2641
For a general image of dimensions M \times N (where M is height and N is width in pixels), the number of pixels in pass p is determined by the pass-specific starting offsets and increments, given by \left\lceil \frac{M - s_r}{i_r} \right\rceil scanlines, each with \left\lceil \frac{N - s_c}{i_c} \right\rceil pixels, where s_r, s_c are starting row and column, and i_r, i_c are increments (e.g., for Pass 1: s_r=0, s_c=0, i_r=8, i_c=8). This yields roughly \frac{M}{8} \times \frac{N}{8} pixels for early passes like 1–3, scaling up with smaller increments in later passes, with exact counts using ceiling division to handle edge cases where image dimensions are not multiples of the block sizes. The seven-pass structure suffices because it achieves a binary-like doubling of approximately every two passes—starting at 1/8 scale (Passes 1–2), advancing to 1/4 scale (Passes 3–4), then 1/2 scale (Passes 5–6)—before Pass 7 fills the even and odd positions completely, ensuring no significant gaps remain while minimizing overhead from excessive passes that would inflate without proportional display benefits. This design balances rendering speed against compression efficiency, as interlacing slightly expands the file size but enables meaningful previews after just the first few passes. Visually, early passes (1–3) render a blocky, low- thumbnail resembling a scaled-down version of the , while Passes 4–6 interpolate finer details to approximate half-, and Pass 7 seamlessly fills interstitial gaps for the final sharp output.

Pixel Indexing Formulas

The Adam7 algorithm assigns each pixel in an image to one of seven passes based on its coordinates, using a repeating 8×8 pattern that ensures progressive refinement. Pixel positions are typically referenced in 1-based indexing, with (1,1) denoting the top-left corner, as per the PNG specification. To determine the pass, compute the 0-based modular positions ix = (x-1) \mod 8 and iy = (y-1) \mod 8, then consult the predefined 8×8 lookup table where rows correspond to iy (0 to 7) and columns to ix (0 to 7). The value at table[iy][ix] gives the pass number (1 through 7). The standard Adam7 pattern table is as follows:
iy \ ix01234567
016462646
177777777
256565656
377777777
436463646
577777777
656565656
777777777
For example, the at (1,1) yields ix=0, iy=0, mapping to pass 1; the at (2,1) yields ix=1, iy=0, mapping to pass 6. This modular lookup ensures every is uniquely assigned, with no in pass 0, as the pattern is designed to cover completely across the seven passes. Equivalently, pass assignment can be computed parametrically without a , using predefined starting offsets and increments for rows and columns (0-based indexing, passes numbered 1 to 7 as indices 0 to 6). The parameters are:
PassRow StartRow IncrementColumn StartColumn Increment
10808
20848
34804
40424
52402
60212
71201
A pixel at 0-based coordinates (x, y) belongs to pass p if it is the lowest p such that y \geq row_start, x \geq column_start, (y - row_start ) \mod row_increment = 0, and (x - column_start ) \mod column_increment = 0. This can be implemented via sequential checks from pass 1 to 7, as each matches exactly one set of parameters due to the pattern's design. To handle image edges where the width W or height H may not be multiples of 8, the subimage dimensions for each pass are computed using division to account for the offsets and strides. The width for pass p is \lceil (W - column_start ) / column_increment \rceil, and the height is \lceil (H - row_start ) / row_increment \rceil. If either dimension is zero (common for small images with W < 5 or H < 5), the pass contains no pixels and may be omitted. For instance, in a 10×10 image, pass 1 has width \lceil (10 - 0)/8 \rceil = 2 and height \lceil (10 - 0)/8 \rceil = 2. The following pseudocode illustrates pass assignment for a 0-based pixel (x, y):
function get_pass(x, y):
    for p in 0 to 6:  // passes 1-7
        row_start = [0, 0, 4, 0, 2, 0, 1][p]
        row_inc = [8, 8, 8, 4, 4, 2, 2][p]
        col_start = [0, 4, 0, 2, 0, 1, 0][p]
        col_inc = [8, 8, 4, 4, 2, 2, 1][p]
        if y >= row_start and (y - row_start) % row_inc == 0 and
           x >= col_start and (x - col_start) % col_inc == 0:
            return p + 1
    return -1  // error, no pass
This parametric approach derives from extending simpler interlacing patterns, such as a base 3-pass scheme with strides of 4 and 2, iteratively refined to the 8×8 grid for balanced progressive display without gaps.

Implementation

Encoding Process

The Adam7 encoding process involves systematically scanning the source according to the predefined seven-pass order, where pixels are selected based on the interlacing pattern to form distinct subimages for progressive display. For each , the encoder extracts the relevant pixels, treating them as a reduced-resolution with pass-specific width and height dimensions; is then applied independently to the scanlines of each subimage using one of the filter methods (none, , up, , or Paeth) to predict and subtract values, thereby reducing redundancy and improving subsequent compressibility. These filtered scanlines from all passes are concatenated in sequential order before being compressed as a unified datastream. The compressed datastream, generated via the algorithm encapsulated in zlib format, is divided into one or more consecutive IDAT chunks within the file structure, allowing the encoder flexibility in chunk sizing for buffering purposes. Unlike non-interlaced PNGs, the IHDR chunk for an Adam7-interlaced image sets the interlace method flag (the least significant bit in byte 12 of the IHDR data) to 1, signaling the use of Adam7 without requiring any additional headers or repetition of the IHDR across passes. This single IHDR at the file's start, combined with the IDAT chunks, results in a structure that supports partial for early passes but incurs a modest increase—typically 5-20% larger than equivalent non-interlaced files—due to the overall organization. A key aspect of this process is that compression occurs across the entire concatenated filtered rather than isolating each , though the independent filtering per subimage enables decoders to reconstruct early passes by processing only the initial portions of the datastream. Early passes, with their sparse coverage, exhibit higher , leading to less efficient ratios compared to the denser later passes, which offsets some benefits of the unified stream. For instance, encoding a 512×512 RGB using Adam7 produces seven distinct sets of scanlines: Pass 1 yields 64 scanlines of 64 pixels each, Pass 2 yields 64 scanlines of 64 pixels, Pass 3 yields 64 scanlines of 64 pixels, and subsequent passes fill in more details up to Pass 7 with 256 scanlines of 256 pixels, each set filtered separately before collective . This approach facilitates partial decoding for rendering while maintaining lossless fidelity.

Decoding and Rendering

Decoding an Adam7-interlaced PNG image commences with examination of the IHDR chunk, which specifies the interlace method as 1 to indicate Adam7 usage. The compressed image data within IDAT chunks is then decompressed sequentially, yielding scanlines organized across the seven passes. For each pass, the decoder removes the applied filter from the scanlines and inserts the pixels into a full-resolution output buffer at coordinates determined by the pass parameters: starting row and column offsets, row and column increments, and block dimensions. This placement adheres strictly to the replicated Adam7 pattern, ensuring pixels occupy their correct positions in the final image. The process iterates through all passes, with each subsequent pass filling in the gaps left by prior ones. If the image has fewer than five rows or columns, certain passes contain no scanlines and thus omit filter bytes, preventing unnecessary processing. For instance, in an odd-sized 101x101 image, pass 1 selects pixels starting at (0,0) with increments of 8, capturing 13 scanlines and 13 pixels per scanline while skipping edge pixels that do not align with the pattern, such as those beyond index 96. Rendering leverages progressive display to enhance user experience during loading, particularly over slower connections. After decoding each pass, viewers update the on-screen image, often by expanding each new pixel to replicate across the rectangular block it represents in the interlacing scheme—such as duplicating pass 1 pixels into 8x8 areas for an initial 1/8-scale approximation. Subsequent passes refine this: pass 2 fills 8x4 blocks to improve horizontal detail, and by pass 4, the visible resolution nears 1/2 scale with reduced blockiness. The seventh pass eliminates remaining gaps, yielding the complete high-fidelity image and minimizing early artifacts.

Iterative Derivation

No rewrite necessary — no critical errors detected.

Comparisons to Alternatives

The Adam7 interlacing method in differs from the Graphics Interchange Format ()'s four-pass vertical interlacing, which selects lines at intervals of 1/8, 1/4, 1/2, and full resolution, resulting in a highly stretched initial view with 8:1 . In contrast, Adam7 employs seven passes that subsample pixels in both dimensions using an pattern, achieving a maximum of 2:1 and providing a more uniform two-dimensional approximation from the outset, which reduces visual artifacts like excessive elongation during loading. While 's simpler one-dimensional approach is easier to implement and suits animated sequences by maintaining frame consistency, Adam7 offers superior early-stage recognizability for static images, though it requires more computational effort for encoding and decoding. In comparison to modern formats, Adam7 contrasts with JPEG 2000's wavelet-based encoding, which enables scalable refinement in a lossy manner, often achieving higher ratios but at greater and potential quality loss unsuitable for . Adam7 remains lossless and simpler, preserving exact pixel data without patents, which supports its continued use in for web-safe, transparent icons and diagrams. Animated Portable Network Graphics (APNG), an extension of , inherits Adam7 support for individual frames but offers limited interlacing benefits in practice due to its focus on animation sequencing rather than static loading. As of the PNG Third Edition specification (W3C Recommendation, June 2024), Adam7 remains the only defined interlacing method, though its use has declined in modern web contexts due to efficient sequential loading via protocols like HTTP/2. Adam7's block-aligned subsampling facilitates optimizations like SIMD processing for faster pixel traversal in implementations, aligning well with modern hardware vectorization. However, its discrete passes can produce visible stairstep artifacts in early renders—blocky, jagged edges from uniform grid skipping—unlike the smoother gradient progressions in methods, though these resolve fully upon completion.

References

  1. [1]
    Portable Network Graphics (PNG) Specification (Third Edition) - W3C
    Jun 24, 2025 · This document describes PNG (Portable Network Graphics), an extensible file format for the lossless, portable, well-compressed storage of static and animated ...
  2. [2]
    PNG Specification: Data Representation - libpng.org
    This chapter discusses basic data representations used in PNG files, as well as the expected representation of the image data.
  3. [3]
    RFC 2083 - PNG (Portable Network Graphics) Specification Version ...
    This document describes PNG (Portable Network Graphics), an extensible file format for the lossless, portable, well-compressed storage of raster images.
  4. [4]
    Compression and Filtering (PNG: The Definitive Guide) - libpng.org
    In other words, PNG's two-dimensional interlacing scheme can have a significant negative impact on compression, particularly for small images.Missing: Adam7 | Show results with:Adam7
  5. [5]
    History of the Portable Network Graphics (PNG) Format - Linux Journal
    Apr 1, 1997 · The story of PNG actually begins way back in 1977 and 1978 when two Israeli researchers, Jacob Ziv and Abraham Lempel, first published a pair of papers.Missing: Adam7 origins
  6. [6]
    PNG News from 1995 - libpng.org
    21 July 1995 - The PNG mailing lists are reborn on dworkin.wustl.edu, another Majordomo system made available courtesy of Adam `7' Costello. The list membership ...
  7. [7]
    PNG (Portable Network Graphics) Specification - W3C
    The scheme may be freely used by all PNG implementations. The name "Adam7" may be freely used to describe interlace method 1 of the PNG specification.
  8. [8]
    Portable Network Graphics (PNG) Specification (Second Edition)
    Nov 10, 2003 · This document describes PNG (Portable Network Graphics), an extensible file format for the lossless, portable, well-compressed storage of raster images.Reference image to PNG... · Encoding the PNG image as a... · Chunk specifications
  9. [9]
    Chapter 7, "History of the Portable Network Graphics Format"
    The Portable Network Graphics image format, or PNG for short, is the first general-purpose image format to achieve wide, cross-platform acceptance.Missing: origins | Show results with:origins
  10. [10]
    [PDF] PNG (Portable Network Graphics) Specification, Version 1.2
    The scheme may be freely used by all PNG implementations. The name “Adam7” may be freely used to describe interlace method 1 of the PNG specification. Page ...
  11. [11]
  12. [12]
  13. [13]
  14. [14]
  15. [15]
  16. [16]
  17. [17]
  18. [18]
  19. [19]
  20. [20]
    Chapter 8, "PNG Basics" - libpng.org
    PNG's interlacing method, on the other hand, is a two-dimensional scheme with seven passes, known as the Adam7 method (after its inventor, Adam Costello).<|control11|><|separator|>
  21. [21]
    Introduction to PNG - nuwen.net
    There are two methods of interlacing that are popular: GIF interlacing and PNG interlacing (the latter is also called "Adam7").Why Png Matters To You · Interlacing · Tools
  22. [22]
    JPEG2000 vs JPEG vs PNG: What's the Difference
    The progressiveness feature of PNG is based on an optional 2-dimensional 7-pass interlacing scheme, which, however, reduces the compression ratio when used. A ...Missing: Adam7 | Show results with:Adam7
  23. [23]
    APNG Specification - MozillaWiki
    May 29, 2025 · It utilizes the same bit depth, color type, compression method, filter method, interlace method, and palette (if any) as the default image.
  24. [24]