windows-nt/Source/XPSP1/NT/printscan/wia/test/wiatest/cdib.h
2020-09-26 16:20:57 +08:00

149 lines
3.5 KiB
C++

// cdib.h
#ifndef _INC_DIB
#define _INC_DIB
#define BMP_IMAGE 0
#define TIFF_IMAGE 1
//////////////////////////////////////////
//////// DIB/BMP HEADER DEFINES //////////
//////////////////////////////////////////
#define PALVERSION 0x300
#define DIB_HEADER_MARKER ((WORD) ('M' << 8) | 'B')
// macros
#define RECTWIDTH(lpRect) ((lpRect)->right - (lpRect)->left)
#define RECTHEIGHT(lpRect) ((lpRect)->bottom - (lpRect)->top)
// WIDTHBYTES performs DWORD-aligning of DIB scanlines. The "bits"
// parameter is the bit count for the scanline (biWidth * biBitCount),
// and this macro returns the number of DWORD-aligned bytes needed
// to hold those bits.
#define WIDTHBYTES(bits) (((bits) + 31) / 32 * 4)
//////////////////////////////////////////
//////////////////////////////////////////
//////////////////////////////////////////
////////// TIFF HEADER DEFINES ///////////
//////////////////////////////////////////
typedef struct TIFFFILEHEADERtag {
char tfByteOrder[2];
short tfType;
long tfOffset;
}TIFFFILEHEADER;
typedef struct TIFFTAGtag {
short ttTag;
short ttType;
long ttCount;
long ttOffset;
}TIFFTAG;
#define TIFFBYTE unsigned int
#define TIFFASCII char*
typedef struct TIFFRATIONALtag {
long trNumerator;
long trDenominator;
}TIFFRATIONAL;
typedef struct TIFFTODIBDATAtag {
BITMAPINFOHEADER bmiHeader;
TIFFRATIONAL xResolution;
TIFFRATIONAL yResolution;
long ResolutionUnit;
long RowsPerStrip;
long StripOffsets;
long StripByteCounts;
long ColorsUsed;
char Software[30];
char Author[30];
char Description[30];
long CompressionType;
long *pStripOffsets;
long *pStripByteCountsOffsets;
int OffsetCount;
}TIFFTODIBDATA;
#define TIFF_NEWSUBFILETYPE 254 // long
#define TIFF_IMAGEWIDTH 256 // short or long
#define TIFF_LENGTH 257 // short or long
#define TIFF_BITSPERSAMPLE 258 // short
#define TIFF_COMPRESSION 259 // short
#define TIFF_PHOTOINTERP 262 // short
#define TIFF_IMAGEDESCRIPTION 270 // ASCII
#define TIFF_STRIPOFFSETS 273 // short or long
#define TIFF_ORIENTATION 274 // short
#define TIFF_SAMPLESPERPIXEL 277 // short
#define TIFF_ROWSPERSTRIP 278 // short or long
#define TIFF_STRIPBYTECOUNTS 279 // short or long
#define TIFF_XRESOLUTION 282 // TIFFRATIONAL
#define TIFF_YRESOLUTION 283 // TIFFRATIONAL
#define TIFF_RESOLUTIONUNIT 296 // short
#define TIFF_SOFTWARE 305 // ASCII
//////////////////////////////////////////
//////////////////////////////////////////
class CDib : public CObject
{
DECLARE_DYNAMIC(CDib)
// Constructors
public:
CDib();
int change;
// Attributes
protected:
LPBYTE m_pBits;
LPBITMAPINFO m_pBMI;
public:
CPalette* m_pPalette;
public:
DWORD Width() const;
DWORD Height() const;
WORD NumColors() const;
BOOL IsValid() const { return (m_pBMI != NULL); }
// Operations
public:
BOOL Paint(HDC, LPRECT, LPRECT) const;
HGLOBAL CopyToHandle() const;
DWORD Save(CFile& file) const;
DWORD Read(CFile& file,int FileType);
DWORD ReadFromHandle(HGLOBAL hGlobal);
void Invalidate() { Free(); }
virtual void Serialize(CArchive& ar);
// Implementation
public:
virtual ~CDib();
protected:
BOOL CreatePalette();
WORD PaletteSize() const;
void Free();
BOOL Flip(BYTE* pSrcData);
public:
void ReadFromTIFFFile(CString filename);
void ReadFromBMPFile(LPSTR filename);
void ReadFromBMPFile(CString filename);
BOOL GotImage();
BOOL ReadFromHGLOBAL(HGLOBAL hGlobal,int FileType);
#ifdef _DEBUG
virtual void Dump(CDumpContext& dc) const;
#endif
protected:
CDib& operator = (CDib& dib);
};
#endif //!_INC_DIB