|
// Quantize.h
//
// CQuantizer Class : MSJ : Wicked Code 1997 : By Jeff Prosise
//
#ifndef __QUANTIZE_H__
#define __QUANTIZE_H__
typedef struct _NODE
{
BOOL bIsLeaf; // TRUE if node has no children
UINT nPixelCount; // Number of pixels represented by this leaf
UINT nRedSum; // Sum of red components
UINT nGreenSum; // Sum of green components
UINT nBlueSum; // Sum of blue components
struct _NODE* pChild[8]; // Pointers to child nodes
struct _NODE* pNext; // Pointer to next reducible node
} NODE;
typedef NODE* PNODE;
class CQuantizer
{
protected:
PNODE m_pTree;
UINT m_nLeafCount;
PNODE m_pReducibleNodes[9];
UINT m_nMaxColors;
UINT m_nColorBits;
public:
CQuantizer(UINT nMaxColors, UINT nColorBits);
virtual ~CQuantizer();
BOOL ProcessImage(HANDLE hImage);
UINT GetColorCount();
void GetColorTable(RGBQUAD* prgb);
protected:
int GetLeftShiftCount(DWORD dwVal);
int GetRightShiftCount(DWORD dwVal);
void AddColor(PNODE* ppNode, BYTE r, BYTE g, BYTE b, UINT nColorBits,
UINT nLevel, UINT* pLeafCount, PNODE* pReducibleNodes);
PNODE CreateNode(UINT nLevel, UINT nColorBits, UINT* pLeafCount,
PNODE* pReducibleNodes);
void ReduceTree(UINT nColorBits, UINT* pLeafCount,
PNODE* pReducibleNodes);
void DeleteTree(PNODE* ppNode);
void GetPaletteColors (PNODE pTree, RGBQUAD* prgb, UINT* pIndex);
};
#endif // __QUANTIZE_H__
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
I am a senior software engineer who has been designing and developing software for many years, mostly in C/C++. You might say that I think in code; which is why I am passionate about my first rule of coding: “First do no harm”. So if I get carried away in my explanations, please realize that it is just part of my personality. I enjoy learning new things and, when I have the time, passing that knowledge onto others.