OpenEXR File Layout

Document Purpose and Audience

This document gives an overview of the layout of OpenEXR 2.0 image filesas byte sequences. It covers both single and multi-part formats, and howdeep data is handled.

The text assumes that the reader is familiar with OpenEXR terms such as“channel”, “attribute”, “data window” or “chunk”. For an explanation ofthose terms seeTechnical Introduction to OpenEXR.

Note: This document does not define the OpenEXR file format. OpenEXR isdefined as the file format that is read and written by the OpenEXR open-sourceC++ library. If this document and the OpenEXR library disagree, then the librarytakes precedence.

Backwards Compatibility and New or Changed Functionality

OpenEXR Backwards Compatibility (1.7 and 2.0)

OpenEXR 1.7 and earlier format files are fully supported by OpenEXR 2.0.You can still use the 1.7 file format with the 2.0 library. If you usethe 2.0 format for single-part scan line image and tile image data, yourdata will be stored in the same way as the 1.7 files. You can recompileyour 1.7 files to take advantage of the new format EXRs (multiple-partfiles, and/or deep scan line and deep tile data).

New Features for OpenEXR 2.0: Multi-Part and Deep Data

The multi-part format is an extension of the OpenEXR 1.7 single-partfile format. In addition to supporting the OpenEXR 1.7 data storage (asingle scan line or tiled image), OpenEXR 2.0 files can be used to storemultiple views and/or deep data (deep scan line or deep tiles).

While you can continue to use the 1.7 format for files, these changes tothe file layout are required to support the new multi-part and deep datafeatures:

Feature

Description

See

Version field

Bits 11 and 12 indicate whether the file contains deep data(bit 11), or more than one part (bit 12).

Deep Data

Header

To store more than one part in the file, you need to have aheader for each part.

Structure

Header attributes

There are a number of attributes which have been defined tostore data which is relevant to deep data and multi-partfiles. These include: name (one for each part), data type (youcan have different types of data in different views), and themaximum number of samples to take in a deep data channel.

Multi-Part and Deep Data Header Attributes

Offset tables and chunks

To store more than one part in the file, you need to have anoffset table for each part, and chunks for each part.

The chunks must begin with a part number.

Component Four: Offset Tables andChunk Layout.

Deep Data

Deep data has a unique storage format.

Deep Data.

Basic Data Types

An OpenEXR file is a sequence of 8-bit bytes. Groups of bytes representbasic objects such as integral numbers, floating-point numbers and text.Those objects are grouped together to form compound objects such asattributes or scan lines.

Integers

Binary integral numbers with 8, 16, 32 or 64 bits are stored as 1, 2, 4or 8 bytes. Integral numbers can be signed or unsigned. Signed numbersare represented using two’s complement. Integral numbers arelittle-endian (that is, the least significant byte is closest to thestart of the file).

OpenEXR uses the following six integer data types:

name

signed

size in bytes

unsignedchar

no

1

short

yes

2

unsignedshort

no

2

int

yes

4

unsignedint

no

4

unsignedlong

no

8

Floating-Point Numbers

Binary floating-point numbers with 16, 32 or 64 bits are stored as 2, 4or 8 bytes. The representation of 32-bit and 64-bit floating-pointnumbers conforms to the IEEE 754 standard. The representation of 16-bitfloating-point numbers is analogous to IEEE 754, but with 5 exponentbits and 10 bits for the fraction. The exponent bias is 15.Floating-point numbers are little-endian (that is: the least significantbits of the fraction are in the byte closest to the beginning of thefile, while the sign bit and the most significant bits of the exponentare in the byte closest to the end of the file).

The following table lists the names and sizes of OpenEXR’sfloating-point data types:

name

size in bytes

half

2

float

4

double

8

Text

Text strings are represented as sequences of 1-byte characters of typechar. Depending on the context, either the end of a string isindicated by a null character (0x00), or the length of the string isindicated by anint that precedes the string.

Packing

Data in an OpenEXR file are densely packed; the file contains no“padding”. For example, consider the following C struct:

structSI{shorts;inti;};

