1526 lines
51 KiB
C
1526 lines
51 KiB
C
/**
|
|
** $Header: /sdsc/dev/vis/image/imtools/v3.0/libim/src/include/RCS/im.h,v 1.48 1995/06/30 22:13:07 bduggan Exp $
|
|
** Copyright (c) 1989-1995 San Diego Supercomputer Center (SDSC)
|
|
** a division of General Atomics, San Diego, California, USA
|
|
**
|
|
** Users and possessors of this source code are hereby granted a
|
|
** nonexclusive, royalty-free copyright and design patent license to
|
|
** use this code in individual software. License is not granted for
|
|
** commercial resale, in whole or in part, without prior written
|
|
** permission from SDSC. This source is provided "AS IS" without express
|
|
** or implied warranty of any kind.
|
|
**
|
|
** For further information contact:
|
|
** E-Mail: info@sds.sdsc.edu
|
|
**
|
|
** Surface Mail: Information Center
|
|
** San Diego Supercomputer Center
|
|
** P.O. Box 85608
|
|
** San Diego, CA 92138-5608
|
|
** (619) 534-5000
|
|
**/
|
|
|
|
/**
|
|
** FILE
|
|
** im.h - Image library include file
|
|
**
|
|
** PROJECT
|
|
** libim - SDSC image manipulation library
|
|
**
|
|
** DESCRIPTION
|
|
** im.h contains the structs, typedefs, externs, defines, and macros
|
|
** needed to use the VFB, CLT, and File subpackages of the image
|
|
** library.
|
|
**
|
|
** PUBLIC CONTENTS
|
|
** d =defined constant
|
|
** f =function
|
|
** m =defined macro
|
|
** t =typedef/struct/union
|
|
** v =variable
|
|
** ? =other
|
|
**
|
|
** __IMH__ d file inclusion flag
|
|
**
|
|
** ImErrNo v error number
|
|
** ImNErr v number of error messages
|
|
** ImErrList v error messages
|
|
** IME... d error codes
|
|
**
|
|
** IMVFBNULL d NULL VFB
|
|
** IMCLTNULL d NULL CLT
|
|
** IMVFBNEW d Indicate a new VFB is to be allocated
|
|
** IMCLTNEW d Indicate a new CLT is to be allocated
|
|
**
|
|
** ImCltPtr t pointer to CLT entry
|
|
** ImClt t color lookup table
|
|
** ImVfbPtr t pointer to VFB pixel
|
|
** ImVfb t virtual frame buffer
|
|
** ImHotSpot t image hotspot
|
|
**
|
|
** ImVfb... m set and query VFB attributes
|
|
** ImClt... m Set and query CLT attributes
|
|
** ImHotSpot... m set and query HotSpot attributes
|
|
**
|
|
** IMVFB... d fields mask values
|
|
** IMVFB... d raster operations and inout values
|
|
** IMVFB... d flip directions
|
|
** IMVFB... d resolution change algorithms
|
|
**
|
|
** IMTYPEINDEX d Indexed image type
|
|
** IMTYPERGB d RGB image type
|
|
** IMTYPE2D d 2D primitives
|
|
** IMCOMP... d Compression options
|
|
** IMINTER... d Interlace options
|
|
** IMCLT... d CLT options
|
|
** IMALPHA... d Alpha plane options
|
|
**
|
|
** ImFileFormat t file format info
|
|
**
|
|
** ImFileFormatReadMap t map of how a format handles reads
|
|
** ImFileFormatWriteMap t map of how a format handles writes
|
|
**
|
|
** Im... f Generic function declarations
|
|
** ImVfb... f VFB function declarations
|
|
** ImClt... f CLT function declarations
|
|
** ImFile... f File I/O function declarations
|
|
** ImGetFileFormats f Get the list of formats
|
|
**
|
|
** IMFILE... d Image file format-specific options
|
|
**
|
|
** IMERRORFATAL d fatal error
|
|
** IMERRORWARNING d warning error
|
|
** IMERRORINFO d information error
|
|
**
|
|
** IMMAXNAME d maximum name size
|
|
** IMDEFMONOTHRESH d default monochrome threshold
|
|
**
|
|
** IMMAXIMUM d computed maximum field value
|
|
** IMMINIMUM d computed minimum field value
|
|
** IMUNIQUEVAL d computed number of unique field values
|
|
** IMMAXNUMSTATS d number of statistics returned by ImVfbStat
|
|
**
|
|
** ImHistTable t histogram information table
|
|
** IMHIST... d histogram table array index names
|
|
** imhist_... d histogram table union field names
|
|
**
|
|
** PRIVATE CONTENTS
|
|
** none
|
|
**
|
|
** HISTORY
|
|
** $Log: im.h,v $
|
|
** Revision 1.48 1995/06/30 22:13:07 bduggan
|
|
** added ImVfbFSDitherToMono non-ansi prototype
|
|
**
|
|
** Revision 1.47 1995/06/29 00:30:40 bduggan
|
|
** Added IMVFBPRINTINTFLAOT
|
|
** oops, i mean FLOAT
|
|
**
|
|
** Revision 1.46 1995/06/16 07:16:09 bduggan
|
|
** removed IMFILECOMPZ
|
|
**
|
|
** Revision 1.45 1995/06/16 06:58:45 bduggan
|
|
** added imvfbcopychannel
|
|
**
|
|
** Revision 1.44 1995/06/16 06:47:00 bduggan
|
|
** Added compression support.
|
|
** Removed global ImFileFormats variable.
|
|
** Added ANSI declarations for pointers to functions.
|
|
**
|
|
** Revision 1.43 1995/05/18 00:09:51 bduggan
|
|
** Added IMCOMPASCII, ImVfbPrint, ImGetTransparency,
|
|
** IMFILECOMPZ,
|
|
** ImVfbSameRGB, ImVfbSameRGBA, (etc.),
|
|
** IMVFBPRINTFLOAT, IMVFBPRINTINT
|
|
**
|
|
** Revision 1.42 1995/04/03 22:11:26 bduggan
|
|
** added support for channel mapping requests,
|
|
** image quality requests (for jpeg compression),
|
|
** and took out #ifdef NEWMAGIC
|
|
**
|
|
** Revision 1.41 1995/01/18 21:54:21 bduggan
|
|
** Added GROUP macros and FSDitherToMono prototype
|
|
**
|
|
** Revision 1.40 1994/10/03 16:01:28 nadeau
|
|
** Updated to ANSI C and C++ compatibility by adding function prototypes.
|
|
** Minimized use of custom SDSC types (e.g., uchar vs. unsigned char)
|
|
** Changed all float arguments to double.
|
|
** Rearranged magic number structures for format handlers.
|
|
** Added definitions for IMMULTI, IMNOMULTI, IMPIPE, & IMNOPIPE.
|
|
** Updated copyright message.
|
|
**
|
|
** Revision 1.39 93/03/18 12:29:28 todd
|
|
** added extern ImVfb *ImVfbIndex() to quiet the compiler
|
|
**
|
|
** Revision 1.38 93/03/09 10:44:58 nadeau
|
|
** Corrected non-ANSI-ism of an #endif comment.
|
|
**
|
|
** Revision 1.37 92/12/03 02:19:54 nadeau
|
|
** Updated histogram information and function declarations.
|
|
**
|
|
** Revision 1.36 92/11/06 17:00:35 groening
|
|
** change ImFIleFormats struct.
|
|
**
|
|
** Revision 1.35 92/10/06 13:44:42 nadeau
|
|
** Added function declarations.
|
|
**
|
|
** Revision 1.34 92/09/04 18:35:45 groening
|
|
** Added IMEIMPSHEAR error.
|
|
**
|
|
** Revision 1.33 92/08/31 14:49:26 nadeau
|
|
** Added additional function declarations. Moved things around
|
|
** a bit. Added comments to hotspot declarations. Added additiona
|
|
** error codes. Changed names on some error codes.
|
|
**
|
|
** Revision 1.32 92/08/28 15:29:14 vle
|
|
** Added hotspot support.
|
|
**
|
|
** Revision 1.31 92/08/18 13:08:21 groening
|
|
** added error measges and stuff for imhist.c
|
|
** plus #defines for operations, etc.
|
|
**
|
|
** Revision 1.30 92/06/06 13:36:52 vle
|
|
** Fixed type problem with macros.
|
|
**
|
|
** Revision 1.29 92/04/15 12:23:56 nadeau
|
|
** Added more extern declarations.
|
|
**
|
|
** Revision 1.28 91/10/03 12:56:07 nadeau
|
|
** Removed out-of-date PBM and FPS flags.
|
|
**
|
|
** Revision 1.27 91/10/03 12:54:09 nadeau
|
|
** Cosmetic changes. Added read and write map support.
|
|
**
|
|
** Revision 1.26 91/01/23 12:50:34 doeringd
|
|
** Added prefix "IMFPS" to FPS enum list items.
|
|
**
|
|
** Revision 1.25 91/01/23 12:04:19 doeringd
|
|
** Removed unneeded enum name "aperture" to prevent conflict with
|
|
** int aperture.
|
|
**
|
|
** Revision 1.24 91/01/23 11:06:08 nadeau
|
|
** Removed redundant aperture declaration.
|
|
**
|
|
** Revision 1.23 91/01/23 10:44:00 doeringd
|
|
** Add fps enum definitions for apertures.
|
|
**
|
|
** Revision 1.22 91/01/23 10:27:08 nadeau
|
|
** Added multiVFB flag to ImFileFormats struct.
|
|
**
|
|
** Revision 1.21 91/01/20 07:43:55 doeringd
|
|
** Included imfps.h aperture enum values.
|
|
**
|
|
** Revision 1.20 91/01/16 10:30:04 doeringd
|
|
** Add PBM defines
|
|
**
|
|
** Revision 1.19 91/01/16 10:13:27 nadeau
|
|
** Added declarations for ImVfbIsMono() and ImVfbTo8Mono().
|
|
**
|
|
** Revision 1.18 90/09/04 14:03:44 ferrerj
|
|
** added ImVfbCopyArea to function list
|
|
**
|
|
** Revision 1.17 90/09/04 13:57:10 ferrerj
|
|
** added ImVfbCopyArea() to function list
|
|
**
|
|
** Revision 1.17 90/09/04 02:00:00 ferrerj
|
|
** added ImVfbCopyArea() to function list
|
|
**
|
|
** Revision 1.16 90/07/26 11:45:09 mcleodj
|
|
** Added Pixar PIC format flag values
|
|
**
|
|
** Revision 1.15 90/07/25 16:25:14 nadeau
|
|
** Changed RAS file format flag values and their names.
|
|
**
|
|
** Revision 1.14 90/07/25 13:34:05 todd
|
|
** added several new IME* errors.
|
|
** added IMTIFF flag values
|
|
**
|
|
** Revision 1.13 90/07/23 13:51:14 nadeau
|
|
** Fixed Index16 macros to use vfb_i32off instead of vfb_ioff. Added HDF
|
|
** write flags. Removed PIX write flag.
|
|
**
|
|
** Revision 1.12 90/07/15 09:30:28 mjb
|
|
** added ImVfbCut() and ImvfbLightness() to function list
|
|
**
|
|
** Revision 1.11 90/07/02 15:48:25 mercurio
|
|
** Error messages added
|
|
**
|
|
** Revision 1.10 90/06/28 20:14:29 mercurio
|
|
** Added IMENOIMAGE and IMEUNSUPPORTED error codes
|
|
**
|
|
** Revision 1.9 90/06/28 15:16:00 nadeau
|
|
** Removed tag table types and function declarations. Added #defines to
|
|
** map from the old tag table function names to the new ones. Added
|
|
** declarations and #defines for the error handling code.
|
|
**
|
|
** Revision 1.8 90/05/15 13:57:56 todd
|
|
** Move IMFILEFD & FP PIPE and FILE macros to new iminternal.h file
|
|
**
|
|
** Revision 1.7 90/05/11 14:26:34 nadeau
|
|
** Removed old IMFILE format defines.
|
|
**
|
|
** Revision 1.6 90/05/11 10:02:47 nadeau
|
|
** Added ImFileFormat struct for file format information. Left old way
|
|
** in still.
|
|
**
|
|
** Revision 1.5 90/05/02 11:13:25 mjb
|
|
** More of the above
|
|
**
|
|
** Revision 1.4 90/05/02 07:56:57 mjb
|
|
** moreof the above
|
|
**
|
|
** Revision 1.3 90/05/02 07:51:53 mjb
|
|
** Changed ImVfb and ImClt typedefs to be structures, not pointers
|
|
** This will require declarations of the form:
|
|
**
|
|
** ImClt *srcClt;
|
|
**
|
|
** Revision 1.2 90/04/30 10:28:54 nadeau
|
|
** Changed tag list stuff to tag table stuff. Added error codes and
|
|
** renumbered the ones already there. Updated the function declarations
|
|
** and fixed various comments. Added file format flag defines.
|
|
**
|
|
** Revision 1.1 90/03/28 11:17:57 nadeau
|
|
** Initial revision
|
|
**
|
|
**/
|
|
|
|
|
|
#ifndef __IMH__
|
|
#define __IMH__
|
|
|
|
#ifndef __SDSCH__
|
|
//#include "sdsc.h"
|
|
#endif /* __SDSCH__ */
|
|
|
|
|
|
|
|
/*
|
|
* GLOBAL VARIABLE
|
|
* ImErrNo - error number
|
|
* ImNErr - number of error messages
|
|
* ImErrList - error messages
|
|
*
|
|
* DESCRIPTION
|
|
* On an error, the image library routines return -1, or NULL, and set
|
|
* ImErrNo to an error code. The programmer may call ImPError
|
|
* to print the associated error message to stderr, or may do the
|
|
* message lookup in ImErrList directly.
|
|
*/
|
|
|
|
extern int ImErrNo; /* Current error number */
|
|
extern int ImNErr; /* Number of error messages */
|
|
extern char *ImErrList[]; /* List of error messages */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IME... - error codes
|
|
*
|
|
* DESCRIPTION
|
|
* ImErrNo may be set to these error codes as a result of an error in
|
|
* calling one of the image library routines.
|
|
*/
|
|
|
|
#define IMESYS 0 /* System error */
|
|
#define IMEMALLOC 1 /* Cannot allocate */
|
|
|
|
#define IMENOCONTENTS 2 /* Bad fields mask */
|
|
#define IMENOFPDATA 3 /* Bad float data */
|
|
#define IMEBADINOUT 4 /* Bad inout arg */
|
|
#define IMEBADFBTYPE 5 /* Bad frame buffer type */
|
|
#define IMEFORMAT 6 /* Bad format */
|
|
#define IMENOFILE 7 /* No file? */
|
|
#define IMENOTINFO 8 /* Not enough info in VFB */
|
|
#define IMEBADFLIP 9 /* Bad flip selection */
|
|
#define IMEBADALGORITHM 10 /* Bad res change algorithm */
|
|
|
|
#define IMENOREAD 11 /* Read not supported on format */
|
|
#define IMENOWRITE 12 /* Write not supported on format*/
|
|
#define IMENOVFB 13 /* No VFB given for image write */
|
|
#define IMEMANYVFB 14 /* Too many VFB's for image write*/
|
|
#define IMENOTRGB 15 /* VFB isn't an RGB image */
|
|
#define IMEMAGIC 16 /* Bad magic number on image file*/
|
|
#define IMEIMAGETYPE 17 /* Unknown image type */
|
|
#define IMECLTTYPE 18 /* Unknown CLT type */
|
|
#define IMEDEPTH 19 /* Unknown image depth */
|
|
#define IMECLTLENGTH 20 /* Bad CLT length */
|
|
#define IMENOCLT 21 /* No CLT given for image */
|
|
#define IMEMANYCLT 22 /* Too many CLT's for image */
|
|
#define IMEUNKNOWN 23 /* VFB isn't a GRAY image */
|
|
|
|
#define IMENULLTAGTABLE 24 /* NULL tag table given */
|
|
#define IMESYNTAX 25 /* Syntax error */
|
|
#define IMENOIMAGE 26 /* No images in input file */
|
|
#define IMEUNSUPPORTED 27 /* Unsupported VFB type */
|
|
#define IMEDIFFSIZE 28 /* VFB's have different sizes */
|
|
#define IMEVERSION 29 /* Bad version number in header */
|
|
#define IMEPLANES 30 /* Unknown image plane config */
|
|
#define IMEOUTOFRANGE 31 /* Header value out of legal range */
|
|
#define IMEORIENTATION 32 /* Unsupported image orientation*/
|
|
#define IMEWIDTH 33 /* Zero or negative image width */
|
|
#define IMEHEIGHT 34 /* Zero or negative image height*/
|
|
#define IMECONFLICT 35 /* Conflicting info in im header*/
|
|
#define IMENOTINDEX8 36 /* Not an Index 8 image */
|
|
#define IMENOTINDEX16 37 /* Not an Index 16 image */
|
|
#define IMENOTMONO 38 /* Not a monochrome image */
|
|
#define IMEFIELD 39 /* Bad field mask */
|
|
#define IMENOTPOSSIBLE 40 /* Conversion/Output not possible*/
|
|
#define IMEDECODING 41 /* Error while decoding image */
|
|
#define IMEENCODING 42 /* Error while encoding image */
|
|
#define IMEOPERATION 43 /* Unknown operation */
|
|
#define IMEGRADUATION 44 /* Unknown graduation */
|
|
#define IMEHISTMAX 45 /* Histogram maximum exceeded */
|
|
#define IMEBADRANGE 46 /* Value range inappropriate */
|
|
#define IMEKEY 47 /* invalid key parameter passed */
|
|
#define IMEADJUST 48 /* invalid adjust parameter passed */
|
|
#define IMENOALPHA 49 /* no alpha present when needed */
|
|
#define IMEPIXELREP 50 /* not exact multiples for pixel rep */
|
|
#define IMEKEYFIELD 51 /* Bad keyField on adjust */
|
|
#define IMEADJUSTFIELD 52 /* Bad adjustField on adjust */
|
|
#define IMEIMPSHEAR 53 /* shear of 90 degrees encountered */
|
|
#define IMEBADCHANNEL 54 /* Bad channel map request */
|
|
#define IMEBADCHANNELS 55 /* Invalid channel map requests */
|
|
#define IMEVALOUTOFRANGE 56 /* Value out of range */
|
|
#define IMEFORMATUNKNOWN 57 /* Couldn't figure out format */
|
|
/* 58-2^32-1 Reserved */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMVFBNULL - NULL VFB
|
|
* IMCLTNULL - NULL CLT
|
|
* IMVFBNEW - Indicate a new VFB is to be allocated
|
|
* IMCLTNEW - Indicate a new CLT is to be allocated
|
|
*
|
|
* DESCRIPTION
|
|
* These values are each used when a NULL (empty) VFB, or CLT is to be
|
|
* indicated. These values may be passed as the destination arguments
|
|
* to VFB, and CLT, and may be returned as error condition values from
|
|
* functions that normally return VFB's, or CLT's.
|
|
*/
|
|
|
|
#define IMVFBNULL ((ImVfb *)0)
|
|
#define IMVFBNEW IMVFBNULL
|
|
#define IMCLTNULL ((ImClt *)0)
|
|
#define IMCLTNEW IMCLTNULL
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TYPEDEF & STRUCTURE
|
|
* ImCltPtr - pointer to CLT entry
|
|
* ImClt - color lookup table
|
|
*
|
|
* DESCRIPTION
|
|
* The ImClt struct contains a color lookup table. Such a CLT may,
|
|
* or may not, be referenced by a VFB.
|
|
*
|
|
* clt_ncolors is the number of entries in the CLT. Each entry
|
|
* consists of 3 consecutive 8-bit bytes for red, green, and blue.
|
|
*
|
|
* clt_clt is a pointer to the first byte of the first entry in the
|
|
* CLT.
|
|
*/
|
|
|
|
typedef unsigned char *ImCltPtr; /* Color pointer */
|
|
|
|
typedef struct ImClt
|
|
{
|
|
int clt_ncolors; /* # colors in CLT storage */
|
|
ImCltPtr clt_clt; /* points to actual CLT storage */
|
|
} ImClt;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TYPEDEF & STRUCTURE
|
|
* ImVfbPtr - pointer to VFB pixel
|
|
* ImVfb - virtual frame buffer
|
|
*
|
|
* DESCRIPTION
|
|
* The ImVfb struct contains a virtual frame buffer (an image and its
|
|
* associated per-pixel data).
|
|
*
|
|
* vfb_width and vfb_height give the width and height of the VFB.
|
|
*
|
|
* vfb_fields is a mask that indicates what types of values are
|
|
* associated with each pixel in the VFB.
|
|
*
|
|
* vfb_nbytes is the number of bytes per pixel.
|
|
*
|
|
* vfb_clt is an optional CLT associated with the VFB. vfb_clt will
|
|
* be IMCLTNULL if there is no CLT.
|
|
*
|
|
* vfb_roff, vfb_goff, and vfb_boff are byte offsets to reach the
|
|
* red, green, and blue planes (if any) of the VFB.
|
|
*
|
|
* vfb_aoff is a byte offset to the alpha plane (if any) of the VFB.
|
|
*
|
|
* vfb_i8off, and vfb_i16off are byte offsets to the 8-bit or 16-bit
|
|
* color index planes (if any) of the VFB.
|
|
*
|
|
* vfb_wpoff is a byte offset to the write protect plane (if any) of the
|
|
* VFB.
|
|
*
|
|
* vfb_zoff is a byte offset to the Z-buffer plane (if any) of the VFB.
|
|
*
|
|
* vfb_fpoff and vfb_ioff are a byte offsets to the floating point and
|
|
* integer data planes (if any) of the VFB.
|
|
*
|
|
* vfb_pfirst and vfb_plast point to the first and last pixels in the
|
|
* VFB.
|
|
*/
|
|
|
|
typedef unsigned char *ImVfbPtr; /* Pixel pointer */
|
|
|
|
typedef struct ImVfb
|
|
{
|
|
int vfb_width; /* # cols */
|
|
int vfb_height; /* # rows */
|
|
int vfb_fields; /* mask specifying what is in each pixel*/
|
|
int vfb_nbytes; /* # bytes per pixel */
|
|
ImClt *vfb_clt; /* points to attached CLT, if any */
|
|
int vfb_roff; /* offset (in bytes) to reach red */
|
|
int vfb_goff; /* green */
|
|
int vfb_boff; /* blue */
|
|
int vfb_aoff; /* alpha-value */
|
|
int vfb_i8off; /* color index */
|
|
int vfb_wpoff; /* write protect offset */
|
|
int vfb_i16off; /* color index */
|
|
int vfb_zoff; /* z-value */
|
|
int vfb_moff; /* mono */
|
|
int vfb_fpoff; /* floating point */
|
|
int vfb_ioff; /* integer */
|
|
ImVfbPtr vfb_pfirst; /* points to first pixel */
|
|
ImVfbPtr vfb_plast; /* points to last pixel */
|
|
} ImVfb;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMVFB... - fields mask values
|
|
*
|
|
* DESCRIPTION
|
|
* The fields mask of a VFB is the bitwise OR of one or more of
|
|
* these mask values. Each value indicates that data of that type
|
|
* is to be stored in the VFB at each pixel location.
|
|
*/
|
|
|
|
#define IMVFBALL ( ~0 ) /* Everything */
|
|
|
|
#define IMVFBIMAGEMASK ( 0xFF ) /* Image items */
|
|
#define IMVFBMONO ( 1 << 0 )
|
|
#define IMVFBINDEX8 ( 1 << 1 )
|
|
#define IMVFBGRAY IMVFBINDEX8
|
|
#define IMVFBGREY IMVFBINDEX8
|
|
#define IMVFBINDEX16 ( 1 << 2 )
|
|
#define IMVFBRGB ( 1 << 3 )
|
|
/* 4-7 Reserved */
|
|
|
|
#define IMVFBOTHERMASK ( ~0xFF ) /* Non-image items */
|
|
#define IMVFBALPHA ( 1 << 9 )
|
|
#define IMVFBWPROT ( 1 << 10 )
|
|
#define IMVFBZ ( 1 << 11 )
|
|
#define IMVFBFDATA ( 1 << 12 )
|
|
#define IMVFBIDATA ( 1 << 13 )
|
|
#define IMVFBRED ( 1 << 14 )
|
|
#define IMVFBGREEN ( 1 << 15 )
|
|
#define IMVFBBLUE ( 1 << 16 )
|
|
/* 17-31 Reserved */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IM... - field specifiers
|
|
*
|
|
* DESCRIPTION
|
|
* These are used to pass fields around for adjustment, fill, and other
|
|
* tools capable of working in color spaces beyond those actually
|
|
* stored in the VFB (such as hue, saturation, and intensity).
|
|
*
|
|
* NOTE! These are not valid for passing to routines, like ImVfbAlloc,
|
|
* to specify actual fields in a VFB! Use the IMVFB* variants instead.
|
|
*/
|
|
#define IMMONO IMVFBMONO
|
|
#define IMGRAY IMVFBGRAY
|
|
#define IMGREY IMVFBGREY
|
|
#define IMINDEX8 IMVFBINDEX8
|
|
#define IMINDEX16 IMVFBINDEX16
|
|
#define IMRGB IMVFBRGB
|
|
#define IMALPHA IMVFBALPHA
|
|
#define IMWPROT IMVFBWPROT
|
|
#define IMZ IMVFBZ
|
|
#define IMFDATA IMVFBFDATA
|
|
#define IMIDATA IMVFBIDATA
|
|
|
|
#define IMRED IMVFBRED
|
|
#define IMGREEN IMVFBGREEN
|
|
#define IMBLUE IMVFBBLUE
|
|
#define IMSATURATION ( 1 << 28 )
|
|
#define IMINTENSITY ( 1 << 29 )
|
|
#define IMHUE ( 1 << 30 )
|
|
/* 1-16 should be equal to equivalents to IMVFB*
|
|
17-27 are reserved */
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IM... - operations
|
|
*
|
|
* DESCRIPTION
|
|
* These are used to pass operations around
|
|
*/
|
|
#define IMADD ( 1 << 0 )
|
|
#define IMSUBTRACT ( 1 << 1 )
|
|
#define IMMULTIPLY ( 1 << 2 )
|
|
#define IMDIVIDE ( 1 << 3 )
|
|
#define IMSET ( 1 << 4 )
|
|
/* 5-8 Reserved */
|
|
|
|
#define IMCOMPOVER ( 1 << 9 )
|
|
#define IMCOMPINSIDE ( 1 << 10 )
|
|
#define IMCOMPOUTSIDE ( 1 << 11 )
|
|
#define IMCOMPATOP ( 1 << 12 )
|
|
/* 13-32 Reserved */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MACROS
|
|
* ImVfb... - set and query VFB attributes
|
|
*
|
|
* DESCRIPTION
|
|
* These macros, masquerading as subroutines, take a VFB pointer and
|
|
* set or query information from it.
|
|
*/
|
|
|
|
/* CLT and Characteristics. */
|
|
#define ImVfbQWidth( v ) ((v)->vfb_width)
|
|
#define ImVfbQHeight( v ) ((v)->vfb_height)
|
|
#define ImVfbQFields( v ) ((v)->vfb_fields)
|
|
#define ImVfbQNBytes( v ) ((v)->vfb_nbytes)
|
|
#define ImVfbQClt( v ) ((v)->vfb_clt)
|
|
|
|
#define ImVfbSClt( v, c ) ((v)->vfb_clt = (c))
|
|
|
|
|
|
/* Pixel values. */
|
|
#define ImVfbQMono( v, p ) ( (int) ( *( (p)+(v)->vfb_moff ) ) )
|
|
#define ImVfbQIndex8( v, p ) ( (int) ( *( (p)+(v)->vfb_i8off ) ) )
|
|
#define ImVfbQGrey( v, p ) ImVfbQIndex8(v,p)
|
|
#define ImVfbQGray( v, p ) ImVfbQIndex8(v,p)
|
|
#define ImVfbQIndex16( v, p ) ( *((sdsc_uint16 *)((p)+(v)->vfb_i16off ) ) )
|
|
#define ImVfbQIndex( v, p ) \
|
|
( ( ImVfbQFields(v)&IMVFBINDEX8 ) ? ImVfbQIndex8(v,p) :\
|
|
ImVfbQIndex16(v,p) )
|
|
#define ImVfbQRed( v, p ) ( (int) ( *( (p)+(v)->vfb_roff ) ) )
|
|
#define ImVfbQGreen( v, p ) ( (int) ( *( (p)+(v)->vfb_goff ) ) )
|
|
#define ImVfbQBlue( v, p ) ( (int) ( *( (p)+(v)->vfb_boff ) ) )
|
|
|
|
#define ImVfbQAlpha( v, p ) ( (int) ( *( (p)+(v)->vfb_aoff ) ) )
|
|
#define ImVfbQWProt( v, p ) ( (int) ( *( (p)+(v)->vfb_wpoff) ) )
|
|
#define ImVfbQZ( v, p ) ( *((int *)((p)+(v)->vfb_zoff ) ) )
|
|
#define ImVfbQFData( v, p ) ( *((float *)( (p)+(v)->vfb_fpoff ) ) )
|
|
#define ImVfbQIData( v, p ) ( *((int *)( (p)+(v)->vfb_ioff ) ) )
|
|
|
|
|
|
#define ImVfbSMono( v, p, m ) ( *( (p)+(v)->vfb_moff ) = (unsigned char)(m) )
|
|
#define ImVfbSGray( v, p, g ) ImVfbSIndex8(v,p,g)
|
|
#define ImVfbSGrey( v, p, g ) ImVfbSIndex8(v,p,g)
|
|
#define ImVfbSIndex8( v, p, i ) ( *( (p)+(v)->vfb_i8off ) = (unsigned char)(i) )
|
|
#define ImVfbSIndex16( v, p, i ) \
|
|
( *((sdsc_uint16 *)((p)+(v)->vfb_i16off) ) = (unsigned short)(i) )
|
|
#define ImVfbSIndex( v, p, i ) \
|
|
( ( ImVfbQFields(v)&IMVFBINDEX8 ) ? ImVfbSIndex8(v,p,i) :\
|
|
ImVfbSIndex16(v,p,i) )
|
|
#define ImVfbSRed( v, p, r ) ( *( (p)+(v)->vfb_roff ) = (unsigned char)(r) )
|
|
#define ImVfbSGreen( v, p, g ) ( *( (p)+(v)->vfb_goff ) = (unsigned char)(g) )
|
|
#define ImVfbSBlue( v, p, b ) ( *( (p)+(v)->vfb_boff ) = (unsigned char)(b) )
|
|
|
|
#define ImVfbSAlpha( v, p, a ) ( *( (p)+(v)->vfb_aoff ) = (unsigned char)(a) )
|
|
#define ImVfbSWProt( v, p, wp ) ( *( (p)+(v)->vfb_wpoff) = (unsigned char)(wp))
|
|
#define ImVfbSZ( v, p, z ) ( *((int *)((p)+(v)->vfb_zoff) ) = (int)(z) )
|
|
#define ImVfbSFData( v, p, fp ) ( *((float *)((p)+(v)->vfb_fpoff) )=(float)(fp))
|
|
#define ImVfbSIData( v, p, i ) ( *((int *)((p)+(v)->vfb_ioff) ) = (int)(i))
|
|
|
|
|
|
/* Pixel addressing. */
|
|
#define ImVfbQFirst( v ) ( (v)->vfb_pfirst )
|
|
#define ImVfbQLast( v ) ( (v)->vfb_plast )
|
|
#define ImVfbQPtr( v, x, y ) ( ImVfbQFirst(v) + \
|
|
ImVfbQNBytes(v)*( (y)*ImVfbQWidth(v) + \
|
|
(x) ) )
|
|
#define ImVfbQNext( v, p ) ( (p) + ImVfbQNBytes(v) )
|
|
#define ImVfbQPrev( v, p ) ( (p) - ImVfbQNBytes(v) )
|
|
#define ImVfbQLeft( v, p ) ImVfbQPrev(v,p)
|
|
#define ImVfbQRight( v, p ) ImVfbQNext(v,p)
|
|
#define ImVfbQUp( v, p ) ( (p) - ImVfbQWidth(v)*ImVfbQNBytes(v) )
|
|
#define ImVfbQDown( v, p ) ( (p) + ImVfbQWidth(v)*ImVfbQNBytes(v) )
|
|
|
|
#define ImVfbSInc( v, p ) ( (p) += ImVfbQNBytes(v) )
|
|
#define ImVfbSDec( v, p ) ( (p) -= ImVfbQNBytes(v) )
|
|
#define ImVfbSLeft( v, p ) ImVfbSDec( v, p )
|
|
#define ImVfbSRight( v, p ) ImVfbSInc( v, p )
|
|
#define ImVfbSPrev( v, p ) ImVfbSDec( v, p )
|
|
#define ImVfbSNext( v, p ) ImVfbSInc( v, p )
|
|
#define ImVfbSUp( v, p ) ( (p) -= ImVfbQWidth(v)*ImVfbQNBytes(v) )
|
|
#define ImVfbSDown( v, p ) ( (p) += ImVfbQWidth(v)*ImVfbQNBytes(v) )
|
|
|
|
#define ImVfbSameRGB(vfb, one, two) \
|
|
((ImVfbQRed(vfb, one)==ImVfbQRed(vfb,two)) && \
|
|
(ImVfbQGreen(vfb, one)==ImVfbQGreen(vfb, two)) && \
|
|
(ImVfbQBlue(vfb, one)==ImVfbQBlue(vfb, two)) )
|
|
|
|
#define ImVfbSameRGBA(vfb, one, two) \
|
|
((ImVfbQRed(vfb, one)==ImVfbQRed(vfb,two)) && \
|
|
(ImVfbQGreen(vfb, one)==ImVfbQGreen(vfb, two)) && \
|
|
(ImVfbQAlpha(vfb, one)==ImVfbQAlpha(vfb, two)) && \
|
|
(ImVfbQBlue(vfb, one)==ImVfbQBlue(vfb, two)) )
|
|
|
|
#define ImVfbSameIndex8(vfb, one, two) \
|
|
(ImVfbQIndex8(vfb, one)==ImVfbQIndex8(vfb,two))
|
|
|
|
#define ImVfbSameIndex16(vfb, one, two) \
|
|
(ImVfbQIndex16(vfb, one)==ImVfbQIndex16(vfb,two))
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MACROS
|
|
* ImClt... - Set and query CLT attributes
|
|
*
|
|
* DESCRIPTION
|
|
* These macros, masquerading as subroutines, take a CLT pointer and
|
|
* set or retrieve information from it.
|
|
*/
|
|
|
|
/* Characteristics. */
|
|
#define ImCltQNColors(c) ( (c)->clt_ncolors )
|
|
|
|
|
|
/* Entry values. */
|
|
#define ImCltQRed( p ) ( (int) ( *((p)+0) ) )
|
|
#define ImCltQGreen( p ) ( (int) ( *((p)+1) ) )
|
|
#define ImCltQBlue( p ) ( (int) ( *((p)+2) ) )
|
|
|
|
#define ImCltSRed( p, r ) ( *((p)+0) = (unsigned char)(r) )
|
|
#define ImCltSGreen( p, g ) ( *((p)+1) = (unsigned char)(g) )
|
|
#define ImCltSBlue( p, b ) ( *((p)+2) = (unsigned char)(b) )
|
|
|
|
|
|
/* Entry addressing. */
|
|
#define ImCltQFirst( c ) ( (c)->clt_clt )
|
|
#define ImCltQPtr( c, i ) ( ImCltQFirst(c) + (3 * (i)) )
|
|
#define ImCltQLast( c ) ( ImCltQFirst(c) + \
|
|
( 3*( ImCltQNColors(c) - 1 ) ) )
|
|
#define ImCltQNext( c, p ) ( (p) + 3 )
|
|
#define ImCltQPrev( c, p ) ( (p) - 3 )
|
|
|
|
#define ImCltSInc( c, p ) ( (p) += 3 )
|
|
#define ImCltSDec( c, p ) ( (p) -= 3 )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TYPEDEF & STRUCT
|
|
* ImFileFormatReadMap - map of how a format handles reads
|
|
* ImFileFormatWriteMap - map of how a format handles writes
|
|
*
|
|
* DESCRIPTION
|
|
* These two tables are essentially mirror images of each other. The
|
|
* read map tells what depths of imagery can be read from a format and
|
|
* how it maps to VFB's. The write map tells how different VFB's map
|
|
* to file depths.
|
|
*
|
|
* map_inType and map_outType select whether the image is represented
|
|
* as a CLT index per pixel (pseudo-color) or with the full RGB color
|
|
* per pixel (true-color).
|
|
*
|
|
* map_inNChannels and map_outNChannels give the number of channels per
|
|
* pixel (usually 1 or 3).
|
|
*
|
|
* map_inChannelDepth and map_outChannelDepth give the size of the
|
|
* channels, in bits. Usually 1-bit (mono) through 8-bit.
|
|
*
|
|
* map_inAttributes and map_outAttributes select the attributes of
|
|
* an incomming or outgoing file image, such as whether it has a CLT,
|
|
* alpha planes, or is compressed somehow. For read, the _outAttributes
|
|
* may not contain any compression indications. Likewise for write, the
|
|
* _inAttributes may not contain compression stuff.
|
|
*
|
|
* map_inField and map_outField select the type of VFB (as a VFB
|
|
* field mask) that is created by the read or taken by the write. Only
|
|
* image depth type field values should be included (ie., don't add
|
|
* IMVFBALPHA, etc).
|
|
*
|
|
* map_write is a function pointer to the write function to handle
|
|
* this specific output mapping. There is no equivalent read for the
|
|
* read map.
|
|
*/
|
|
|
|
typedef struct ImFileFormatReadMap
|
|
{
|
|
int map_inType; /* In image type (index | rgb) */
|
|
int map_inNChannels; /* In # of channels */
|
|
int map_inChannelDepth; /* In channel size (in bits) */
|
|
int map_inAttributes; /* In image attributes */
|
|
|
|
int map_outField; /* Out VFB field */
|
|
int map_outAttributes; /* Out VFB attributes */
|
|
} ImFileFormatReadMap;
|
|
|
|
typedef struct ImFileFormatWriteMap ImFileFormatWriteMap;
|
|
|
|
struct ImFileFormatWriteMap
|
|
{
|
|
int map_inField; /* In VFB field */
|
|
int map_inAttributes; /* In VFB attributes */
|
|
|
|
int map_outType; /* Out image type (index | rgb) */
|
|
int map_outNChannels; /* Out # of channels */
|
|
int map_outChannelDepth; /* Out channel size (in bits) */
|
|
int map_outAttributes; /* Out image attributes */
|
|
|
|
#ifdef __STDC__
|
|
int (*map_write)(
|
|
ImFileFormatWriteMap * ,
|
|
int , int , FILE* ,
|
|
TagTable* , TagTable* );/* Out write function */
|
|
#else
|
|
int (*map_write)( ); /* Out write function */
|
|
#endif
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMTYPEINDEX - Indexed image type
|
|
* IMTYPERGB - RGB image type
|
|
* IMTYPE2D - 2D primitives
|
|
* IMCOMP* - Compression options
|
|
* IMINTER* - Interlace options
|
|
* IMCLT* - CLT options
|
|
* IMALPHA* - Alpha plane options
|
|
* IMGROUP* - Grouping options
|
|
* IMFILECOMP* - File compression option(s)
|
|
*
|
|
* DESCRIPTION
|
|
* All of these are values used in initializing fields of the read
|
|
* and write mapping structures for the various formats. They may also
|
|
* be used as user request values for flagsTable flags:
|
|
*
|
|
* "image type request", int type = IMTYPEINDEX or IMTYPERGB
|
|
* "image channel number request", int nchannels = 1 or 3 usually
|
|
* "image channel depth request", int depth = 1-32
|
|
* "image compression request", int comp = IMCOMP*
|
|
* "image interleave request", int inter = IMINTER*
|
|
* "image clt request", int clt = IMCLT*
|
|
* "image alpha request", int alpha = IMALPHA*
|
|
* "image group request", int group = IMGROUP*
|
|
* "image quality request" int quality = 1..100 usually
|
|
* "file compression" int type = 1
|
|
*
|
|
*/
|
|
|
|
#define IMTYPEINDEX (0) /* CLT index per pixel */
|
|
#define IMTYPERGB (1) /* RGB color per pixel */
|
|
#define IMTYPE2D (2) /* 2D primitives */
|
|
|
|
#define IMCOMPMASK 0x0F
|
|
#define IMCOMPNO (0<<0) /* No compression */
|
|
#define IMCOMPNONE (0<<0) /* No compression */
|
|
#define IMCOMPRLE (1<<0) /* Run-Length Encoded compression*/
|
|
#define IMCOMPLZW (2<<0) /* Limpel-Ziv Welsh compression */
|
|
#define IMCOMPPACKBITS (3<<0) /* Packbits compression */
|
|
#define IMCOMPPB (3<<0) /* Packbits compression */
|
|
#define IMCOMPMAC (3<<0) /* Packbits compression */
|
|
#define IMCOMPDCT (4<<0) /* Descrete Cosine Transform */
|
|
#define IMCOMPASCII (5<<0) /* Descrete Cosine Transform */
|
|
/* (6<<0) - (15<<0) Reserved */
|
|
|
|
#define IMGROUPMASK 0xF0
|
|
#define IMGROUPSCANLINES (0<<4) /* Group into scanlines(default)*/
|
|
#define IMGROUPTILES (1<<4) /* Group into tiles */
|
|
/* (2<<4) - (15<<4) Reserved */
|
|
|
|
#define IMINTERMASK 0xF00
|
|
#define IMINTERNO (0<<8) /* Non-interleave */
|
|
#define IMINTERNONE (0<<8) /* Non-interleave */
|
|
#define IMINTERLINE (1<<8) /* Scanline interleave */
|
|
#define IMINTERPLANE (2<<8) /* Plane interleave */
|
|
/* (3<<8) - (15<<8) Reserved */
|
|
|
|
#define IMCLTMASK 0xF000
|
|
#define IMCLTNO (0<<12) /* No CLT included */
|
|
#define IMCLTNONE (0<<12) /* No CLT included */
|
|
#define IMCLTNODUMP (0<<12) /* No CLT included */
|
|
#define IMCLTYES (1<<12) /* CLT included */
|
|
#define IMCLTDUMP (2<<12) /* CLT included */
|
|
/* (3<<12) - (15<<12) Reserved */
|
|
|
|
#define IMALPHAMASK 0xF0000
|
|
#define IMALPHANO (0<<16) /* No Alpha planes included */
|
|
#define IMALPHANONE (0<<16) /* No Alpha planes included */
|
|
#define IMALPHANODUMP (0<<16) /* No Alpha planes included */
|
|
#define IMALPHAYES (1<<16) /* Alpha planes included */
|
|
#define IMALPHADUMP (1<<16) /* Alpha planes included */
|
|
/* (2<<16) - (15<<16) Reserved */
|
|
|
|
#define IMQUALITYMASK 0xF00000
|
|
#define IMQUALITYNO (0<<20) /* No quality control allowed */
|
|
#define IMQUALITYYES (1<<20) /* Optional quality control */
|
|
/* (2<<20) - (15<<20) Reserved */
|
|
|
|
/* (1<<24) - (1<<31) Reserved */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TYPEDEF & STRUCT
|
|
* ImFileMagic - magic number info
|
|
* ImFileFormat - file format info
|
|
*
|
|
* DESCRIPTION
|
|
* The imFileFormat struct describes everything we know generically
|
|
* about the set of file formats supported by the image library.
|
|
*
|
|
* format_names is a list of the names we know the format by. The
|
|
* first name in the list is its "primary" name (the name we like most).
|
|
* The rest are "equivalent" names. Names are used as command-line
|
|
* options in image tools, and as possible file extensions. The list
|
|
* is terminated with a NULL. Since all name checking is case-insensitive,
|
|
* only list things in lower case.
|
|
*
|
|
* format_help is a help string that explains what the format is, in
|
|
* 40 characters or less. For instance, "ras" would have "Sun rasterfile"
|
|
* as its help string. "pix" would have "Alias picture file" as its
|
|
* help string. Image library tools will use this as the help string
|
|
* for the option keyword in their argument parsing code.
|
|
*
|
|
* format_creator is a string indicating who created and/or supports
|
|
* this format. "rgb" would read "Silicon Graphics". "ras" would read
|
|
* "Sun Microsystems, Inc.".
|
|
*
|
|
* format_readSupport and format_writeSupport are one-or-more line strings
|
|
* describing the variants of the format that we support. The real
|
|
* detail specifics are left to the read and write maps (later), but these
|
|
* strings say the same thing in more human terms. The strings are used
|
|
* by image tools to list what can be supported.
|
|
*
|
|
* The struct ImFileMagic contains:
|
|
* format_magicLocation, _magicLength, and _magicNumber give information
|
|
* about the format's magic number, if any. The location is the # of
|
|
* bytes from the start of the file at which the magic number is found.
|
|
* This is almost always 0. The length is the # of bytes that constitute
|
|
* the magic number, and is usually 4. If this value is 0, there is no
|
|
* magic number for this format. The magic number itself is a string of
|
|
* bytes that must match the number in the file. Image library tools
|
|
* will typicaly check this against the file in both MBF and LBF order.
|
|
*
|
|
* format_readMultiVfb and format_writeMultiVfb are booleans indicating
|
|
* if the format can read in, and write out multiple images for the same
|
|
* file.
|
|
*
|
|
* format_readPipe and format_writePipe are booleans indicating if
|
|
* the format can handle a pipe. If they can't, the generic code will
|
|
* make a temp file for the format code.
|
|
*
|
|
* format_read is a function pointer to the top level read routine for
|
|
* the format. All format read requests enter here.
|
|
*
|
|
* format_readMap describes in detail the different file variants that
|
|
* can be handled and what kind of VFB they map to.
|
|
*
|
|
* format_writeMap describes in detail the different file variants that
|
|
* can be written and what kind of VFB they accept. The map also has
|
|
* function pointers to specific format write routines to handle those
|
|
* variants.
|
|
*/
|
|
|
|
typedef struct ImFileMagic
|
|
{
|
|
int format_magicLocation; /* Location of magic # */
|
|
int format_magicLength; /* # bytes in magic # */
|
|
unsigned char *format_magicNumber; /* Magic # */
|
|
} ImFileMagic;
|
|
|
|
typedef struct ImFileFormat
|
|
{
|
|
char **format_names; /* Format name string */
|
|
char *format_help; /* Long form of name */
|
|
char *format_creator; /* Creator/source of format */
|
|
char *format_readSupport; /* Message on read handling */
|
|
char *format_writeSupport; /* Message on write handling */
|
|
|
|
ImFileMagic *format_magicMap; /* Magic numbers */
|
|
|
|
int format_readMultiVfb; /* Can read generate multiple VFBs?*/
|
|
int format_readPipe; /* Can read handle a pipe? */
|
|
int format_writeMultiVfb; /* Can write take multiple VFBs?*/
|
|
int format_writePipe; /* Can write handle a pipe? */
|
|
|
|
#ifdef __STDC__
|
|
int (*format_read)(int,int,FILE*,
|
|
TagTable*, TagTable*); /* Read format */
|
|
#else
|
|
int (*format_read)( ); /* Read format */
|
|
#endif
|
|
ImFileFormatReadMap *format_readMap;/* Read support mapping */
|
|
ImFileFormatWriteMap *format_writeMap;/* Write support mapping */
|
|
} ImFileFormat;
|
|
|
|
|
|
/*
|
|
* Values for format_readMultiVfb and format_writeMultiVfb:
|
|
*/
|
|
#define IMMULTI (1) /* Supports multi-image files */
|
|
#define IMNOMULTI (0) /* Doesn't */
|
|
|
|
#define IMPIPE (1) /* Supports pipe input */
|
|
#define IMNOPIPE (0) /* Doesn't */
|
|
|
|
|
|
/*
|
|
* TYPEDEF and STRUCTURE
|
|
* ImCompressScheme
|
|
*
|
|
* DESCRIPTION
|
|
* This is the list of file compression/encoding schemes.
|
|
*
|
|
* The elements of the structure are as follows:
|
|
*
|
|
* compress_suffixes
|
|
* A list of suffixes used by the scheme. For instance,
|
|
* compress/uncompress use the "Z" suffix.
|
|
*
|
|
* compress_name
|
|
* The name of the scheme. "Z" compression is called
|
|
* "Lempel-Ziv Encoding"
|
|
*
|
|
* compress_magic_numbers
|
|
* The possible magic numbers for a file of this type.
|
|
* This magic number structure is the same as the one
|
|
* in the ImFileFormat structure above.
|
|
*
|
|
* compress_decode
|
|
* This is a subroutine which uncompresses a file, and destroys
|
|
* the compressed one.
|
|
*
|
|
* compress_encode
|
|
* This is a subroutine which encodes a file, and destroys the
|
|
* unencoded one.
|
|
*
|
|
* For more information about how to add your own compression schemes,
|
|
* refer to imschemes.c.
|
|
*
|
|
*/
|
|
|
|
|
|
typedef struct ImCompressScheme
|
|
{
|
|
char **compress_suffixes; /* List of suffixes */
|
|
char *compress_name; /* Name */
|
|
ImFileMagic* compress_magic_numbers; /* Magic number(s) */
|
|
#ifdef __STDC__
|
|
int (*compress_decode)(char*,char*,TagTable*); /* Decode (read) routine*/
|
|
int (*compress_encode)(char*,char*,TagTable*); /* Encode (write) routine*/
|
|
#else
|
|
int (*compress_decode)(); /* Read routine */
|
|
int (*compress_encode)(); /* Write routine */
|
|
#endif
|
|
|
|
} ImCompressScheme;
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMVFB... - raster operations and inout values
|
|
*
|
|
* DESCRIPTION
|
|
* The first set of constants define various different raster operations
|
|
* used by ImVfbFill() et al.
|
|
*
|
|
* IMVFBINSIDE and IMVFBOUTSIDE indicate how filling is to take place
|
|
* in ImVfbFill().
|
|
*/
|
|
|
|
#define IMVFBCLEAR 0
|
|
#define IMVFBSET 15
|
|
|
|
#define IMVFBSOURCE 3
|
|
#define IMVFBPATTERN 5
|
|
#define IMVFBNSOURCE 12
|
|
#define IMVFBNPATTERN 10
|
|
|
|
#define IMVFBAND 1
|
|
#define IMVFBNAND 14
|
|
|
|
#define IMVFBOR 7
|
|
#define IMVFBXOR 6
|
|
#define IMVFBNOR 8
|
|
#define IMVFBNXOR 9
|
|
|
|
#define IMVFBINSIDE 0
|
|
#define IMVFBOUTSIDE 1
|
|
|
|
#define IMGRADNONE 0
|
|
#define IMGRADHORIZ 1
|
|
#define IMGRADVERT 2
|
|
|
|
#define IMVFBPRINTFLOAT (1<<0)
|
|
#define IMVFBPRINTINT (1<<1)
|
|
#define IMVFBPRINTINTFLOAT (IMVFBPRINTFLOAT|IMVFBPRINTINT)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMVFB... - flip directions
|
|
*
|
|
* DESCRIPTION
|
|
* These constants are used to select flip directions in ImVfbFlip().
|
|
*/
|
|
|
|
#define IMVFBXFLIP 0x1 /* X direction */
|
|
#define IMVFBYFLIP 0x2 /* Y direction */
|
|
#define IMVFBXYFLIP ( IMVFBXFLIP | IMVFBYFLIP ) /* Both */
|
|
#define IMVFBLEFTRIGHT IMVFBXFLIP
|
|
#define IMVFBUPDOWN IMVFBYFLIP
|
|
#define IMVFBLEFTRIGHTUPDOWN IMVFBXYFLIP
|
|
/* 0x4-0xFFFFFFFF Reserved */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMVFB... - resolution change algorithms
|
|
*
|
|
* DESCRIPTION
|
|
* These constants select the algorithm to use when changing the
|
|
* resolution of an image using ImVfbResize().
|
|
*/
|
|
|
|
#define IMVFBPIXELREP 0 /* Pixel replecation */
|
|
#define IMVFBBILINEAR 1 /* Bilinear interpolation */
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MACROS
|
|
* Im... - function pseudonims
|
|
*
|
|
* DESCRIPTION
|
|
* These macros are defiend to support various names for the same
|
|
* function, such as 'gray' vs. 'grey'.
|
|
*/
|
|
|
|
#define ImVfbToGrey ImVfbToGray
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMERRORFATAL - fatal error
|
|
* IMERRORWARNING - warning error
|
|
* IMERRORINFO - information error
|
|
*
|
|
* DESCRIPTION
|
|
* These three values flag the type of error causing the invocation of
|
|
* an error handler (nominated via the flagsTable).
|
|
*/
|
|
|
|
#define IMERRORFATAL 0
|
|
#define IMERRORWARNING 1
|
|
#define IMERRORINFO 2
|
|
/* 3-2^32 Reserved */
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANT
|
|
* IMMAXNAME - maximum format name size
|
|
* IMDEFMONOTHRESH - default monochrome threshold
|
|
*/
|
|
|
|
#define IMMAXNAME 100
|
|
#define IMDEFMONOTHRESH 127
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* STRUCT & TYPEDEF
|
|
* ImHistTable - histogram information table
|
|
*
|
|
* DESCRIPTION
|
|
* ImVfbHist( ) computes a field-correlated histogram on an image
|
|
* and returns occurrence counts for each unique field value or
|
|
* combination of field values. That list of occurrence counts and
|
|
* unique values is returned in an ImHistTable structure.
|
|
*
|
|
* For example, a histogram is computed on the RED and GREEN fields
|
|
* of an image. The returned ImHistTable will have:
|
|
*
|
|
* imhist_nEntries
|
|
* The number of unique RED-GREEN color combinations found.
|
|
* imhist_fieldMask
|
|
* A bitmask mask of the fields checked: IMRED | IMGREEN
|
|
* imhist_nFields
|
|
* The number of fields checked... in this case 2: RED & GREEN.
|
|
* imhist_values[IMHISTRED]
|
|
* A list of imhist_nEntries red values as part of the RED-GREEN
|
|
* combo.
|
|
* imhist_values[IMHISTGREEN]
|
|
* A list of imhist_nEntries green values as part of the RED-GREEN
|
|
* combo.
|
|
* imhist_values[all others]
|
|
* NULL pointers because these fields were not part of the
|
|
* histogram calcuation requested.
|
|
* imhist_nOccur
|
|
* A list of the occurrence counts for each of the RED-GREEN
|
|
* pairs listed in imhist_values[IMHISTRED] and
|
|
* imhist_values[IMHISTGREEN]. This list will be sorted from
|
|
* high to low, if requested on the call to ImVfbHist( ).
|
|
*
|
|
* This information could be plotted by the user on a graph where the
|
|
* vertical axis is an occurrence count, and the horizontal axis is
|
|
* each RED-GREEN color combo listed one at a time. The imhist_nOccur
|
|
* value for each RED-GREEN pair would be the height of a data point
|
|
* for the horizontal position of the RED-GREEN pair on the graph.
|
|
*
|
|
* Such graphs are more typically used on single-field histograms,
|
|
* such as just the RED field, or just the HUE field, or whatever.
|
|
* In that case, occurrences would be the vertical axis, and the field
|
|
* value the horizontal axis. For example, a histogram of RED in an
|
|
* image would produce a graph like the following:
|
|
*
|
|
* 100 -| * *
|
|
* | *
|
|
* 80 -| **
|
|
* | * * *
|
|
* 60 -| * * *
|
|
* | * *
|
|
* 40 -|* *
|
|
* | * * * * *
|
|
* 20 -| * * * *
|
|
* | * * ****** * * ***** ***************** ** ***
|
|
* 0 -|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|-|
|
|
* 0 32 64 96 128 160 192 224 256
|
|
*
|
|
* This kind of graph of histogram values shows us that this example
|
|
* image has a fair amount of bright red (right end of graph) quite a bit
|
|
* of low-midrange red (middle of graph) and a bit of dark red (left
|
|
* edge of graph). The blank spots in the graph are red values that do
|
|
* not occur in the image (the *'s along the bottom of the graph show
|
|
* occurrence values of 0).
|
|
*/
|
|
|
|
#define IMMAXFIELDS 20
|
|
typedef struct ImHistTable
|
|
{
|
|
int imhist_nEntries; /* Number of unique colors in table*/
|
|
int imhist_fieldMask; /* Fields for histogram */
|
|
int imhist_nFields; /* Number of fields for histogram*/
|
|
union
|
|
{
|
|
unsigned short *imhist_val16; /* list for index16 numbers */
|
|
unsigned char *imhist_val8; /* list for rgba & index8 #s*/
|
|
float *imhist_valFloat;/* list for hue, sat, intensity nums*/
|
|
} imhist_values[IMMAXFIELDS];
|
|
unsigned int *imhist_nOccur; /* list of occurrence counts */
|
|
} ImHistTable;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMHIST... - histogram table array index names
|
|
* imhist_... - histogram table union field names
|
|
*
|
|
* DESCRIPTION
|
|
* Values in an ImHistTable returned by ImVfbHist( ) are indexed through
|
|
* the imhist_values field. Indexes are named for fields on which the
|
|
* histogram may have been done.
|
|
*
|
|
* To provide a more intuitive look to code using a ImHistTable, the
|
|
* fields in the union are given names for quick reference.
|
|
*/
|
|
#define IMHISTRED 0
|
|
#define IMHISTGREEN 1
|
|
#define IMHISTBLUE 2
|
|
#define IMHISTALPHA 3
|
|
#define IMHISTHUE 4
|
|
#define IMHISTSATURATION 5
|
|
#define IMHISTINTENSITY 6
|
|
#define IMHISTINDEX8 7
|
|
#define IMHISTGRAY 7
|
|
#define IMHISTGREY 7
|
|
#define IMHISTINDEX16 8
|
|
#define IMHISTMONO 9
|
|
|
|
#define imhist_red imhist_values[IMHISTRED].imhist_val8
|
|
#define imhist_blue imhist_values[IMHISTBLUE].imhist_val8
|
|
#define imhist_green imhist_values[IMHISTGREEN].imhist_val8
|
|
#define imhist_alpha imhist_values[IMHISTALPHA].imhist_val8
|
|
#define imhist_hue imhist_values[IMHISTHUE].imhist_valFloat
|
|
#define imhist_saturation imhist_values[IMHISTSATURATION].imhist_valFloat
|
|
#define imhist_intensity imhist_values[IMHISTINTENSITY].imhist_valFloat
|
|
#define imhist_gray imhist_values[IMHISTINDEX8].imhist_val8
|
|
#define imhist_grey imhist_values[IMHISTINDEX8].imhist_val8
|
|
#define imhist_index8 imhist_values[IMHISTINDEX8].imhist_val8
|
|
#define imhist_index16 imhist_values[IMHISTINDEX16].imhist_val16
|
|
#define imhist_mono imhist_values[IMHISTMONO].imhist_val8
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* CONSTANTS
|
|
* IMMAXIMUM - computed maximum field value
|
|
* IMMINIMUM - computed minimum field value
|
|
* IMUNIQUEVAL - computed number of unique field values
|
|
* IMMAXNUMSTATS - number of statistics returned by ImVfbStat
|
|
*
|
|
* DESCRIPTION
|
|
* ImVfbStat( ) computes simple statistics on a single pixel field in
|
|
* an image. Statistics are returned in a floating point array of
|
|
* IMMAXNUMSTATS entries. Individual statistics are obtained by
|
|
* indexing into this array using IMMAXIMUM, etc.
|
|
*/
|
|
#define IMMAXIMUM 0
|
|
#define IMMINIMUM 1
|
|
#define IMUNIQUEVAL 2
|
|
#define IMMAXNUMSTATS 20
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* TYPEDEF & STRUCTURE
|
|
* ImHotSpot - image hotspot
|
|
*
|
|
* DESCRIPTION
|
|
* ImHotSpot contains a cursor hotspot: the point on a cursor image
|
|
* that corresponds to the cursor's location for picking purposes.
|
|
* For instance, this would be the point of an arrow cursor, the tip
|
|
* of a pencil cursor, or the end of the stinger on a bumble-bee cursor!
|
|
*
|
|
* ImHotSpot contains the cursor's hotspot location, as measured from
|
|
* the upper-left corner (0,0) of the image, in pixels.
|
|
*/
|
|
|
|
typedef struct ImHotSpot
|
|
{
|
|
int hot_x; /* x coordinate of hotspot */
|
|
int hot_y; /* y coordinate of hotspot */
|
|
} ImHotSpot;
|
|
|
|
typedef ImHotSpot *ImHotSpotPtr;
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
* MACROS
|
|
* ImHotSpot... - set and query HotSpot attributes
|
|
*
|
|
* DESCRIPTION
|
|
* These macros, masquerading as subroutines, take a HotSpot pointer
|
|
* and set or query information from it.
|
|
*/
|
|
|
|
#define ImHotSpotQX( hs ) ( (hs)->hot_x )
|
|
#define ImHotSpotQY( hs ) ( (hs)->hot_y )
|
|
#define ImHotSpotSX( hs, xcoord ) ( (hs)->hot_x = (int) xcoord )
|
|
#define ImHotSpotSY( hs, ycoord ) ( (hs)->hot_y = (int) ycoord )
|
|
|
|
|
|
|
|
|
|
/*
|
|
* FUNCTIONS
|
|
* Im... - Generic functions
|
|
* ImClt... - CLT functions
|
|
* ImVfb... - VFB functions
|
|
* ImFile... - File I/O functions
|
|
*/
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#ifdef __STDC__
|
|
extern void ImPError( char * );
|
|
extern char *ImQError( void );
|
|
|
|
extern void ImRgbToHsi( int[3], float[3] );
|
|
extern void ImHsiToRgb( float[3], int[3] );
|
|
|
|
extern ImClt *ImCltAlloc( int );
|
|
extern void ImCltFree( ImClt * );
|
|
extern ImClt *ImCltDup( ImClt * );
|
|
extern ImClt *ImCltGrayRamp( ImClt *, int, int, int, int, ImClt * );
|
|
extern ImClt *ImCltRoll( ImClt *, int, ImClt * );
|
|
|
|
extern ImVfb *ImVfbAdjust( ImVfb *, int, double, double, int, int, double, double, ImVfb * );
|
|
extern ImVfb *ImVfbAlloc( int, int, int );
|
|
extern ImVfb *ImVfbClear( int, int, ImVfb * );
|
|
extern ImVfb *ImVfbComp( ImVfb *, int, int, int, int, int, int, ImVfb *, int, int );
|
|
extern ImVfb *ImVfbCopy( ImVfb *, int, int, int, int, int, ImVfb *, int, int );
|
|
extern ImVfb *ImVfbDup( ImVfb * );
|
|
extern ImVfb *ImVfbFade( ImVfb *, double, int, ImVfb * );
|
|
extern ImVfb *ImVfbFill( ImVfb *, int, int, int, int, int, double, double, int, int, ImVfb * );
|
|
extern ImVfb *ImVfbFlip( ImVfb *, int, ImVfb * );
|
|
extern void ImVfbFree( ImVfb * );
|
|
extern ImHistTable *ImVfbHist( ImVfb *, int, int );
|
|
extern void ImVfbHistTableFree( ImHistTable * );
|
|
extern ImVfb *ImVfbLightness( ImVfb *, double, ImVfb * );
|
|
extern ImVfb *ImVfbMix( ImVfb *, double, ImVfb *, double, int, ImVfb * );
|
|
extern ImVfb *ImVfbResize( ImVfb *, int, ImVfb *, int, int );
|
|
extern ImVfb *ImVfbRoll( ImVfb *, int, int, ImVfb * );
|
|
extern ImVfb *ImVfbRotate( ImVfb *, double, ImVfb * );
|
|
extern ImVfb *ImVfb90Rotate( ImVfb *, ImVfb * );
|
|
extern float *ImVfbStat( ImVfb *, int, float * );
|
|
extern ImVfb *ImVfbToIndex( ImVfb *, int, ImVfb * );
|
|
extern ImVfb *ImVfbToIndex8( ImVfb *, ImVfb * );
|
|
extern ImVfb *ImVfbToIndex16( ImVfb *, ImVfb * );
|
|
extern ImVfb *ImVfbToMono( ImVfb *, int, ImVfb * );
|
|
extern ImVfb *ImVfbFSDitherToMono( ImVfb *, ImVfb * );
|
|
extern ImVfb *ImVfbToRgb( ImVfb *, ImVfb * );
|
|
extern ImVfb *ImVfbToGray( ImVfb *, ImVfb * );
|
|
extern ImVfb *ImVfbXShear( ImVfb *, double, ImVfb * );
|
|
extern ImVfb *ImVfbYShear( ImVfb *, double, ImVfb * );
|
|
extern void ImVfbPrint( FILE*, int, ImVfb* );
|
|
extern ImVfb *ImVfbCopyChannel( ImVfb* inVfb, int inFieldMask, ImVfb* outVfb, int outFieldMask);
|
|
|
|
|
|
extern int ImFileRead( int, char *, TagTable *, TagTable * );
|
|
extern int ImFileFRead( FILE *, char *, TagTable *, TagTable * );
|
|
extern int ImFileWrite( int, char *, TagTable *, TagTable * );
|
|
extern int ImFileFWrite( FILE *, char *, TagTable *, TagTable * );
|
|
extern char *ImFileQFormat( int, char * );
|
|
extern char *ImFileQFFormat( FILE *, char * );
|
|
extern int ImFileQNFormat( void );
|
|
extern int ImFileFormatOptions( int, ArgOption *, ArgOption ** );
|
|
extern int ImFileFormatEquivs( int, ArgEquiv *, ArgEquiv ** );
|
|
extern ImFileFormat **ImFileFindFormat( char * );
|
|
extern char *ImFileQCompression(int , TagTable* );
|
|
extern char *ImFileQFCompression(FILE* , TagTable* );
|
|
ImCompressScheme *ImFileFindCompressionScheme( char* );
|
|
|
|
extern ImFileFormat **ImGetFileFormats( void );
|
|
extern ImCompressScheme**ImGetCompressSchemes( void );
|
|
|
|
#else
|
|
|
|
extern void ImPError( );
|
|
extern char *ImQError( );
|
|
|
|
extern void ImRgbToHsi( );
|
|
extern void ImHsiToRgb( );
|
|
|
|
extern ImClt *ImCltAlloc( );
|
|
extern void ImCltFree( );
|
|
extern ImClt *ImCltDup( );
|
|
extern ImClt *ImCltGrayRamp( );
|
|
extern ImClt *ImCltRoll( );
|
|
|
|
extern ImVfb *ImVfbAdjust( );
|
|
extern ImVfb *ImVfbAlloc( );
|
|
extern ImVfb *ImVfbClear( );
|
|
extern ImVfb *ImVfbComp( );
|
|
extern ImVfb *ImVfbCopy( );
|
|
extern ImVfb *ImVfbDup( );
|
|
extern ImVfb *ImVfbFade( );
|
|
extern ImVfb *ImVfbFill( );
|
|
extern ImVfb *ImVfbFlip( );
|
|
extern void ImVfbFree( );
|
|
extern ImVfb *ImVfbGamma( );
|
|
extern ImHistTable *ImVfbHist( );
|
|
extern void ImVfbHistTableFree( );
|
|
extern ImVfb *ImVfbLightness( );
|
|
extern ImVfb *ImVfbMix( );
|
|
extern ImVfb *ImVfbResize( );
|
|
extern ImVfb *ImVfbRoll( );
|
|
extern ImVfb *ImVfbRotate( );
|
|
extern ImVfb *ImVfb90Rotate( );
|
|
extern float *ImVfbStat( );
|
|
extern ImVfb *ImVfbToIndex( );
|
|
extern ImVfb *ImVfbToIndex8( );
|
|
extern ImVfb *ImVfbToIndex16( );
|
|
extern ImVfb *ImVfbFSDitherToMono( );
|
|
extern ImVfb *ImVfbToMono( );
|
|
extern ImVfb *ImVfbToRgb( );
|
|
extern ImVfb *ImVfbToGray( );
|
|
extern ImVfb *ImVfbXShear( );
|
|
extern ImVfb *ImVfbYShear( );
|
|
extern void ImVfbPrint( );
|
|
extern ImVfb *ImVfbCopyChannel( );
|
|
|
|
extern int ImFileRead( );
|
|
extern int ImFileFRead( );
|
|
extern int ImFileWrite( );
|
|
extern int ImFileFWrite( );
|
|
extern char *ImFileQFormat( );
|
|
extern char *ImFileQFFormat( );
|
|
extern int ImFileQNFormat( );
|
|
extern int ImFileFormatOptions( );
|
|
extern int ImFileFormatEquivs( );
|
|
extern ImFileFormat **ImFileFindFormat( );
|
|
extern char *ImFileQCompression( );
|
|
extern ImCompressScheme *ImFileFindCompressionScheme( );
|
|
|
|
extern ImFileFormat **ImGetFileFormats( );
|
|
extern ImCompressScheme**ImGetCompressSchemes( );
|
|
|
|
#endif
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif /* __IMH__ */
|
|
|