windows-nt/Source/XPSP1/NT/shell/osshell/accesory/mspaint/image.h
2020-09-26 16:20:57 +08:00

508 lines
17 KiB
C

//***************************************************************************
//
// 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
/////////////////////////////////////////////////////////////////////////////