On most computers, the in-memory representation of anSI objectoccupies 8 bytes: 2 bytes fors, 2 padding bytes to ensure four-bytealignment ofi, and 4 bytes fori. In an OpenEXR file the sameobject would consume only 6 bytes: 2 bytes fors and 4 bytes fori.The 2 padding bytes are not stored in the file.

File Layout

High-Level Layout

Depending on whether the pixels in an OpenEXR file are stored as scanlines or as tiles, the file consists of the following components:

Component

single-part file with…

multi-part file:

scan-lines:

tiles:

one

magicnumber

magicnumber

magicnumber

two

versionfield

versionfield

versionfield

three

header

header

  • part0header

  • [part1header]

  • ...

  • [<emptyheader>]

four

lineoffsettable

lineoffsettable

  • part0chunkoffsettable

  • [part0chunkoffsettable]

  • ...

five

scanlineblocks

tiles

chunks

It is the version field part which indicates whether the file is singleor multi-part and whether the file contains deep data. “Chunk” is ageneral term to describe blocks of pixel data. A chunk can be a scanline block, a tile or deep data (scan line or tile).

Deep data has no unique component structure of its own, but uses thestructure that the file would have if it did not have deep data in it.

Comparison between Single-Part and Multi-Part File Layouts

Multi-part files have the same high level structure as single-partOpenEXR files, except the header, offset table and chunk components canhave any number (two or more) parts. There must be the same number ofheaders as offset tables, and they must be in the same order. Inaddition, the header component of a multi-part file must end with a nullbyte (0x00). In multi-part files, each chunk contains a field thatindicates which part’s data it contains.

Components One and Two: Magic Number and Version Field

Magic Number

The magic number, of typeint, is always 20000630 (decimal). It allowsfile readers to distinguish OpenEXR files from other files, since thefirst four bytes of an OpenEXR file are always 0x76, 0x2f, 0x31 and0x01.

Version Field

The version field, of typeint, is the four-byte group following themagic number, and it is treated as two separate bit fields.

Byte/bit position

Description and notes

first byte(bits 0 through 7)

The 8 least significant bits, theycontain the file format version number.

The current OpenEXR version number is version 2.

second, third andfourth bytes (bits8 through 31)

The 24 most significant bits, these are treated as a set of boolean flags.

Bit 9 (the single tile bit)bit mask: 0x200

Indicates that this is a single-partfile which is in tiled format.

If bit 9 is 1:* this is a regular single-part image and thepixels are stored as tiles, and* bits 11 and 12 must be 0.

If bit 9 is 0, and bits 11 and 12 are also 0:the data is stored as regular single-part scanline file.

This bit is for backwards compatibility witholder libraries: it is only set when there isone “normal” tiled image in the file.

Bit 10 (the long name bit)bit mask: 0x400

Indicates whether the file contains“long names”.

If bit 10 is 1, the maximum length is 255 bytes.

If bit 10 is 0, the maximum length of attributenames, attribute type names and channel namesis 31 bytes.

Bit 11 (the non-image bit)bit mask: 0x800

Indicates whether the file containsany “non-image parts” (deep data).

If bit 11 is 1, there is at least onepart which is not a regular scan lineimage or regular tiled image (that is, itis a deep format).

If bit 11 is 0, all parts are entirelysingle or multiple scan line or tiled images.

New in 2.0.

Bit 12 (the multipart bit)bit mask: 0x1000

Indicates the file is amulti-part file.

If bit 12 is 1:* the file does not contain exactly 1part and the ‘end of header’ bytemust be included at the end of eachheader part, and* the part number fields must be addedto the chunks.

If bit 12 is 0, this is not a multi-partfile and the ‘end of header’ byte andpart number fields in chunks mustbe omitted.

New in 2.0.

The remaining 19 flags in the version field are currently unused and should be set to 0.

Version field, valid values

All valid combinations of the version field bits are as follows:

Description

Compatible with

bit 9

bit 11

bit 12

Single-part scan line.One normal scan line image.

All versions of OpenEXR.

0

0

0

Single-part tile.

All versions of OpenEXR.One normal tiled image.

1

0

0

Multi-part (new in 2.0).Multiple normal images (scan line and/or tiled).

OpenEXR 2.0.

0

0

1

Single-part deep data (new in 2.0).One deep tile or deep scan line part.

OpenEXR 2.0.

0

1

