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.
 
 
 
 
 
 

81 lines
2.2 KiB

const ULONG MAX_DITHERTABLE_CACHE_SIZE = 4;
class CDitherToRGB8 :
public IImageDecodeEventSink,
public IDithererImpl,
public CComObjectRoot,
public CComCoClass< CDitherToRGB8, &CLSID_CoDitherToRGB8 >
{
public:
CDitherToRGB8();
~CDitherToRGB8();
BEGIN_COM_MAP( CDitherToRGB8 )
COM_INTERFACE_ENTRY( IImageDecodeEventSink )
COM_INTERFACE_ENTRY( IDithererImpl )
END_COM_MAP()
DECLARE_REGISTRY( CDitherToRGB8, _T( "ImgUtil.CoDitherToRGB8.1" ),
_T( "ImgUtil.CoDitherToRGB8" ), IDS_CODITHERTORGB8_DESC,
THREADFLAGS_BOTH );
// DECLARE_NO_REGISTRY()
// IImageDecodeEventSink
public:
STDMETHOD( GetSurface )( LONG nWidth, LONG nHeight, REFGUID bfid,
ULONG nPasses, DWORD dwHints, IUnknown** ppSurface );
STDMETHOD( OnBeginDecode )( DWORD* pdwEvents, ULONG* pnFormats,
GUID** ppFormats );
STDMETHOD( OnBitsComplete )();
STDMETHOD( OnDecodeComplete )( HRESULT hrStatus );
STDMETHOD( OnPalette )();
STDMETHOD( OnProgress )( RECT* pBounds, BOOL bComplete );
// IDithererImpl
public:
STDMETHOD( SetDestColorTable )( ULONG nColors, const RGBQUAD* prgbColors );
STDMETHOD( SetEventSink )( IImageDecodeEventSink* pEventSink );
public:
static void InitTableCache();
static void CleanupTableCache();
protected:
HRESULT ConvertBlock( RECT* pBounds );
HRESULT DitherBand( RECT* pBounds );
HRESULT DitherFull();
protected:
static CDitherTable* s_apTableCache[MAX_DITHERTABLE_CACHE_SIZE];
static ULONG s_nCacheSize;
static CRITICAL_SECTION s_csCache;
protected:
typedef enum _ESrcFormat
{
RGB24,
RGB8
} ESrcFormat;
CComPtr< IImageDecodeEventSink > m_pEventSink;
CComPtr< IDirectDrawSurface > m_pDestSurface;
CComPtr< IDirectDrawSurface > m_pSurface;
BYTE *m_pbBits;
DWORD m_dwEvents;
ULONG m_nWidth;
ULONG m_nHeight;
ULONG m_nPitch;
ULONG m_nBitsPerPixel;
BOOL m_bProgressiveDither;
ESrcFormat m_eSrcFormat;
ULONG m_iScanLine;
HBITMAP m_hbmDestDib;
ERRBUF* m_pErrBuf;
ERRBUF* m_pErrBuf1;
ERRBUF* m_pErrBuf2;
CDitherTable* m_pTable;
RGBQUAD m_argbSrcColors[256];
};