📄 twain.h
字号:
/****************************************************************************
*
* Copyright (C) 1991, 1992 TWAIN Working Group: Aldus, Caere, Eastman-Kodak,
* Hewlett-Packard and Logitech Corporations. All rights reserved.
*
* dc.h - This is the definitive include file for applications and
* data sources written to the TWAIN specification.
* It defines constants, data structures, messages etc.
* for the public interface to TWAIN.
*
* Revision History:
* version 1.0, March 6, 1992. TWAIN 1.0.
* version 1.1, January 1993. Tech Notes 1.1
* version 1.5, June 1993. Specification Update 1.5
* Change DC to TW
* Change filename from DC.H to TWAIN.H
* version 1.5, July 1993. Remove spaces from country identifiers
*
****************************************************************************/
#ifndef TWAIN
#define TWAIN
/* SDH - 02/08/95 - TWUNK */
/* Force 32-bit twain to use same packing of twain structures as existing */
/* 16-bit twain. This allows 16/32-bit thunking. */
//#ifdef WIN32
// #pragma pack (push, before_twain)
// #pragma pack (2)
//#else /* WIN32 */
//#endif /* WIN32 */
/****************************************************************************
* Platform Dependent Definitions and Typedefs *
****************************************************************************/
/* Define one of the following, depending on the platform */
/* #define _MAC_ */
/* #define _UNIX_ */
#define _MSWIN_
#ifdef _MSWIN_
typedef HANDLE TW_HANDLE;
typedef LPVOID TW_MEMREF;
/* SDH - 05/05/95 - TWUNK */
/* For common code between 16 and 32 bits. */
#ifdef WIN32
#define TW_HUGE
#else /* WIN32 */
#define TW_HUGE huge
#endif /* WIN32 */
typedef BYTE TW_HUGE * HPBYTE;
typedef void TW_HUGE * HPVOID;
#endif /* _MSWIN_ */
#ifdef _MAC_
#define PASCAL pascal
#define FAR
typedef Handle TW_HANDLE;
typedef char *TW_MEMREF;
#endif /* _MAC_ */
#ifdef _UNIX_
#define PASCAL pascal
typedef unsigned char *TW_HANDLE;
typedef unsigned char *TW_MEMREF;
#endif /* _UNIX_ */
/****************************************************************************
* Type Definitions *
****************************************************************************/
/* String types. These include room for the strings and a NULL char, *
* or, on the Mac, a length byte followed by the string. *
* TW_STR255 must hold less than 256 chars so length fits in first byte. */
typedef char TW_STR32[34], FAR *pTW_STR32;
typedef char TW_STR64[66], FAR *pTW_STR64;
typedef char TW_STR128[130], FAR *pTW_STR128;
typedef char TW_STR255[256], FAR *pTW_STR255;
/* Numeric types. */
typedef char TW_INT8, FAR *pTW_INT8;
typedef short TW_INT16, FAR *pTW_INT16;
typedef long TW_INT32, FAR *pTW_INT32;
typedef unsigned char TW_UINT8, FAR *pTW_UINT8;
typedef unsigned short TW_UINT16, FAR *pTW_UINT16;
typedef unsigned long TW_UINT32, FAR *pTW_UINT32;
typedef unsigned short TW_BOOL, FAR *pTW_BOOL;
/* Fixed point structure type. */
typedef struct {
TW_INT16 Whole; /* maintains the sign */
TW_UINT16 Frac;
} TW_FIX32, FAR *pTW_FIX32;
/****************************************************************************
* Structure Definitions *
****************************************************************************/
/* No DAT needed. */
typedef struct {
TW_FIX32 X;
TW_FIX32 Y;
TW_FIX32 Z;
} TW_CIEPOINT, FAR * pTW_CIEPOINT;
/* No DAT needed. */
typedef struct {
TW_FIX32 StartIn;
TW_FIX32 BreakIn;
TW_FIX32 EndIn;
TW_FIX32 StartOut;
TW_FIX32 BreakOut;
TW_FIX32 EndOut;
TW_FIX32 Gamma;
TW_FIX32 SampleCount; /* if =0 use the gamma */
} TW_DECODEFUNCTION, FAR * pTW_DECODEFUNCTION;
/* No DAT needed. */
typedef struct {
TW_UINT8 Index; /* Value used to index into the color table. */
TW_UINT8 Channel1; /* First tri-stimulus value (e.g Red) */
TW_UINT8 Channel2; /* Second tri-stimulus value (e.g Green) */
TW_UINT8 Channel3; /* Third tri-stimulus value (e.g Blue) */
} TW_ELEMENT8, FAR * pTW_ELEMENT8;
/* No DAT. Defines a frame rectangle in ICAP_UNITS coordinates. */
typedef struct {
TW_FIX32 Left;
TW_FIX32 Top;
TW_FIX32 Right;
TW_FIX32 Bottom;
} TW_FRAME, FAR * pTW_FRAME;
/* No DAT needed. Used to manage memory buffers. */
typedef struct {
TW_UINT32 Flags; /* Any combination of the TWMF_ constants. */
TW_UINT32 Length; /* Number of bytes stored in buffer TheMem. */
TW_MEMREF TheMem; /* Pointer or handle to the allocated memory buffer. */
} TW_MEMORY, FAR * pTW_MEMORY;
/* No DAT needed. */
typedef struct {
TW_DECODEFUNCTION Decode[3];
TW_FIX32 Mix[3][3];
} TW_TRANSFORMSTAGE, FAR * pTW_TRANSFORMSTAGE;
/* No DAT needed. Describes version of software that's running. */
typedef struct {
TW_UINT16 MajorNum; /* Major revision number of the software. */
TW_UINT16 MinorNum; /* Incremental revision number of the software. */
TW_UINT16 Language; /* e.g. TWLG_SWISSFRENCH */
TW_UINT16 Country; /* e.g. TWCY_SWITZERLAND */
TW_STR32 Info; /* e.g. "1.0b3 Beta release" */
} TW_VERSION, FAR * pTW_VERSION;
/* TWON_ARRAY. Container for array of values (a simplified TW_ENUMERATION) */
typedef struct {
TW_UINT16 ItemType;
TW_UINT32 NumItems; /* How many items in ItemList */
TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */
} TW_ARRAY, FAR * pTW_ARRAY;
/* TWON_ENUMERATION. Container for a collection of values. */
typedef struct {
TW_UINT16 ItemType;
TW_UINT32 NumItems; /* How many items in ItemList */
TW_UINT32 CurrentIndex; /* Current value is in ItemList[CurrentIndex] */
TW_UINT32 DefaultIndex; /* Powerup value is in ItemList[DefaultIndex] */
TW_UINT8 ItemList[1]; /* Array of ItemType values starts here */
} TW_ENUMERATION, FAR * pTW_ENUMERATION;
/* TWON_ONEVALUE. Container for one value. */
typedef struct {
TW_UINT16 ItemType;
TW_UINT32 Item;
} TW_ONEVALUE, FAR * pTW_ONEVALUE;
/* TWON_RANGE. Container for a range of values. */
typedef struct {
TW_UINT16 ItemType;
TW_UINT32 MinValue; /* Starting value in the range. */
TW_UINT32 MaxValue; /* Final value in the range. */
TW_UINT32 StepSize; /* Increment from MinValue to MaxValue. */
TW_UINT32 DefaultValue; /* Power-up value. */
TW_UINT32 CurrentValue; /* The value that is currently in effect. */
} TW_RANGE, FAR * pTW_RANGE;
/* DAT_CAPABILITY. Used by app to get/set capability from/in a data source. */
typedef struct {
TW_UINT16 Cap; /* id of capability to set or get, e.g. CAP_BRIGHTNESS */
TW_UINT16 ConType; /* TWON_ONEVALUE, _RANGE, _ENUMERATION or _ARRAY */
TW_HANDLE hContainer; /* Handle to container of type Dat */
} TW_CAPABILITY, FAR * pTW_CAPABILITY;
/* DAT_CIECOLOR. */
typedef struct {
TW_UINT16 ColorSpace;
TW_INT16 LowEndian;
TW_INT16 DeviceDependent;
TW_INT32 VersionNumber;
TW_TRANSFORMSTAGE StageABC;
TW_TRANSFORMSTAGE StageLMN;
TW_CIEPOINT WhitePoint;
TW_CIEPOINT BlackPoint;
TW_CIEPOINT WhitePaper;
TW_CIEPOINT BlackInk;
TW_FIX32 Samples[1];
} TW_CIECOLOR, FAR * pTW_CIECOLOR;
/* DAT_EVENT. For passing events down from the app to the DS. */
typedef struct {
TW_MEMREF pEvent; /* Windows pMSG or Mac pEvent. */
TW_UINT16 TWMessage; /* TW msg from data source, e.g. MSG_XFERREADY */
} TW_EVENT, FAR * pTW_EVENT;
/* DAT_GRAYRESPONSE */
typedef struct {
TW_ELEMENT8 Response[1];
} TW_GRAYRESPONSE, FAR * pTW_GRAYRESPONSE;
/* DAT_IDENTITY. Identifies the program/library/code resource. */
typedef struct {
TW_UINT32 Id; /* Unique number. In Windows, app hWnd */
TW_VERSION Version; /* Identifies the piece of code */
TW_UINT16 ProtocolMajor; /* App and DS must set to TWON_PROTOCOLMAJOR */
TW_UINT16 ProtocolMinor; /* App and DS must set to TWON_PROTOCOLMINOR */
TW_UINT32 SupportedGroups; /* Bit field OR combination of DG_ constants */
TW_STR32 Manufacturer; /* Manufacturer name, e.g. "Hewlett-Packard" */
TW_STR32 ProductFamily; /* Product family name, e.g. "ScanJet" */
TW_STR32 ProductName; /* Product name, e.g. "ScanJet Plus" */
} TW_IDENTITY, FAR * pTW_IDENTITY;
/* DAT_IMAGEINFO. App gets detailed image info from DS with this. */
typedef struct {
TW_FIX32 XResolution; /* Resolution in the horizontal */
TW_FIX32 YResolution; /* Resolution in the vertical */
TW_INT32 ImageWidth; /* Columns in the image, -1 if unknown by DS*/
TW_INT32 ImageLength; /* Rows in the image, -1 if unknown by DS */
TW_INT16 SamplesPerPixel; /* Number of samples per pixel, 3 for RGB */
TW_INT16 BitsPerSample[8]; /* Number of bits for each sample */
TW_INT16 BitsPerPixel; /* Number of bits for each padded pixel */
TW_BOOL Planar; /* True if Planar, False if chunky */
TW_INT16 PixelType; /* How to interp data; photo interp (TWPT_) */
TW_UINT16 Compression; /* How the data is compressed (TWCP_xxxx) */
} TW_IMAGEINFO, FAR * pTW_IMAGEINFO;
/* DAT_IMAGELAYOUT. Provides image layout information in current units. */
typedef struct {
TW_FRAME Frame; /* Frame coords within larger document */
TW_UINT32 DocumentNumber;
TW_UINT32 PageNumber; /* Reset when you go to next document */
TW_UINT32 FrameNumber; /* Reset when you go to next page */
} TW_IMAGELAYOUT, FAR * pTW_IMAGELAYOUT;
/* DAT_IMAGEMEMXFER. Used to pass image data (e.g. in strips) from DS to app.*/
typedef struct {
TW_UINT16 Compression; /* How the data is compressed */
TW_UINT32 BytesPerRow; /* Number of bytes in a row of data */
TW_UINT32 Columns; /* How many columns */
TW_UINT32 Rows; /* How many rows */
TW_UINT32 XOffset; /* How far from the side of the image */
TW_UINT32 YOffset; /* How far from the top of the image */
TW_UINT32 BytesWritten; /* How many bytes written in Memory */
TW_MEMORY Memory; /* Mem struct used to pass actual image data */
} TW_IMAGEMEMXFER, FAR * pTW_IMAGEMEMXFER;
/* Changed in 1.1: QuantTable, HuffmanDC, HuffmanAC TW_MEMREF -> TW_MEMORY */
/* DAT_JPEGCOMPRESSION. Based on JPEG Draft International Std, ver 10918-1. */
typedef struct {
TW_UINT16 ColorSpace; /* One of the TWPT_xxxx values */
TW_UINT32 SubSampling; /* Two word "array" for subsampling values */
TW_UINT16 NumComponents; /* Number of color components in image */
TW_UINT16 RestartFrequency; /* Frequency of restart marker codes in MDU's */
TW_UINT16 QuantMap[4]; /* Mapping of components to QuantTables */
TW_MEMORY QuantTable[4]; /* Quantization tables */
TW_UINT16 HuffmanMap[4]; /* Mapping of components to Huffman tables */
TW_MEMORY HuffmanDC[2]; /* DC Huffman tables */
TW_MEMORY HuffmanAC[2]; /* AC Huffman tables */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -