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.