home *** CD-ROM | disk | FTP | other *** search
- Copyright 1990, 1991, 1992 (c) Khoral Research, Inc.
-
- All rights reserved.
-
- The viff.h file is a plain ascii C include file. It is a copy of the
- file in KHOROS_HOME/include/viff.h, but with a less restrictive
- copyright. The purpose of this file is allow others to build in
- interoperability to their software, without having to get a Khoros license to
- distribute their software. Redistribution of any other component of
- Khoros still needs a separate license that is available via the Khoros
- Consortium.
-
- For further information, contact:
-
- khoros-request@khoros.unm.edu
-
-
- /*
- * Khoros: $Id$
- */
-
- /*
- * $Log$
- */
-
- /*
- *----------------------------------------------------------------------
- *
- * Copyright 1990, University of New Mexico. All rights reserved.
- *
- * Permission to copy, modify, and use this include file is hereby
- * granted, provided that this notice is retained thereon and
- * on all copies. UNM makes no representations as too the sui-
- * tability and operability of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
- *
- * UNM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FIT-
- * NESS. IN NO EVENT SHALL UNM BE LIABLE FOR ANY SPECIAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY OTHER DAMAGES WHAT-
- * SOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
- * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PER-
- * FORMANCE OF THIS SOFTWARE.
- *
- *----------------------------------------------------------------------
- */
-
- #ifndef _viff_h_
- #define _viff_h_
-
- /* >>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
- >>>> <<<<
- >>>> file: viff.h <<<<
- >>>> <<<<
- >>>> contains: Khoros Visualization/Image File Format. <<<<
- >>>> Design considerations included the need <<<<
- >>>> for portability, expandability and simplicity. <<<<
- >>>> <<<<
- >>>> written by: John Rasure <<<<
- >>>> <<<<
- >>>> date: 5/5/88 <<<<
- >>>> <<<<
- >>>> modifications: Scott R. Wilson 1/13/88 <<<<
- >>>> Scott R. Wilson 5/3/88 - Version 2, Release 0<<<<
- >>>> Scott Wilson, John Rasure, Tom Sauer, and <<<<
- >>>> Mark Young: 2/18/89 - Version 3 Release 0 <<<<
- >>>> Scott Wilson - Version 3.1 <<<<
- >>>> Tom Sauer - 7/12/89 removed the #defines for <<<<
- >>>> location dimension <<<<
- >>>> Scott Wilson - Correct comment for <<<<
- >>>> subrow_size 5/9/90 <<<<
- >>>> Scott Wilson - Deleted unneeded include of <<<<
- >>>> vdefines.h 18-Jan-91 <<<<
- >>>> <<<<
- >>>> <<<<
- >>>>>>>>>>>>>>>>>>>>>>>>>>>>> <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
-
-
- /*
- ******************************************************************
- Khoros Visualization/Image File Format
-
- A Khoros data file is organized as a 1Kbyte header
- followed by additional information. The first two
- bytes of the header tell what kind of stuff the
- additional information is. For Khoros image files,
- the additional information consists of the maps,
- the location data, and then the image or vector data.
-
- There is a supporting document for this file called
- "The Khoros Visualization/Image File Format" that will help to
- expalin the various fields, see $KHOROS_HOME/manual/viff_format.
-
- The header fields where carefully selected to
- prevent contradictions between categories, i.e. they
- were chosen to be orthogonal to each other. However,
- in several situations this causes the fields to supply
- redundant information.
-
- Note that the structure contains pointers to the various
- chunks of data. These will make sense ONLY when the
- data is in memory.
-
- *imagedata - points to a sequence of images, an image is
- made up of bands, and the bands are in a sequence; or
- it can point to vectors, where the vector dimension is
- the number of bands.
-
- *maps - points to a sequence of 2-dimensional maps, a map
- is organized as stacked columns. A data value indexes map rows.
-
- *location - points to bands of coordinate values, ie if
- two dimensional locations, then there would be a band
- of x's followed by a band of y's.
-
- The Khoros convention for the image orientarion is
- with the image origin in the upper left hand corner.
-
- ******************************************************************
- */
-
-
- /*
- * The VIFF header size for a Cray is 4096 because of the
- * word size on a cray. So, set the headersize to be 4096
- * for the cray and 1024 of all other machines.
- */
-
- #if defined(CRAY)
- # define VIFF_HEADERSIZE 4096
- #else
- # define VIFF_HEADERSIZE 1024
- #endif
-
-
- /* image structure definition */
-
- struct xvimage {
-
- /* Administrative or file management information */
-
- char identifier; /* a magic number that tells
- the world that this is an
- Khoros file */
-
- char file_type; /* tells if this file is a VIFF file */
-
- char release; /* release number */
-
- char version; /* version number */
-
- char machine_dep; /* indicates peculiarities of */
- /* machine architecture */
-
- char trash[3]; /* preserves word boundaries */
- /* groups of 4 bytes */
-
- char comment[512]; /* text for image commentary */
-
- /* Things that specify the spatial properties of the image, pixel
- organization, and data storage arrangement. */
-
- unsigned long row_size; /* length of row in pixels,
- i.e. number of columns */
-
- unsigned long col_size; /* length of column in pixels,
- i.e. number or rows */
-
- unsigned long subrow_size; /* Length of subrows. This is useful
- when one wants pixel vectors to
- represent 2D objects (images).
- The size of each pixel "image"
- would be subrow_size (columns)
- by num_data_bands/subrow_size (rows).
- This field may be ignored except
- by routines that need the 2D
- interpretation. */
-
- /* The product of row_size and col_size is used to indicate
- the number of locations when the location type is explicit,
- the product also indicates the number of pixels in a band,
- or the number of vectors. */
-
- long startx, starty; /* subimage starting position (upper
- left hand corner), negative indicates
- that it is not a subimage */
-
- float pixsizx, pixsizy; /* Actual size of pixel at time of
- digitization in meters */
-
- unsigned long location_type; /* implied or explicit location
- data (implied locations are
- derived from row_size and
- col_size */
-
- unsigned long location_dim; /* explicit locations can be of
- any dimension */
-
- unsigned long num_of_images; /* number of images
- pointed to by *imagedata,
- do not confuse with number of
- bands */
-
- unsigned long num_data_bands; /* Number of bands per data pixel,
- or number of bands per image, or
- dimension of vector data, or
- number of elements in a vector */
-
- unsigned long data_storage_type; /* storage type for disk data */
-
- unsigned long data_encode_scheme; /* encoding scheme of disk data */
-
- /* Things that determine how the mapping (if any) of data bands is
- to be done to obtain the actual "image" or data. */
-
- unsigned long map_scheme; /* How mapping (if any) is to occur */
-
- unsigned long map_storage_type;/* Storage type of cells in the maps */
-
- unsigned long map_row_size; /* number of columns in map array */
-
- unsigned long map_col_size; /* number of entries in map (rows) */
-
- unsigned long map_subrow_size; /* Length of subrows. This is useful
- when using the output vector from
- the map as a 2-D image, rather
- than just a vector. The size of
- the 2-D image would be:
- map_subrow_size (columns) by
- map_row_size/map_subrow_size
- (rows). This field may be ignored
- except by routines that need the 2D
- interpretation */
-
- unsigned long map_enable; /* Tells if the disk data is valid
- with or without being sent thru the
- map. Some data MUST be mapped to be
- valid. */
-
- unsigned long maps_per_cycle; /* number of maps to constitue a "cycle"
- for VFF_MS_CYCLE */
-
- /* Specification of the particular color model in use when working with a
- color image. This just tells what the coordinate system and axis orientation
- of the color space is. */
-
- unsigned long color_space_model;
-
- /* Extra fields for use by the user as needed. These are NOT SUPPORTED
- in any way, except for being read and written correctly with respect
- to machine dependencies. */
-
- unsigned long ispare1,ispare2; /* Spare long ints */
-
- float fspare1,fspare2; /* Spare floats */
-
- /* Pointers to the actual data - these are valid only when in memory! */
-
- char reserve[VIFF_HEADERSIZE - (21*sizeof(long))
- - (520*sizeof(char))
- - (2*sizeof(char *)) - (4*sizeof(float))
- - (sizeof(float *))];
- /* maximum header information is
- 1024 bytes, what is not currently
- used is saved in reserve */
-
- char *maps; /* a pointer to the maps, must be cast into
- the proper type */
-
- float *location; /* a pointer to the location data (for
- explicit locations, each location is
- paired with data pointed to by
- *imagedata, all locations are
- in float */
-
- char *imagedata; /* a pointer to the input data (straight off
- of disk, must be cast into the proper type */
-
- } ;
-
- /* definitions for version number,
- char release; */
- #define XV_IMAGE_VER_NUM 3 /* Version 3 (3.1) */
-
- /* definitions for release number,
- char version; */
- #define XV_IMAGE_REL_NUM 1 /* Release 1 */
-
- /* definitions for subimage information,
- long startx, starty; */
- #define VFF_NOTSUB ~0 /* a negative number indicates that
- the image is not a subimage */
-
- /* definitions for machine dependencies,
- char machine_dep; */
- #define VFF_DEP_IEEEORDER 0x2 /* IEEE byte ordering */
- #define VFF_DEP_DECORDER 0x4 /* DEC (VAX) byte ordering */
- #define VFF_DEP_NSORDER 0x8 /* NS32000 byte ordering */
- #define VFF_DEP_CRAYORDER 0xA /* Cray byte size and ordering */
-
- #define VFF_DEP_BIGENDIAN VFF_DEP_IEEEORDER
- #define VFF_DEP_LITENDIAN VFF_DEP_NSORDER
-
-
- /* definitions for data storage type,
- unsigned long data_storage_type; */
- #define VFF_TYP_BIT 0 /* pixels are on or off (binary image)*/
- /* Note: This is an X11 XBitmap
- with bits packed into a byte and
- padded to a byte */
- #define VFF_TYP_1_BYTE 1 /* pixels are byte (unsigned char) */
- #define VFF_TYP_2_BYTE 2 /* pixels are two byte (short int) */
- #define VFF_TYP_4_BYTE 4 /* pixels are four byte (integer) */
- #define VFF_TYP_FLOAT 5 /* pixels are float (single precision)*/
- #define VFF_TYP_COMPLEX 6 /* pixels are complex float */
- #define VFF_TYP_DOUBLE 9 /* pixels are float (double precision)*/
-
- #define VFF_TYP_DCOMPLEX 10 /* double complex */
-
- /* definitions for data encoding scheme on disk - i.e. it may be
- compressed using RLE, or uncompressed (RAW).
- unsigned long data_encode_scheme; */
- #define VFF_DES_RAW 0 /* Raw - no compression */
- #define VFF_DES_COMPRESS 1 /* Compressed using ALZ */
- #define VFF_DES_RLE 2 /* Compressed using RLE */
- #define VFF_DES_TRANSFORM 3 /* Transform based compression */
- #define VFF_DES_CCITT 4 /* CCITT standard compression */
- #define VFF_DES_ADPCM 5 /* ADPCM compression */
- #define VFF_DES_GENERIC 6 /* User-specified compression */
-
- /* definitions for map data or cells storage type,
- unsigned long map_storage_type; */
- #define VFF_MAPTYP_NONE 0 /* No cell type is assigned */
- #define VFF_MAPTYP_1_BYTE 1 /* cells are byte (unsigned char) */
- #define VFF_MAPTYP_2_BYTE 2 /* cells are two byte (short int) */
- #define VFF_MAPTYP_4_BYTE 4 /* cells are four byte (integer) */
- #define VFF_MAPTYP_FLOAT 5 /* cells are float (single precision) */
- #define VFF_MAPTYP_COMPLEX 6 /* cells are complex FLOAT */
- #define VFF_MAPTYP_DOUBLE 7 /* cells are float (double precision) */
-
- /* definitions for mapping schemes,
- unsigned long map_scheme; */
- #define VFF_MS_NONE 0 /* No mapping is to be done, and no
- maps are to be stored. */
- #define VFF_MS_ONEPERBAND 1 /* Each data band has its own map */
- #define VFF_MS_CYCLE 2 /* An array of maps is selected in order
- by groups of maps_per_cycle, allowing
- "rotating the color map" */
- #define VFF_MS_SHARED 3 /* All data band share the same map */
- #define VFF_MS_GROUP 4 /* All data bands are "grouped"
- together to point into one map */
- /* definitions for enabling the map,
- unsigned long map_enable; */
- #define VFF_MAP_OPTIONAL 1 /* The data is valid without being
- sent thru the color map. If a
- map is defined, the data may
- optionally be sent thru it. */
- #define VFF_MAP_FORCE 2 /* The data MUST be sent thru the map
- to be interpreted */
-
- /* definitions for color map models,
- unsigned long color_space_model; */
-
- /* the models use the following convention:
- ntsc: national television systems committee
- cie: Commission Internationale de L'Eclairage
- ucs: universal chromaticity scale
- RGB: red band, green band, blue band
- CMY: cyan band, magenta band, yellow band
- YIQ: luminance, I and Q represent chrominance
- HSV: hue, saturation, value
- IHS: intensity, hue, saturation
- XYZ:
- UVW:
- SOW:
- Lab:
- Luv:
-
- For more information on how to interpret the combined meaning of the
- colorspace fields, see the document in $KHOROS_HOME/manual/viff_format,
- which contains detailed descriptions on the fields along with numerous
- examples of proper use. */
-
- #define VFF_CM_NONE 0
- #define VFF_CM_ntscRGB 1
- #define VFF_CM_ntscCMY 2
- #define VFF_CM_ntscYIQ 3
- #define VFF_CM_HSV 4
- #define VFF_CM_HLS 5
- #define VFF_CM_IHS 6
- #define VFF_CM_cieRGB 7
- #define VFF_CM_cieXYZ 8
- #define VFF_CM_cieUVW 9
- #define VFF_CM_cieucsUVW 10
- #define VFF_CM_cieucsSOW 11
- #define VFF_CM_cieucsLab 12
- #define VFF_CM_cieucsLuv 13
- #define VFF_CM_GENERIC 14 /* the color space is user defined */
- #define VFF_CM_genericRGB 15 /* an RGB image but not conforming
- to any standard */
-
- /* definitions for location type,
- unsigned long location_type; */
- #define VFF_LOC_IMPLICIT 1 /* The location of image pixels
- or vector data is given by using
- the implied 2D array given by
- row_size and col_size. */
- #define VFF_LOC_EXPLICIT 2 /* The location of the image pixels
- or the vectors is explicit */
-
-
- /* The following are a couple of defines that make it easier
- to use the image size data */
- #define number_of_rows col_size
- #define number_of_cols row_size
-
- #endif /* _viff_h_ */
- /* Don't add after the endif */
-