XWD

Also Known As: X Window Dump


Type Bitmap
Colors Unlimited
Compression Uncompressed
Maximum Image Size 64Kx64K
Multiple Images Per File No
Numerical Format Big- and little-endian
Originator X Consortium
Platform UNIX X Windows
Supporting Applications Many
See Also None

Usage
XWD is used to store images of captured X window displays.

Comments
Many image-processing and display applications and toolkits read and write XWD format image files.

Vendor specifications are available for this format.

Code fragments are available for this format.

Sample images are available for this format.


The XWD (X Window Dump) format is used specifically to store screen dumps created by the X Window System. Under X11, screen dumps are created by the xwd client. Using xwd, the window or background is selected to dump and an XWD file is produced containing an image of the window. If you issue the following command:

% xwd -root > output.xwd

the entire contents of the current display are saved to the file output.xwd. The id of the window to dump may also be specified by using the -id command-line flag on versions of xwd prior to Release 5.

Contents:
File Organization
For Further Information

File Organization

The first version of the X Window System to support window dumps was X10. Only gray-scale and color-mapped dumps were supported, and the bitmapped data was never compressed. The X10 version of XWD contains the following header:

typedef struct _X10WindowDump
{
  LONG  HeaderSize;         /* Header size in bytes */
  LONG  FileVersion;        /* X10 XWD file version (always 06h) */
  LONG  DisplayType;        /* Display type */
  LONG  DisplayPlanes;      /* Number of display planes */
  LONG  PixmapFormat;       /* Pixmap format */
  LONG  PixmapWidth;        /* Pixmap width */
  LONG  PixmapHeight;       /* Pixmap height */
  SHORT WindowWidth;        /* Window width */
  SHORT WindowHeight;       /* Window height */
  SHORT WindowX;            /* Window upper left X coordinate */
  SHORT WindowY;            /* Window upper left Y coordinate */
  SHORT WindowBorderWidth;  /* Window border width */
  SHORT WindowNumColors;    /* Number of color entries in window */
} X10WINDOWDUMP;

HeaderSize is the size of the header in bytes. This value is always 40.

FileVersion contains the version number of the XWD file. This value is always 06h.

DisplayType is the type of the display from which the image was dumped.

DisplayPlanes is the number of color planes in the image data. This value is typically 01h or 03h.

PixmapFormat indicates the format of the bitmap. A value of 00h indicates a single-plane bitmap (XYFormat), and a value of 01h indicates a bitmap with two or more planes (ZFormat).

PixmapWidth and PixmapHeight represent the size of the image in pixels.

WindowWidth and WindowHeight represent the size of the window to display.

WindowX and WindowY represent the position of the window on the display.

WindowBorderWidth indicates the width of the window border in pixels.

WindowNumColors specifies the number of colors that can be displayed in the window.

If the image is a PseudoColor image, a color map immediately follows the header. The color map contains one entry per color in the image, and each entry has the following format:

typedef struct _X10ColorMap
{
  WORD EntryNumber;     /* Number of the color-map entry */
  WORD Red;             /* Red-channel value */
  WORD Green;           /* Green-channel value */
  WORD Blue;            /* Blue-channel value */
} X10COLORMAP[WindowNumColors];

EntryNumber is the number of the color-map entry. This value starts at 00h. Color maps typically do not exceed 256 entries in size.

Red, Green, and Blue are the RGB channel values for this entry. The range of each of these values is typically 0 to 65535; often, only the high byte of the value is set (i.e., the value is 0-255 shifted left eight bits.)

The XWD format was revised for Version 11 of the X Window System. The new format can store more types of image data and many fields have been added to the header and to the color map, reflecting the increased graphics capabilities of X11 over X10.

The Version 11 XWD file format contains the following header:

