|
|
//***************************************************************************
//
// IMAGE.h
//
// Proposed new interface!
//
// Include file for the Image API Library.
// This is the external containing header data required
// by the outside world.
//
// Revision History
// 17-Nov-95 TerryJ Original
// 04-Jan-96 TerryJ Code cleaned up. Memory mode added.
// 16-Jan-96 TerryJ Registry validation capacity added.
//
//
//***************************************************************************
#ifndef _IMAGEFILELIB_H
#define _IMAGEFILELIB_H
#include "msffdefs.h" //include platform dependent defs
#ifdef _MAC
#include <Macname1.h>
#include "Types.h"
#include "Files.h"
#include <Macname2.h>
#endif // _MAC
#ifdef __cplusplus
extern "C" { // Assume C declarations for C++
#endif // __cplusplus
/***********
| IFLMODE: Open modes \***********/ typedef enum { IFLM_READ =0x00, IFLM_WRITE =0x01, IFLM_MEMORY =0x80, // OR to operate in memory
IFLM_EXTRACT_ALPHA =0x40, // OR to extract separate image and alpha channel info
IFLM_CHUNKY_ALPHA =0x20, //OR to extract RGBA chunky data
} IFLMODE;
/***********
| IFLCLASS: Image classes \***********/ typedef enum { IFLCL_BILEVEL = 0, // 1 BPP
IFLCL_GRAY = 1, // 2,4,6,8 BPP
IFLCL_GRAYA =11, // 16 BPP chunky
IFLCL_PALETTE = 2, // 2,4,6,8 BPP
IFLCL_RGB = 3, // 24 BPP chunky
IFLCL_RGBPLANAR = 4, // 24 BPP in 8 bit planes
IFLCL_RGBA = 5, // 32 BPP chunky
IFLCL_RGBAPLANAR = 6, // 32 BPP in four 8 bit planes
IFLCL_CMYK = 7, IFLCL_YCC = 8, IFLCL_CIELAB = 9, IFLCL_NONE =10 // no class set! (error)
} IFLCLASS;
typedef enum { IFLTF_NONE =0, IFLTF_STRIPS =1, IFLTF_TILES =2 } IFLTILEFORMAT;
/***********
| IFLCOMMAND: Commands to IFL_Control \***********/ typedef enum { IFLCMD_GETERROR =0, // get error code
IFLCMD_GETLINESIZE =1, // compute line size
IFLCMD_PALETTE =2, // get or set palette or map
IFLCMD_SETPACKMODE =3, // set mode for packing/unpacking pixels
IFLCMD_RESOLUTION =7, // get dots per meter
IFLCMD_GETNUMIMAGES =10, // get the number of images
IFLCMD_IMAGESEEK =11, // seek to the next image
IFLCMD_DELETE =12, // delete current image
IFLCMD_TILEFORMAT =13, // set/get the tiling format
IFLCMD_YCCINFO =14, // set/get YCC information
IFLCMD_YCCRGBCONVERT =15, // set/get YCC/RGB conversion state
IFLCMD_COLORIMETRY =16, // set/get Colorimetry info
IFLCMD_CMYKINFO =17, // set/get CMYK specific data
IFLCMD_BKGD_IDX =18, // set/get background color by index
IFLCMD_BKGD_RGB =19, // set/get background color
IFLCMD_TRANS_IDX =20, // set/get transparency color index
IFLCMD_TRANS_RGB =21, // set/get transparency color
IFLCMD_TRANS_MASK_INFO =22, // set/get transparency mask info
IFLCMD_TRANS_MASK =23, // set/get transparency mask
IFLCMD_ALPHA_PALETTE_INFO =24, // set/get alpha palette info
IFLCMD_ALPHA_PALETTE =25, // set/get alpha palette
IFLCMD_ALPHA_CHANNEL_INFO =26, // set/get alpha channel info
IFLCMD_ALPHA_CHANNEL =27, // set/get alpha channel
IFLCMD_GAMMA_VALUE =28, // set/get gamma value
IFLCMD_FIRST_TEXT =29, // get first text string
IFLCMD_NEXT_TEXT =30, // get next text strings.
IFLCMD_DATETIME_STRUCT =31, // retrieve date/time as a structure.
IFLCMD_TIFF =0x4000, // TIFF specific commands
IFLCMD_TIFFTAG =0x4001, IFLCMD_TIFFTAGDATA =0x4002, IFLCMD_PCX =0x4200, // PCX specific commands
IFLCMD_BMP =0x4400, // BMP specific commands
IFLCMD_BMP_VERSION =0x4401, // Windows os2 1.2 os2 2.0 versions
IFLCMD_TGA =0x4800, // TGA specific commands
IFLCMD_GIF =0x4E00, // GIF specific commands
IFLCMD_GIF_WHITE_IS_ZERO =0x4E01, // White == 0 in GIF file
IFLCMD_JPEG =0x5700, // WPG specific commands
IFLCMD_JPEGQ =0x5701, // Quality
IFLCMD_PCD =0x5800, // Kodak PCD specific commands
IFLCMD_PCDGETTRANSFORM =0x5801, IFLCMD_PCDSETTRANSFORM =0x5802, IFLCMD_PCDSETCLASS =0x5803, IFLCMD_PNG =0x5900, // PNG specific commands
IFLCMD_PNG_SET_FILTER =0x590A, // Set PNG filter type
IFLCMD_PNG_sBIT =0x590B, // set/get PNG sBIT chunk
IFLCMD_GETDATASIZE =0x8000 // OR with this to get the size
} IFLCOMMAND;
typedef IFLCOMMAND IFLCMD; // this is done as backwards
// compatibility and may be able
// to be eliminated eventually
/***********
| IFLDESC: Available description strings (use as bitfields) \***********/ typedef enum { IFLDESC_NONE =0, // no descriptions supported
IFLDESC_DESCRIPTION =1, // image description field (TIFF TGA PNG)
IFLDESC_SOFTWARENAME =2, // software name (TIFF TGA) Software (PNG)
IFLDESC_ARTISTNAME =4, // artist name (TIFF TGA) Author (PNG)
IFLDESC_DOCUMENTNAME =8, // the document name field Title (PNG)
IFLDESC_DATETIME =16, // the date/time field
IFLDESC_COPYRIGHT =32, // copyright notice (PNG)
IFLDESC_DISCLAIMER =64, // Legal disclaimer (PNG)
IFLDESC_WARNING =128, // content warning (PNG)
IFLDESC_SOURCE =256, // source device (PNG)
IFLDESC_COMMENT =512, // misc comment (PNG)
} IFLDESC;
/***********
| IFLPACKMODE: Packing modes \***********/ typedef enum { IFLPM_PACKED =0, IFLPM_UNPACKED =1, IFLPM_LEFTJUSTIFIED =2, IFLPM_NORMALIZED =3, IFLPM_RAW =4 } IFLPACKMODE;
/***********
| IFLSEQUENCE: Line sequences \***********/ typedef enum { IFLSEQ_TOPDOWN =0, // most
IFLSEQ_BOTTOMUP =1, // BMP and TGA compressed
IFLSEQ_GIF_INTERLACED =2, // for GIF
IFLSEQ_ADAM7_INTERLACED = 3 // for PNG
} IFLSEQUENCE;
/***********
| IFLERROR: Possible errors \***********/ typedef enum { IFLERR_NONE =0, // no error
IFLERR_HANDLELIMIT =1, // too many open files
IFLERR_PARAMETER =2, // programmer error
IFLERR_NOTSUPPORTED =3, // feature not supported by format
IFLERR_NOTAVAILABLE =4, // item not available
IFLERR_MEMORY =5, // insufficient memory
IFLERR_IMAGE =6, // bad image data (decompression error)
IFLERR_HEADER =7, // header has bad fields
IFLERR_IO_OPEN =8, // error on open()
IFLERR_IO_CLOSE =9, // error on close()
IFLERR_IO_READ =10, // error on read()
IFLERR_IO_WRITE =11, // error on write()
IFLERR_IO_SEEK =12, // error on lseek()
} IFLERROR;
typedef enum // new error messages to go here. This error
// info is maintained here rather than IFLERROR
// to retain backwards compatibility
{ IFLEXTERR_NONE, IFLEXTERR_NO_DLL, // open
IFLEXTERR_NO_LIBRARY, // open: no library specified
IFLEXTERR_BAD_DLL, // DLL doesn't have right entry points
IFLEXTERR_CANNOT_IMPORT, // open
IFLEXTERR_CANNOT_EXPORT, // open
IFLEXTERR_CANNOT_COMPRESS, // open
IFLEXTERR_BAD_FORMAT, // read
IFLEXTERR_UNKNOWN_VARIANT, // open/read: for example, JFIFs and
// BMPs have many variants - some may
// not be supported
IFLEXTERR_SHARING_VIOLATION, // read
IFLEXTERR_NO_BACKGROUND_COLOR, // read: no background color specified
// when doing transparencies
IFLEXTERR_BACKGROUND_NOT_SUPPORTED, // background colors not supported
// (currently) by this format
IFLEXTERR_NO_FILE, // file doesn't exist
IFLEXTERR_END_OF_FILE, // read
IFLEXTERR_MEMORY, // insufficient memory
IFLEXTERR_DESC_CANNOT_GET, // file is write mode: can't get descriptions
IFLEXTERR_DESC_CANNOT_SET, // file is read mode: can't set descriptions
IFLEXTERR_NO_PATH_IN_REGISTRY, // the filter path isn't in the registry
IFLEXTERR_NOT_IFL_HANDLE, // the pointer passed isn't an IFLHANDLE
IFLEXTERR_REGISTRY_DAMAGED, // entry in registry not correct format
IFLEXTERR_BAD_COMPRESSION, // error in data compression; cannot read.
} IFLEXTERROR;
/***********
| IFLCOMPRESSION: Compression options \***********/ typedef enum { IFLCOMP_NONE =0, // no compression
IFLCOMP_DEFAULT =1, // whatever is defined for the format
IFLCOMP_RLE =2, // various RLE schemes (PACKBITS in TIFF)
IFLCOMP_CCITT1D =3, // TIFF modified G3
IFLCOMP_CCITTG3 =4, // TIFF raw G3
IFLCOMP_CCITTG4 =5, // TIFF G4
IFLCOMP_LZW =6, // Lempel-Zif
IFLCOMP_LZWHPRED =7, // LZW with TIFF horizontal differencing
IFLCOMP_JPEG =8 // JPEG compression
} IFLCOMPRESSION;
/***********
| Date Time structure for IFL \***********/ typedef struct { short Year; short Month; short Day; short Hour; short Minute; short Second; } IFL_DATETIME;
/***********
| RGB color structure for IFL \***********/ typedef struct // rgb color values
{ BYTE bRed; BYTE bGreen; BYTE bBlue; } IFLCOLORRGB;
typedef struct // new color struct capable of 16 bit values.
{ WORD wRed; WORD wGreen; WORD wBlue; } IFLCOLOR;
/***********
| Types for multiple images \***********/ typedef enum { IFLIT_PRIMARY =0, IFLIT_THUMBNAIL =1, IFLIT_MASK =2 } IFLIMAGETYPE;
/***********
| Bitmap types \***********/ typedef enum { IFLBV_WIN_3 =0x10, // Windows 3.x
IFLBV_OS2_1 =0x20, // OS2 1.2
IFLBV_OS2_2S =0x40, // OS2 2.0 single image
IFLBV_OS2_2M =0x41 // OS2 2.0 multiple image
} IFLBMPVERSION;
/***********
| Capabilities Type, for interpreting Registry info \***********/ typedef enum { IFLCAP_NOT_AVAILABLE =0x0000, // if option not available
// ** compression options **
IFLCAP_COMPNONE =0x0001, IFLCAP_COMPRLE =0x0002, IFLCAP_COMPG3 =0x0004, IFLCAP_COMPG4 =0x0008, IFLCAP_COMPLZW =0x0010, IFLCAP_COMPLZWPRED =0x0020, IFLCAP_COMPJPEG =0x0040, IFLCAP_COMPDEFAULT =0x0080,
// ** bit plane options ** // note that for RGB, RGB QUAD
IFLCAP_1BPP =0x0001, // and RGBA bit plane depth must
IFLCAP_2BPP =0x0002, // be multiplied by 3, 4 and 4
IFLCAP_3BPP =0x0004, // respectively for the full
IFLCAP_4BPP =0x0008, // pixel depth size.
IFLCAP_5BPP =0x0010, IFLCAP_6BPP =0x0020, IFLCAP_7BPP =0x0040, IFLCAP_8BPP =0x0080, IFLCAP_8BPP_QUAD =0x0100, IFLCAP_12BPP =0x0200, IFLCAP_16BPP =0x0400,
// ** Transparency options
IFLCAP_NO_TRANS =0x0000, IFLCAP_1BITMASK =0x0001, IFLCAP_ALPHACHANNEL =0x0002, IFLCAP_ALPHAPALETTE =0x0004, IFLCAP_TRANSCOLOR =0x0008,
} IFLCAPABILITIES;
/***********
| Alpha/Transparency info structs \***********/
typedef struct { DWORD dwWidth; DWORD dwHeight; } IFL_TRANS_MASK_INFO;
typedef struct { DWORD dwWidth; DWORD dwHeight; WORD wBitsPerPixel; } IFL_ALPHA_CHANNEL_INFO;
typedef struct { char *szKey; char *szText; } IFL_COMMENT_STRING;
typedef struct { unsigned char bPNGType; unsigned char bGrayBits; unsigned char bRedBits; unsigned char bGreenBits; unsigned char bBlueBits; unsigned char bAlphaBits; } IFLPNGsBIT;
/***********
| Handle types | Use FILTERHANDLE to access filters \***********/
typedef void far * IFLHANDLE; // handle is a void pointer to hide the
// details of the file handle from other
// programmers.
/* -------- new stuff ---------------------- */
typedef enum { IFLT_UNKNOWN, // unknown or unsupported file type
IFLT_GIF, IFLT_BMP, IFLT_JPEG, IFLT_TIFF, IFLT_PNG, IFLT_PCD, IFLT_PCX, IFLT_TGA, IFLT_PICT } IFLTYPE;
/***********
| IFL virtual (memory) mode types \***********/
// internal virtual (memory) file i/o routine pointers
typedef int (__cdecl _vopen) (LPSTR, int, int); typedef int (__cdecl _vclose) (int); typedef int (__cdecl _vread) (int, LPVOID, int); typedef int (__cdecl _vwrite) (int, LPVOID, int); typedef long (__cdecl _vlseek) (int, long, int);
// structure used to hold virtual (memory) i/o functions
// when using IFLM_MEMORY mode.
typedef struct ImageIOFuncs { _vopen *vopen; _vclose *vclose; _vread *vread; _vwrite *vwrite; _vlseek *vlseek;
LPVOID userdata; } IFLIOF, far * LPIFLIOF;
// structure used to hold virtual (memory) memory info
// when using IFLM_MEMORY mode.
typedef struct ImageMemStruct { long pos; long alloced; long length; LPVOID data; } IFLIOM, far * LPIFLIOM;
/***********
| IFL function prototypes \***********/ IFLERROR HILAPI iflOpen(IFLHANDLE iflh, LPSTR FileName, IFLMODE Mode); IFLERROR HILAPI iflClose(IFLHANDLE iflh); IFLERROR HILAPI iflRead(IFLHANDLE iflh, LPBYTE Buffer, int NumLines); IFLERROR HILAPI iflWrite(IFLHANDLE iflh, LPBYTE Buffer, int NumLines); IFLERROR HILAPI iflSeek(IFLHANDLE iflh, int Line); IFLERROR HILAPI iflControl(IFLHANDLE iflh, IFLCMD Command, short sParam, long lParam, LPVOID pParam);
// new commands (general)
IFLERROR HILAPI iflImageType(LPSTR FileName, IFLTYPE *ImageType); IFLTYPE HILAPI iflTypeFromExtension (char far * Filename); void iflGetLibName(IFLTYPE fileType, LPSTR libName); IFLERROR HILAPI iflFilterCap(IFLTYPE ImageType, IFLCLASS ImageClass, WORD *Color, WORD *Compression, WORD *Transparency); IFLERROR HILAPI iflInstalledFilterQuery(IFLTYPE filterType, BOOL *bImports, BOOL *bExports); IFLERROR HILAPI iflExtensionCount(IFLTYPE filterType, short *sCount); IFLERROR HILAPI iflExtensionQuery(IFLTYPE filterType, short sExtNum, LPSTR szExtension); IFLERROR HILAPI iflFormatNameQuery(IFLTYPE filterType, LPSTR szFormatName, short sFormatNameSize); IFLEXTERROR HILAPI iflGetExtendedError(IFLHANDLE iflh);
// description manipulation
IFLERROR HILAPI iflGetDesc(IFLHANDLE iflh, IFLDESC DescType, LPSTR *pDescription); IFLERROR HILAPI iflPutDesc(IFLHANDLE iflh, IFLDESC DescType, LPSTR Description); IFLERROR HILAPI iflSupportedDesc(IFLHANDLE iflh, IFLDESC *Supports);
// handle manipulation
IFLHANDLE HILAPI iflCreateReadHandle( IFLTYPE ImageType); IFLHANDLE HILAPI iflCreateWriteHandle(int Width, // Width of image in pixels
int Height, // Height of image in pixels
IFLCLASS ImageClass, // image class
int BitsPerSample, // Number of bits per sample
IFLCOMPRESSION Compression, // defined above
IFLTYPE ImageType // Type of image (GIF, PCX, etc)
); IFLERROR HILAPI iflFreeHandle(IFLHANDLE iflh);
// background manipulation
IFLERROR HILAPI iflGetBackgroundColor(IFLHANDLE iflh, IFLCOLOR *clBackColor); IFLERROR HILAPI iflSetBackgroundColor(IFLHANDLE iflh, IFLCOLOR clBackColor); IFLERROR HILAPI iflSetBackgroundColorByIndex(IFLHANDLE iflh, short iColorIndex);
// accessors and manipulators
#ifdef _MAC
IFLERROR HILAPI iflSetMacCreator(OSType OSCreator); #endif // _MAC
IFLCLASS HILAPI iflGetClass(IFLHANDLE iflh); int HILAPI iflGetHeight(IFLHANDLE iflh); int HILAPI iflGetWidth(IFLHANDLE iflh); int HILAPI iflGetRasterLineCount(IFLHANDLE iflh); IFLSEQUENCE HILAPI iflGetSequence(IFLHANDLE iflh); IFLERROR HILAPI iflSetSequence(IFLHANDLE iflh, IFLSEQUENCE iflsSeq); IFLCOMPRESSION HILAPI iflGetCompression(IFLHANDLE iflh); int HILAPI iflGetBitsPerChannel(IFLHANDLE iflh); int HILAPI iflGetBitsPerPixel(IFLHANDLE iflh); IFLTYPE HILAPI iflGetImageType(IFLHANDLE iflh);
#ifdef __cplusplus
} #endif // __cplusplus
#endif // _IMAGEFILELIB_H
/////////////////////////////////////////////////////////////////////////////
|