kadie@m.cs.uiuc.edu (03/05/89)
Does anyone know how to decode the screen-dump bitmaps produced on an HP 9000/350 SRX? We would like to translate the HP bitmaps into a form a PC can use (PC Paint, Tiff, etc.). - Carl
glen@hpfcmr.HP.COM (Glen Robinson) (03/06/89)
The Starbase bitmap file format is documented in the Starbase
Reference manual under 'File Formats' as bitmapfile(4).
A copy of the file format man page entry follows.
------------------------------------------------------------------
BITMAPFILE(4) BITMAPFILE(4)
NAME
bitmapfile - Starbase bitmap file
HP-UX COMPATIBILITY
Level: HP-UX/STANDARD
Origin: HP
Remarks: This entry describes the format of bitmap files
created by the bitmap_to_file(3G) procedure.
Other programs may also create files in this
format.
DESCRIPTIPON
A bitmap file created by Starbase for bitmap archival or
printing has the following overall structure. The offsets
to bitmap data and user data areas are recorded in fields of
the header structure.
byte offset contents
0 header structure (see below)
256 color map (if present)
arbitrary * bitmap data
arbitrary ** user data (if present)
* depends upon size of the color map
** depends upon size of color map and bitmap data
HEADER
The 256 byte header block has the following structure:
struct bf_header
{
char file_id[16]; /* "Bitmapfile" */
int rev; /* revision of file format */
char device_id[16]; /* device or driver name
(e.g. hp300h) */
int bm_loc; /* offset in bytes to start of
bitmap information bytes
measured from the start
of the file */
int eod_loc; /* byte offset of last byte of
HP data in the file.
User data may be appended
after this point. */
int xstart,ystart; /* upper left corner of source
in pixels (This is pixel 0,0
in the file */
int xlen,ylen; /* x,y dimensions of bitmap
Hewlett-Packard Company - 1 - Jan 2, 1989
BITMAPFILE (4) BITMAPFILE(4)
in pixels */
int bm_mode; /* format of bitmap data:
-1 -- pixel major full depth,
-2 -- plane major full depth,
>= 0 -- plane major, single plane
(source plane was this number.)
(plane 0 = least significant.) */
int depth; /* number of bits stored per pixel.
This indicates how many planes
were stored. */
int pixel_align; /* alignment of pixel data in the file.
Allowable values are 1 and 8.
1 means every bit is a pixel,
8 means every byte is a pixel. */
int num_banks; /* Number of banks. Only relevant
for pixel-major format. */
int disp_en; /* display enable mask of source */
int cmap_mode; /* color map mode:
0 = normal color mode.
1 = monotonic color mode.
4 = full color mode. */
int csize; /* Number of color map entries */
int back_index; /* Index value of background color
entry in the color map */
char hp_extend[100]; /* Reserved for HP extensions */
char user_extend[64]; /* Reserved for user extensions */
}
Color Map
The color map is stored as an array of float triples,
representing red, green, and blue levels in the range 0.0 to
1.0. The color map starts at byte offset 256; the number of
entries is indicated by the csize field in the header
structure. This array is defined as:
float cmap[csize][3];
Bitmap Data
Bitmap data may be stored either in pixel-major or plane-
major format. Single plane bitmaps are stored in plane-
major format.
Pixel-major format
Pixel-major means that bits from several planes, all
corresponding to one pixel, are stored in a single byte.
When there are more than eight planes, the data is written
in banks; all the data for the the least significant eight
planes are written as the first bank, followed by the data
Hewlett-Packard Company - 2 - Jan 2, 1989
BITMAPFILE(4) BITMAPFILE(4)
for the next eight planes as the second bank, and so on up
to the most significant planes in the last bank. Within a
bank, consecutive bytes correspond to consecutive pixels.
The last byte of the first row is followed immediately by
the first byte of the second row, etc. Pixels are ordered
first by x value from left (column 0) to right (column
xlen-1), and second by y value from top (row 0) to bottom
(row ylen-1). Banks are written without padding; the last
byte of a bank is followed immediately by the first byte of
the next bank. The storage required per bank in the file is
thus xlen * ylen bytes.
Plane-major format
Plane-major means that all the data from one plane, for all
pixels, are stored in adjacent positions in the file. This
means that the bits from a single plane are packed, eight
pixels per byte. Each pixel row begins on the next byte
boundary. Pixels are ordered as for pixel-major data.
Consequently, the most significant bit of the first byte
corresponds to the leftmost pixel of the first row, and the
least significant bit of the first byte corresponds to the
eighth pixel. The storage required per plane is ((xlen + 7)
div 8) * ylen bytes.
Planes are padded only to the next byte boundary; when
multiple planes are stored in a file, the last byte of each
plane is followed immediately by the first byte of the next
plane. Planes are stored in the file consecutively from
least significant to most significant.
SEE ALSO
HP-UX Reference, pcltrans(1), lp(1M).
Starbase Reference,bitmap_to_file(3G), file_to_bitmap(3G),
file_print(3G).
Starbase Graphics Techniques,"Storing and Printing Images".
Hewlett-Packard Company - 3 - Jan 2, 1989
-------------------------------------------------------------------
Hope this helps,
Glen R.