typedef struct _X11WindowDump
{
  DWORD HeaderSize;     /* Size of the header in bytes */
  DWORD FileVersion;    /* X11WD file version (always 07h) */
  DWORD PixmapFormat;   /* Pixmap format */
  DWORD PixmapDepth;    /* Pixmap depth in pixels */
  DWORD PixmapWidth;    /* Pixmap width in pixels */ /
  DWORD PixmapHeight;   /* Pixmap height in pixels */
  DWORD XOffset;        /* Bitmap X offset */
  DWORD ByteOrder;      /* Byte order of image data */
  DWORD BitmapUnit;     /* Bitmap base data size */
  DWORD BitmapBitOrder; /* Bit-order of image data */
  DWORD BitmapPad;      /* Bitmap scan-line pad*/
  DWORD BitsPerPixel;   /* Bits per pixel */
  DWORD BytesPerLine;   /* Bytes per scan-line */
  DWORD VisualClass;    /* Class of the image */
  DWORD RedMask;        /* Red mask */
  DWORD GreenMask;      /* Green mask */
  DWORD BlueMask;       /* Blue mask */
  DWORD BitsPerRgb;     /* Size of each color mask in bits */
  DWORD NumberOfColors;         /* Number of colors in image */
  DWORD ColorMapEntries;        /* Number of entries in color map */
  DWORD WindowWidth;    /* Window width */
  DWORD WindowHeight;   /* Window height */
  LONG  WindowX;        /* Window upper left X coordinate */
  LONG  WindowY;        /* Window upper left Y coordinate */
  DWORD WindowBorderWidth;      /* Window border width */
} X11WINDOWDUMP;

HeaderSize is the size of the header in bytes. This value is always 40.

FileVersion contains the version number of the XWD file. This value is always 07h.

PixmapFormat is the format of the image data. A value of 00h indicates a 1-bit (XYBitmap) format. A value of 01h indicates a single-plane bitmap (XYPixmap). A value of 02h indicates a bitmap with two or more planes (ZPixmap).

PixmapDepth is the depth of the bitmap in pixels. This value is 1 to 32.

PixmapWidth and PixmapHeight represent the size of the image in pixels.

XOffset specifies the number of pixels to ignore at the beginning of each scan-line.

ByteOrder indicates the byte order of the image data. Values for this field are 00h for least significant byte first, and 0 for most significant byte first.

BitmapUnit is the size of each data unit in each scan line. This value may be 8, 16, or 32.

BitmapBitOrder indicates the order of the bits within each byte of image data. Values for this field are 00h for least significant byte first, and 0 for most significant byte first.

BitmapPad is the number of bits of padding added to each scan line. This value may be 8, 16, or 32.

BitsPerPixel contains the size of each pixel in bits. For StaticGray and GrayScale images, this value is 1. For StaticColor and PseudoColor images, this value is 2 to 15 (typically 8). For TrueColor and DirectColor images, this value is 16, 24, or 32.

BytesPerLine is the size of each scan line in bytes.

VisualClass indicates the format of the image data:

RedMask, GreenMask, and BlueMask are the RGB mask values used by ZPixmaps.

BitsPerRgb is the size of each RedMask, GreenMask, and BlueMask in bits.

NumberOfColors specifies the number of colors in the image. This value also indicates the number of colors for colormapped images as well.

ColorMapEntries contains the number of entries in the color map. This value is 00h if there is no color map.

WindowWidth and WindowHeight are the size of the window to display.

WindowX and WindowY contain the position of the window on the display.

WindowBorderWidth is the width of the X Window border in pixels. If the border has not been captured in the dump, this value is 00h.

The color map immediately follows the header. Each entry in the color map is 12 bytes in size and has the following format:

typedef struct _X11ColorMap
{
  DWORD EntryNumber;    /* Number of the color map entry */
  WORD  Red;            /* Red-channel value */
  WORD  Green;          /* Green-channel value */
  WORD  Blue;           /* Blue-channel value */
  CHAR  Flags;          /* Flag for this entry */
  CHAR  Padding;        /* WORD-align padding */
} X11COLORMAP[ColorMapEntries];

EntryNumber is the number of the color map entry. This value starts at 00h. Color maps typically do not exceed 256 entries in size.

Red, Green, and Blue are the RGB channel values for this entry. The range of each of these values is typically 0 to 65535; often, only the high byte of the value is set (i.e., the value is 0-255 shifted left eight bits.)

Flags indicates which of the color channels in the color map are actually used. The value of this field is typically 07h, indicating that all three channels are used.

Padding is a byte set to a value of 00h and used to pad the color map entry out to an even WORD boundary in size.

For Further Information

For further information about the XWD format, see the documentation included on the CD-ROM.

The XWD format is part of the X Window System created by the X Consortium. Information about the XWD format, and, indeed, all of the file formats associated with the X Window System, is scattered over a wide variety of header files (in /usr/include/X11) and UNIX manual pages.

The central FTP distribution site for X11 is:

ftp://ftp.x.org/

Many image-processing and display applications and toolkits included on the CD-ROM (e.g., FBM, ImageMagick, pbmplus, xli, xloadimage, and xvread) and write XWD-format image files, and documentation for those tools may contain additional information about XWD.



Copyright © 1996, 1994 O'Reilly & Associates, Inc. All Rights Reserved.