Click here to Skip to main content
11,638,764 members (73,269 online)
Click here to Skip to main content
Articles » Multimedia » GDI » General » Downloads
Add your own
alternative version

QuickFill: An efficient flood fill algorithm.

, 12 Mar 2004 312.4K 9.1K 98
Design and implimentation of efficient flood fill algorithms.
quickfilldemo_demo.zip
QuickFillDemo.exe
quickfilldemo_src.zip
CDibData
Doxygen.dat
CQuantize
QuickFill
test.bmp
QuickFillDemo
Debug
QuickFillDemo.clw
QuickFillDemo.dsp
QuickFillDemo.dsw
Release
res
bitmap1.bmp
bmp00001.bmp
bmp00002.bmp
bmp00003.bmp
bmp00004.bmp
checker.bmp
checker2.bmp
circle.bmp
clubs.bmp
cross.bmp
dchecker.bmp
diamon.bmp
dimonds.bmp
hart.bmp
it.bmp
ldiag.bmp
ne.bmp
nw.bmp
QuickFillDemo.ico
QuickFillDemoDoc.ico
rdiag.bmp
schecker.bmp
scircle.bmp
se.bmp
spades.bmp
square.bmp
sw.bmp
x.bmp
xsquare.bmp
// 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.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

Share

About the Author

John R. Shaw
Software Developer
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.

You may also be interested in...

| Advertise | Privacy | Terms of Use | Mobile
Web01 | 2.8.150728.1 | Last Updated 13 Mar 2004
Article Copyright 2004 by John R. Shaw
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid