diff options
Diffstat (limited to 'converter/ppm/xim.h')
-rw-r--r-- | converter/ppm/xim.h | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/converter/ppm/xim.h b/converter/ppm/xim.h new file mode 100644 index 00000000..ffe60fb6 --- /dev/null +++ b/converter/ppm/xim.h @@ -0,0 +1,125 @@ +#ifndef XIM_H_INCLUDED +#define XIM_H_INCLUDED + +/* xim.h - header file for Xim files +** +** Taken from the X.V11R4 version of XimHeader.h: +** +** Author: Philip R. Thompson +** Address: phils@athena.mit.edu, 9-526 +** Note: size of header should be 1024 (1K) bytes. +** $Header: /mit/phils/X/RCS/XimHeader.h,v 1.7 89/11/09 17:26:54 phils Exp Locker: phils $ +** $Date: 89/11/09 17:26:54 $ +** $Source: /mit/phils/X/RCS/XimHeader.h,v $ +*/ + +#define IMAGE_VERSION 3 +#ifndef _BYTE +typedef unsigned char byte; +#define _BYTE 1 +#endif + +/* External ascii file format. */ +typedef struct ImageHeader { + char file_version[8]; /* header version */ + char header_size[8]; /* Size of file header in bytes */ + char image_width[8]; /* Width of the raster image */ + char image_height[8]; /* Height of the raster imgage */ + char num_colors[8]; /* Actual number of entries in c_map */ + char num_channels[3]; /* 0 or 1 = pixmap, 3 = RG&B buffers */ + char bytes_per_line[5]; /* bytes per scanline */ + char num_pictures[4]; /* Number of pictures in file */ + char bits_per_channel[4]; /* usually 1 or 8 */ + char alpha_channel[4]; /* Alpha channel flag */ + char runlength[4]; /* Runlength encoded flag */ + char author[48]; /* Name of who made it */ + char date[32]; /* Date and time image was made */ + char program[16]; /* Program that created this file */ + char comment[96]; /* other viewing info. for this image */ + unsigned char c_map[256][3]; /* RGB values of the pixmap indices */ +} ImageHeader, XimAsciiHeader; + + +/* Internal binary format. */ +typedef struct Color { + byte pixel, red, grn, blu; +} Color; + +typedef struct XimImage { + int width; /* width of the image in pixels */ + int height; /* height of the image in pixels */ + unsigned datasize; /* size of one channel of data */ + short nchannels; /* number data channels in image */ + short bits_channel; /* usually 1 or 8 */ + short bytes_per_line; /* bytes to hold one scanline */ + byte* data; /* pixmap or red channel data */ + byte* grn_data; /* green channel data */ + byte* blu_data; /* blue channel data */ + byte* other; /* other (alpha) data */ + unsigned alpha_flag :1; /* alpha channel flag */ + unsigned packed_flag:1; /* data packed in one chunk of memory */ + unsigned runlen_flag:1; /* runlength encoded data flag */ + unsigned : 0; /* future flags, word alignment */ + short tpics, npics; /* number of images, total & left in file */ + short ncolors; /* " " colors in the color table */ + Color* colors; /* colortable, one byte per r/g/b & pixel */ + char* author; /* author credit, copyright, etc */ + char* date; /* date image was made, grabbed, etc. */ + char* program; /* program used to make this */ + short ncomments; /* number of comments strings */ + char** comments; /* pointers to null terminated strings */ + char* offset; /* original offset in machine memory */ + float chroma_red[2]; /* x, y image chromacity coords */ + float chroma_grn[2]; + float chroma_blu[2]; + float chroma_wht[2]; + float gamma; /* image storage gamma */ +} XimImage; + +/* Future external ascii variable length header - under review. */ +#if (IMAGE_VERSION == 4) +typedef struct XimAsciiHeader { + char file_version[4]; /* header version */ + char header_size[8]; /* Size of file header (fixed part only) */ + char image_height[8]; /* Height of the raster imgage in pixels */ + char image_width[8]; /* Width of the raster image in pixels */ + char bytes_line[8]; /* Actual # of bytes separating scanlines */ + char bits_channel[4]; /* Bits per channel (usually 1 or 8) */ + char num_channels[4]; /* 1 = pixmap, 3 = RG&B buffers */ + char alpha_channel[2]; /* Alpha channel flag */ + char num_colors[4]; /* Number of entries in c_map (if any) */ + char num_pictures[4]; /* Number of images in file */ + char runlength_flag[2]; /* Runlength encoded flag */ + char future_flags[8]; + char author[48]; /* Name of who made it, from passwd entry */ + char date[32]; /* Unix format date */ + char program[32]; /* Program that created this */ + char gamma[12]; /* image storage gamma */ + char chroma_red[24]; /* image red primary chromaticity coords. */ + char chroma_grn[24]; /* " green " " " */ + char chroma_blu[24]; /* " blue " " " */ + char chroma_wht[24]; /* " white point " " */ + char comment_length[8] /* Total length of comments */ + /* char* comment; Null separated comments */ + /* unsigned char c_map[]; RGB Colortable, (ncolors * 3 bytes) */ +} XimAsciiHeader; +#endif /*IMAGE_VERSION 4*/ + +#ifndef rnd +#define rnd(x) ((int)((float)(x) + 0.5)) /* round a float to an int */ +#endif + +/* Note: +* - All data is in char's in order to maintain easily portability +* across machines, and some human readibility. +* - Images may be stored as pixmaps (8 bits/pixel) or as seperate +* red, green, blue channel data (24+ bits/pixel). +* - An alpha channel is optional and is found after every num_channels +* of data. +* - Pixmaps or RGB (and alpha) channel data are stored respectively +* after the header. +* - If num_channels = 1, a pixmap is assumed and the colormap in the +* header is used. +* - Data size = image_width * image_height. +*/ +#endif |