1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- #if !defined(QUANTIZER_H_)
- #define QUANTIZER_H_
- struct NODE
- {
- BOOL bIsLeaf;
- long nPixelCount;
- long nRedSum;
- long nGreenSum;
- long nBlueSum;
- UINT nColorIndex;
- NODE* pChild[8];
- NODE* pNext;
- };
- class CQuantizer
- {
- public:
- CQuantizer(UINT nMaxColors, UINT nColorBits);
- ~CQuantizer();
- BOOL ProcessImage(HANDLE hImage);
- UINT GetColorCount();
- void SetColorTable(RGBQUAD* prgb);
- BOOL GetColorIndex(BYTE r, BYTE g, BYTE b, UINT* pColorIndex);
- protected:
- void AddColor(NODE** ppNode, BYTE r, BYTE g, BYTE b,
- UINT nColorBits, UINT nLevel, UINT* pLeafCount, NODE** pReducibleNodes);
- void* CreateNode(UINT nLevel, UINT nColorBits, UINT* pLeafCount,
- NODE** pReducibleNodes);
- void ReduceTree(UINT nColorBits, UINT* pLeafCount,
- NODE** pReducibleNodes);
- void DeleteTree(NODE** ppNode);
- void GetPaletteColors(NODE* pTree, RGBQUAD* prgb, UINT* pIndex);
- BOOL FindColorIndex(NODE* pNode, BYTE r, BYTE g, BYTE b, int nLevel, UINT* pColorIndex);
- BYTE GetPixelIndex(long x, long y, int nbit, long effwdt, BYTE* pimage);
- int m_nColorBits;
- UINT m_nLeafCount;
- int m_nMaxColors;
- NODE* m_pTree;
- NODE* m_pReducibleNodes[9];
- };
- class CRGBQuantizer : public CQuantizer
- {
- public:
- CRGBQuantizer(UINT nMaxColors, UINT nColorBits);
- BOOL ProcessImageRGB(BYTE* pRGBData, UINT nWidth, UINT nHeight);
- };
- class CBitmapQuantizer : public CQuantizer
- {
- public:
- CBitmapQuantizer(UINT nMaxColors, UINT nColorBits);
- BOOL ProcessImageBitmap(HBITMAP hBmp);
- };
- #endif
|