0

Multi-part deep data (new in 2.0).Multiple parts (any combination of: tiles, scan lines,deep tiles and/or deep scan lines).

OpenEXR 2.0.

0

1

1

Note: The version field bits define what capabilities must beavailable in the software so it can handle the file, rather than theexact format of the file. While the 9 and 11 bit settings must agreewith the type attributes of all parts, in OpenEXR 2.0 the data format ofeach type is definitively set by the type attribute in that part’sheader alone.

Component Three: Header

Structure

Single-part file

The header component of the single-part file holds a single header (forsingle-part files).

Each header is a sequence of attributes ended by a null byte.

The file has the same structure as a 1.7 file. That is, the multi-partbit (bit 12) must be 0, and the single null byte that signals the end ofthe headers must be omitted. This structure also applies to single-partdeep data files.

Multi-part file (new in 2.0)

The header component of a multi-part file holds a set of headers, with aseparate header for each part (in multi-part files) and a null bytesignalling the end of the header component:

part0header

[part1header]

...

[<emptyheader>]

Each header is a sequence of attributes ended by a null byte.

The multipart bit (bit 12) must be set to 1, and the list of headersmust be followed by a single null byte (0x00) (that is, an emptyheader).

Attribute Layout

The layout of an attribute is as follows:

attribute type

attribute size

attribute value

Theattributename and theattributetype are null-terminatedtext strings. Excluding the null byte, the name and type must each be asleast 1 byte and at most :

  • 31 bytes long (if bit 10 is set to 0), or

  • 255 bytes long (if bit 10 is set to 1).

Both single-part and multi-part files use the same attribute types.

Theattributesize, of typeint, indicates the size (in bytes) ofthe attribute value.

The layout of theattributevalue depends on the attributetype. The OpenEXR library predefines several different attributetypes. Application programs can define and store additional attributetypes.

Header Attributes (All Files)

The header of every OpenEXR file must contain at least the followingattributes:

attribute name

attribute type

channels

chlist

compression

compression

dataWindow

box2i

displayWindow

box2i

lineOrder

lineOrder

pixelAspectRatio

float

screenWindowCenter

v2f

screenWindowWidth

float

For descriptions of what these attributes are for, seeTechnical Introduction to OpenEXR.

Tile Header Attribute

This attributes is required in the header for all files which containone or more tiles:

attribute name

attribute type

notes

tiles

tiledesc

Determines the size of the tiles and the number of resolution levelsin the file.

Note: The OpenEXR library ignores tile description attributes inscan line based files. The decision whether the file contains scanlines or tiles is based on the value of bit 9 in the file’s versionfield, not on the presence of a tile description attribute.

Multi-View Header Attribute

This attribute can be used in the header for multi-part files:

attribute name

attribute type

notes

view

text

Multi-Part and Deep Data Header Attributes

These attributes are required in the header for all multi-part and/ordeep data OpenEXR files.

attribute name

attribute type

notes

name

string

Required if either the multipart bit (12) or the non-image bit (11) is set.

type

string

Required if either the multipart bit (12) or the non-image bit (11) is set.Set to one of:

  • scanlineimage

  • tiledimage

  • deepscanline, or

  • deeptile

Note: This value must agree with the version field’s tile bit (9) andnon-image (deep data) bit (11) settings.

version

int

This document describes version 1 data for all part types.version is required for deep data (deepscanline and deeptile) parts. Ifnot specified for other parts, assume version=1.

chunkCount

int

Required if either the multipart bit (12) or the non-image bit (11) is set.

tiles

tileDesc

Required for parts of typetiledimage anddeeptile.

Deep Data Header Attributes

These attributes are required in the header for all files which containdeep data (deepscanline or deeptile):

attribute name

attribute type

notes

tiles

tileDesc

Required for parts of type tiledimage and deeptile.

maxSamplesPerPixel

int

Required for deep data (deepscanline and deeptile) parts.Note: Since the value ofmaxSamplesPerPixel maybe be unknown atthe time of opening the file, the value “-1” is written to the fileto indicate an unknown value. When the file is closed, this will beoverwritten with the correct value. If file writing does not completecorrectly due to an error, the value-1 will remain. In this case, thevalue must be derived by decoding each chunk in the part.

