Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

321 lines
6.1 KiB

/*++
Copyright (c) 2000 Microsoft Corporation
Module Name:
xlbmpcvt.h
Abstract:
Bitmap conversion header
Environment:
Windows Whistler
Revision History:
03/23/00
Created it.
--*/
#ifndef _XLBMPCVT_H_
#define _XLBMPCVT_H_
//
// Macros for getting color components
//
#define RED(x) ((BYTE) ((x) ))
#define GREEN(x) ((BYTE) ((x) >> 8))
#define BLUE(x) ((BYTE) ((x) >> 16))
#define CYAN(x) ((BYTE) ((x) ))
#define MAGENTA(x) ((BYTE) ((x) >> 8))
#define YELLOW(x) ((BYTE) ((x) >> 16))
#define BLACK(x) ((BYTE) ((x) >> 24))
//
// Macro to convert from RGB to grayscale
//
// The formula we're using is: grayscale = 0.3*R + 0.59*G + 0.11*B.
// Scale it up with 256 to avoid a division operation.
//
//
#define RGB2GRAY(r, g, b) ((BYTE) (((r)*77 + (g)*151 + (b)*28) >> 8))
#define GET_COLOR_TABLE(pxlo) \
(pxlo ?\
(((pxlo)->flXlate & XO_TABLE) ?\
((pxlo)->pulXlate ? (pxlo)->pulXlate : XLATEOBJ_piVector(pxlo)) :\
NULL) :\
NULL)
inline
BYTE DWORD2GRAY(
DWORD dwColor)
/*++
Routine Description:
Converts RGB 24 bit color to 8 bit gray scale.
Arguments:
RGB 24 bit color
Return Value:
8 bit gray scale.
Note:
--*/
{
return RGB2GRAY(RED(dwColor), GREEN(dwColor), BLUE(dwColor));
}
typedef enum {
e1bpp = BMF_1BPP,
e4bpp = BMF_4BPP,
e8bpp = BMF_8BPP,
e16bpp = BMF_16BPP,
e24bpp = BMF_24BPP,
e32bpp = BMF_32BPP
} BPP;
typedef enum {
eOutputGray,
eOutputPal,
eOutputRGB,
eOutputCMYK
} OutputFormat;
typedef enum {
eOddPixelZero,
eOddPixelOne
} OddPixel;
typedef enum {
eBitZero,
eBitOne,
eBitTwo,
eBitThree,
eBitFour,
eBitFive,
eBitSize,
eBitSeven
} FirstBit;
typedef BOOL (*PFNDIBCONV)(PBYTE, DWORD);
class BMPConv
#if DBG
: public XLDebug
#endif
{
SIGNATURE( 'cpmb' )
public:
BMPConv::
BMPConv( VOID );
BMPConv::
~BMPConv( VOID );
BOOL
BSetInputBPP(BPP InputBPP);
BOOL
BSetOutputBPP(BPP OutputBPP);
BOOL
BSetOutputBMPFormat(OutputFormat BitmapFormat);
BOOL
BSetXLATEOBJ(XLATEOBJ *pxlo);
DWORD
DwGetDstSize(VOID);
BOOL
BSetCompressionType(CompressMode CMode);
CompressMode
GetCompressionType(VOID);
PBYTE
PubConvertBMP(PBYTE pubSrc, DWORD dwcbSrcSize);
#if DBG
VOID
SetDbgLevel(DWORD dwLevel);
#endif
private:
//
// Attrbutes
//
#define BMPCONV_SET_INPUTBPP 0x00000001
#define BMPCONV_SET_OUTPUTBPP 0x00000002
#define BMPCONV_SET_OUTPUTBMPFORMAT 0x00000004
#define BMPCONV_SET_XLATEOBJ 0x00000008
#define BMPCONV_2COLOR_24BPP 0x00000010
#define BMPCONV_CHECKXLATEOBJ 0x00000f00
#define BMPCONV_XLATE 0x00000100
#define BMPCONV_BGR 0x00000200
#define BMPCONV_32BPP_RGB 0x00000400
#define BMPCONV_32BPP_BGR 0x00000800
DWORD m_flags;
BPP m_InputBPP; // Source bitmap bits per pixel
BPP m_OutputBPP; // Destination bitmap bits per pixel
DWORD m_dwWidth;
OutputFormat m_OutputFormat; // Destination bitmap format
OddPixel m_OddPixelStart; // 0 or 1, whether scanline starts on odd-pixel
FirstBit m_FirstBit; // 0 to 7: starting bit of the scanline's first pixel
XLATEOBJ *m_pxlo;
CompressMode m_CMode;
//
// Destination buffer
//
DWORD m_dwOutputBuffSize;
PBYTE m_pubOutputBuff;
DWORD m_dwRLEOutputBuffSize;
DWORD m_dwRLEOutputDataSize;
PBYTE m_pubRLEOutputBuff;
DWORD m_dwDRCOutputBuffSize;
DWORD m_dwDRCPrevOutputBuffSize;
DWORD m_dwDRCOutputDataSize;
PBYTE m_pubDRCOutputBuff;
PBYTE m_pubDRCPrevOutputBuff;
//
// Internal functions
//
BOOL
BCopy( PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
B4BPPtoCMYK(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
B4BPPtoRGB(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
B4BPPtoGray(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
B8BPPtoGray(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B8BPPtoRGB(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B8BPPtoCMYK(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B16BPPtoGray(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B16BPPtoRGB(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B24BPPtoGray(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B24BPPtoRGB(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B32BPPtoGray(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B32BPPtoRGB(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
B32BPPtoCMYK(
IN PBYTE pubSrc,
IN DWORD dwSrcPixelNum);
BOOL
BArbtoGray(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
BArbtoRGB(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
#ifdef WINNT_40
BOOL
B24BPPToImageMask(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
#endif // WINNT_40
BOOL
BConversionProc(
PBYTE pubSrc,
DWORD dwSrcPixelNum);
BOOL
BCompressRLE(VOID);
BOOL
BCompressDRC(VOID);
DWORD
DwCheckXlateObj(XLATEOBJ*, BPP);
};
BPP
NumToBPP(
ULONG ulBPP);
ULONG
UlBPPtoNum(
BPP Bpp);
#endif // _XLBMPCVT_H_