Bitmap

This bitmap section describes how Flash handles raster images.

Flash supports a few different image formats: some are standard formats while others are specific to flash. Open Flash refers to theses formats using an "image type" using a MIME type format.

image/x-swf-lossless1

Opaque lossless SWF bitmap in the sRGB color space with 8-bit channel depth and dimensions up to (2¹⁶-1)×(2¹⁶-1) pixels.

This format corresponds to the one used by DefineBitsLossless in the SWF spec.

Syntax
SwfBitmap :
   {
         0x03 dimensions colorCountMinusOne zlib(colorMap)
      | 0x04 dimensions zlib(pixMap15)
      | 0x05 dimensions zlib(pixMap24)
   }
dimensions :
   width height
width :
   LE_UINT16
height :
   LE_UINT16

Color map encoding (code 0x03):

Syntax
colorCountMinusOne :
   UINT8
colorMap(width, height, colors) :
   palette(colors) colorMapRow{height}
palette(colors) :
   color{colors}
color :
   UINT8 UINT8 UINT8
paddedColorMapRow(width, colors) :
   colorMapRow PADDING
colorMapRow(width, colors) :
   UINT8[where: value < colors]{width}

Pixel map 15 encoding (code 0x04):

Syntax
pixMap15 :
   paddedPixMap15Row{height}
paddedPixMap15Row(width) :
   pixMap15Row(width) PADDING
pixMap15Row(width) :
   pix15{width}
pix15 :
   BE_UINT16

Pixel map 24 encoding (code 0x05):

Syntax
pixMap24 :
   pixMap24Row{height}
pixMap24Row(width) :
   pix24{width}
pix24 :
   0x00 UINT8 UINT8 UINT8

TODO: Check if the last row needs padding

intCeil

The intCeil(n, k) function returns the smallest multiple of k greater than or equal to n. It is used to compute sizes and offsets based on alignment.

Using mathematical notation, the function can be defined as:

# ⌈ x ⌉ represents the ceiling funtion
intCeil(n, k) = k × ⌈ n / k ⌉

It can also be defined using the modulo operator instead of division and ceiling:

intCeil(n, k) = n + k - 1 - ((n - 1) % k)

Example: Data rows of lossless images must be aligned on 4 bytes. This means that padding must be inserted such that the total size is a multiple of 4. The intCeil(n, 4) function returns this total size for n bytes of useful data. If we have 253 bytes of useful data, we must add 3 bytes of padding to reach 256 bytes, hence intCeil(253, 4) == 256.

ℹ Note: If n is already a multiple of k, the result is just n.

image/x-swf-abmp

SWF bitmap with transparency (alpha channel).