version

int

Should be set to1. It will be changed if the format is updated.

type

string

Must be set todeepscanline ordeeptile.

For information about channel layout and a list of reserved channelnames, seeChannel Names inTechnical Introduction to OpenEXR.

Component Four: Offset Tables

Offset Tables

An offset table allows random access to pixel data chunks. An offsettable is a sequence of offsets, with one offset per chunk. Each offset(of typeunsignedlong) indicates the distance, in bytes, between thestart of the file and the start of the chunk.

Chunks can be of any of the four data types.

Offset Table Size

The number of entries in an offset table is defined in one of two ways:

  1. If the multipart (12) bit is unset and the chunkCount is not present,the number of entries in the chunk table is computed using thedataWindow and tileDesc attributes and the compression format.

  2. If the multipart (12) bit is set, the header must contain achunkCount attribute (which indicates the size of the table and thenumber of chunks).

Scan Lines

For scan line blocks, the line offset table is a sequence of scan lineoffsets, with one offset per scan line block. In the table, scan lineoffsets are ordered according to increasing scan line y coordinates.

Tiles

For tiles, the offset table is a sequence of tile offsets, one offsetper tile. In the table, scan line offsets are sorted the same way astiles inINCREASING_Y order.

Multi-Part

For multi-part files, each part defined in the header component has acorresponding chunk offset table.

Component Five: Pixel data

Chunk Layout

A “chunk” is a general term for a pixel data block. The scan line andtile images have the same format that they did in OpenEXR 1.7. OpenEXR2.0 introduces two new types (deep scan line and deep tile).

The layout of each chunk is as follows:

[partnumber] (if multi-part bit is set)

chunkdata

Thepartnumber (of typeunsignedlong) is only present inmulti-part files. It indicates which part this chunk belongs to. 0indicates the chunk belongs to the part defined by the first header andthe first chunk offset table. The part number is omitted if themulti-part bit (12) is not set (this saves space and enforces backwardscompatibility to software which does not support multi-part files).

Thechunkdata is dependent on the type attribute - but (other thanthe part number) has the same structure as a single-part file of thesame format:

part type

type attribute

notes

scan line

indicated by a type attribute of “scanlineimage”

Each chunk stores a scan line block, with the minimum y coordinate of thescan line(s) within the chunk.SeeRegular scan line image block layout.

tiled

indicated by a type attribute of “tiledimage”

SeeRegular image tile layout.

deep scan line

indicated by a type attribute of “deepscanline”

SeeDeep scan line layout.

deep tile

indicated by a type attribute of “deeptile”

SeeDeep tiled layout.

Regular Scan Line Blocks

For scan line images and deep scan line images, one or more scan linesmay be stored together as a scan line block. The number of scan linesper block depends on how the pixel data are compressed:

NO_COMPRESSION

1

RLE_COMPRESSION

1

ZIPS_COMPRESSION

1

ZIP_COMPRESSION

16

PIZ_COMPRESSION

32

PXR24_COMPRESSION

16

B44_COMPRESSION

32

B44A_COMPRESSION

32

DWAA_COMPRESSION

32

DWAB_COMPRESSION

256

HTJ2K256_COMPRESSION

256

HTJ2K32_COMPRESSION

32

Each scan line block has a y coordinate of typeint. The block’s ycoordinate is equal to the pixel space y coordinate of the top scan linein the block. The top scan line block in the image is aligned with thetop edge of the data window (that is, the y coordinate of the top scanline block is equal to the data window’s minimum y).

If the height of the image’s data window is not a multiple of the numberof scan lines per block, then the block that contains the bottom scanline contains fewer scan lines than the other blocks.

Regular scan line image block layout

The layout of a regular image scan line block is as follows:

y coordinate

pixel data size

pixel data

Thepixeldatasize, of typeint, indicates the number of bytesoccupied by the actual pixel data.

Within thepixeldata, scan lines are stored top to bottom. Eachscan line is contiguous, and within a scan line the data for eachchannel are contiguous. Channels are stored in alphabetical order,according to channel names. Within a channel, pixels are stored left toright.

Compressed data

