Click here to Skip to main content
15,884,472 members
Articles / Desktop Programming / MFC

QuickFill: An Efficient Flood Fill Algorithm

Rate me:
Please Sign up or sign in to vote.
4.84/5 (71 votes)
12 Mar 200413 min read 526.4K   12K   103  
Design and implementation of efficient flood fill algorithms.
// 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.


Written By
Software Developer (Senior)
United States United States
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.

Comments and Discussions