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
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_
|