If the file’s compression method isNO_COMPRESSION, then the original,uncompressed pixel data are stored directly in the file. Otherwise, theuncompressed pixels are fed to the appropriate compressor, and eitherthe compressed or the uncompressed data are stored in the file,whichever is smaller.

The layout of the compressed data depends on which compression methodwas applied. The compressed formats are not described here. Forinformation on the compressed data formats, see the source code for theOpenEXR library.

Regular ImageTiles

Regular image tile layout

The layout of a regular image tile is as follows:

tile coordinates

pixel data size

pixel data

Thetilecoordinates, a sequence of fourint’s (tileX,tileY,levelX,levelY) indicates the tile’s position and resolution level. Thepixeldatasize, of typeint, indicates the number of bytesoccupied by the pixel data.

Thepixeldata in a tile are laid out in the same way as in a scanline block, but the length of the scan lines is equal to the width ofthe tile, and the number of scan lines is equal to the height of thetile.

If the width of a resolution level is not a multiple of the file’s tilewidth, then the tiles at the right edge of that resolution level haveshorter scan lines. Similarly, if the height of a resolution level isnot a multiple of the file’s tile height, then tiles at the bottom edgeof the resolution level have fewer scan lines.

Deep Data

Deep images store an arbitrarily long list of data at each pixellocation (each pixel contains a list of samples, and each samplecontains a fixed number of channels).

Deep scan line layout

Deep scan line images are indicated by a type attribute of“deepscanline”. Each chunk of deep scan line data is a single scan lineof data. The data in each chunk is laid out as follows:

[part number] (if multipart bit is set)

y coordinate

packed size of pixel offset table

packed size of sample data

unpacked size of sample data

compressed pixel offset table

compressed sample data

Theunpackedsizeofthesampledata (anunsignedlong) is thesize of the deep sample data once it is unpacked. It is necessary tospecify the unpacked size since the data may be arbitrarily large (sogenerally cannot otherwise be determined without decompressing the datafirst).

Deep tiled layout

Tiled images are indicated by a type attribute of “deeptile”. Each chunkof deep tile data is a single tile. The data in each chunk is laid outas follows:

[part number] (if multipart bit is set)

tile coordinates

packed size of pixel offset table

packed size of sample data

unpacked size of sample data

compressed pixel offset table

compressed sample data

Theunpackedsizeofthesampledata (anunsignedlong) is thesize of the deep data once it is unpacked. It is necessary to specifythe unpacked size since the data may be arbitrarily large (so generallycannot otherwise be determined without decompressing the data first).

Thepixeloffsettable is a list ofint, one for each column withinthe dataWindow. Each entryn in the table indicates the total number ofsamples required to store the pixel inn as well as all pixels to the leftof it. Thus, the first samples stored in each channel of the pixel data are forthe pixel in column 0, which containstable[1] samples. Each channelcontainstable[width-1] samples in total.

Unpacked deep data chunks

When decompressed, the unpacked chunk consists of the channel datastored in a non-interleaved fashion:

pixel sample data for channel 0

pixel sample data for channel 1

pixel sample data for channel …

pixel sample data for channel n

Exception: ForZIP_COMPRESSION only there will be up to 16scanlines in the packed sample data block:

pixel sample data for channel 0 for scanline 0

pixel sample data for channel 1 for scanline 0

pixel sample data for channel … for scanline 0

pixel sample data for channel n for scanline 0

pixel sample data for channel 0 for scanline 1

pixel sample data for channel 1 for scanline 1

pixel sample data for channel … for scanline 1

pixel sample data for channel n for scanline 1

Deep data compression

The following compression schemes are the only ones permitted for deepdata:

NO_COMPRESSION

1

RLE_COMPRESSION

1

ZIPS_COMPRESSION

1

ZIP_COMPRESSION

16

Predefined Attribute Types

The OpenEXR library predefines the following attribute types:

type name

data

box2i

Fourint‘s:xMin,yMin,xMax,yMax

box2f

Fourfloat‘s:xMin,yMin,xMax,yMax

bytes

A sequence ofunsignedchar values. The bytes areaccompanied by an optional (but encouraged) type hint.(new in OpenEXR v3.4)

hintLength

unsignedint

typeHint | A sequence of chars of lengthhintLength.

The bytes payload follows and can be up to INT32_MAX bytes inlength.

chlist

A sequence of channels followed by a null byte (0x00).Channel layout:

name

zero-terminated string, from 1 to 255 byteslong

pixeltype

int, possible values are:

  • UINT = 0

  • HALF = 1

  • FLOAT = 2

pLinear

unsignedchar, possible values are 0 and 1

reserved

threechar, should be zero

xSampling

int

ySampling

int

chromaticities

Eightfloat:redX,redY,greenX,greenY,blueX,blueY,whiteX,whiteY

compression

unsignedchar, possible values are:

  • NO_COMPRESSION = 0

  • RLE_COMPRESSION = 1

  • ZIPS_COMPRESSION = 2

  • ZIP_COMPRESSION = 3

  • PIZ_COMPRESSION = 4

  • PXR24_COMPRESSION = 5

  • B44_COMPRESSION = 6

  • B44A_COMPRESSION = 7

  • DWAA_COMPRESSION = 8

  • DWAB_COMPRESSION = 9

  • HTJ2K256_COMPRESSION = 10

  • HTJ2K32_COMPRESSION = 11

double

double

envmap

unsignedchar, possible values are:

  • ENVMAP_LATLONG = 0

  • ENVMAP_CUBE = 1

float

float

int

int

keycode

Sevenint‘s:filmMfcCode,filmType,prefix,count,perfOffset,perfsPerFrame,perfsPerCount

lineOrder

unsignedchar, possible values are:

  • INCREASING_Y = 0

  • DECREASING_Y = 1

  • RANDOM_Y = 2

m33f

9float‘s

m44f

16float‘s

preview

Twounsignedint‘s, width and height, followed by4×width×heightunsignedchar‘s of pixel data.Scan lines are stored top to bottom; within a scan linepixels are stored from left to right. A pixel consists offourunsignedchar‘s,R,G,B,A.

rational

Anint, followed by anunsignedint.

string

String length, of typeint, followed by a sequence ofchar‘s.

stringvector

A sequence of zero or more text strings. Each string isrepresented as a string length, of typeint, followed by asequence ofchars. The number of strings can be inferredfrom the total attribute size(see theAttribute Layout section).

tiledesc

Twounsignedint‘s:xSize,ySize, followedbymode, of typeunsignedchar, where

mode = levelMode + roundingMode×16

Possible values forlevelMode:

  • ONE_LEVEL = 0

  • MIPMAP_LEVELS = 1

  • RIPMAP_LEVELS = 2

Possible values forroundingMode:

  • ROUND_DOWN = 0

  • ROUND_UP = 1

timecode

Twounsignedint‘s:timeAndFlags,userData.

v2i

Twoint‘s

v2f

Twofloat‘s

v3i

Threeint‘s.

v3f

Threefloat‘s.

Sample File

The following is an annotated byte-by-byte listing of a complete OpenEXRfile. The file contains a scan-line based image with four by threepixels. The image has two channels: G, of typeHALF, and Z, of typeFLOAT. The pixel data are not compressed. The entire file is 415 byteslong.

The first column of the table below lists all the bytes of the file in hexadecimalnotation. The second column of the table shows how the bytes are grouped intointegers, floating-point numbers and text strings. The third column of the tableindicate how those basic objects form compound objects such as attributesor the line offset table.

Download thesample.exr.

byte

value

description

76

20000630

magicnumber

2f

31

01

02

2

version,flags

00

00

00

Start of header

63

c

attributename:channels

68

h

61

a

6e

n

6e

n

65

e

6c

l

73

s

00

\0

63

c

attributetype:chlist

68

h

6c

l

69

i

73

s

74

t

00

\0

25

37

attributesize

00

00

00

47

G

\0

G channelstruct values

00

01

type: HALF

00

00

00

00

pLinear:0

00

0

00

00

01

xSampling: 1

00

00

00

01

ySampling: 1

00

00

00

5a

Z

\0

Z channelstruct values

00

02

type: FLOAT

00

00

00

00

pLinear: 0

00

0

00

00

01

xSampling: 1

00

00

00

01

ySampling: 1

00

00

00

00

\0

63

c

attributename:compression

6f

o

6d

m

70

p

72

r

65

e

73

s

73

s

69

i

6f

o

6e

n

00

\0

63

c

attributetype:compression

6f

o

6d

m

70

p

72

r

65

e

73

s

73

s

69

i

6f

o

6e

n

00

\0

01

1

attributesize

00

00

00

00

None

attributevalue

64

d

attributename:dataWindow

61

a

74

t

61

a

57

W

69

i

6e

n

64

d

6f

o

77

w

00

\0

62

b

attributetype:box2i

6f

o

78

x

32

2

69

i

00

\0

10

16

attributesize

00

00

00

00

0(box.min.x)

00

00

00

00

0(box.min.y)

00

00

00

03

3(box.max.x)

00

00

00

02

2(box.max.y)

00

00

00

64

d

attributename:displayWindow

69

i

73

s

70

p

6c

l

61

a

79

y

57

W

69

i

6e

n

64

d

6f

o

77

w

00

\0

62

b

attributetype:box2i

6f

o

78

x

32

2

69

i

00

\0

10

16

attributesize

00

00

00

00

0(box.min.x)

00

00

00

00

0(box.min.y)

00

00

00

03

3(box.max.x)

00

00

00

02

2(box.max.y)

00

00

00

6c

l

attributename:lineOrder

69

i

6e

n

65

e

4f

O

72

r

64

d

65

e

72

r

00

\0

6c

l

attributetype:lineOrder

69

i

6e

n

65

e

4f

O

72

r

64

d

65

e

72

r

00

\0

01

1

attributesize

00

00

00

00

0

INCY value

70

p

attributename:pixelAspectRatio

69

i

78

x

65

e

6c

l

41

A

73

s

70

p

65

e

63

c

74

t

52

R

61

a

74

t

69

i

6f

o

00

\0

66

f

attributetype:float

6c

l

6f

o

61

a

74

t

00

\0

04

4

attributesize

00

00

00

00

1.0

attributevalue

00

80

3f

73

s

attributename:screenWindowCenter

63

c

72

r

65

e

65

e

6e

n

57

W

69

i

6e

n

64

d

6f

o

77

w

43

C

65

e

6e

n

74

t

65

e

72

r

00

\0

76

v

attributetype:v2f

32

2

66

f

00

\0

08

8

attributesize

00

00

00

00

0.0

attributevalue:v2f(0.0, 0.0)

00

00

00

00

0.0

00

00

00

73

s

attributename:screenWindowWidth

63

c

72

r

65

e

65

e

6e

n

57

W

69

i

6e

n

64

d

6f

o

77

w

57

W

69

i

64

d

74

t

68

h

00

\0

66

f

attributetype:float

6c

l

6f

o

61

a

74

t

00

\0

04

4

size

00

00

00

00

1.0

attributevalue

00

80

3f

00

\0 - end of header

End of header

Start of scan line offset table

3f

319

offset ofscan line 0

01

00

00

00

00

00

00

5f

351

offset ofscan line 1

01

00

00

00

00

00

00

7f

383

offset ofscan line 2

01

00

00

00

00

00

00

End of scan line offset table

00

0

y scan line 0

00

00

00

18

24

pixel datasize

00

00

00

00

0.000

pixel datafor Gchannel

00

54

0.042

29

d5

0.365

35

e8

0.092

2d

5c

0.000985395

pixel datafor Zchannel

28

81

3a

cf

0.176643

e1

34

3e

8b

0.0913306

0b

bb

3d

89

0.487217

74

f9

3e

01

1

y scan line 1

00

00

00

18

24

pixel datasize

00

00

00

37

0.527

pixel datafor Gchannel

38

76

0.233

33

74

0.932

3b

73

0.556

38

7f

0.454433

pixel datafor Zchannel

ab

e8

3e

8a

0.831292

cf

54

3f

5b

0.56806

6c

11

3f

20

0.0508319

35

50

3d

02

2

y scan line 2

00

00

00

18

24

pixel datasize

00

00

00

23

0.767

pixel datafor Gchannel

3a

0a

0.252

34

02

0.876

3b

5d

0.920

3b

38

0.0189148

pixel datafor Zchannel

f3

9a

3c

4d

0.298197

ad

98

3e

1c

0.531557

14

08

3f

4c

0.515431

f3

03

3f

End of file