亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? createpal.cpp

?? 這是VC++ 2003.net圖像處理的光盤源程序!!!非常好的
?? CPP
字號:
/******************************************************************
  CreatePal.cpp

  Performing Color Quantization algorithm

******************************************************************/

#include "stdafx.h"
  
#ifndef		_CREATEPAL_C
#define		_CREATEPAL_C

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;

void AddColor (NODE**, BYTE, BYTE, BYTE, UINT, UINT, UINT*, NODE**);
NODE* CreateNode (UINT, UINT, UINT*, NODE**);
void ReduceTree (UINT, UINT*, NODE**);
void DeleteTree (NODE**);
void GetPaletteColors (NODE*, RGBQUAD*, UINT*);

void TrueColorToIndex(CImage *pImg0,CImage *pImg1)
{
 	struct	IMAGEPARAMENT P;
	CImage	gpImg;
	RGBQUAD	ColorTab[256];
	HDC		hMemDC;
   
	GetImageParament(pImg1,&P);
 	gpImg.Create(P.nWidth,P.nHeight,8,0);
 
	Create8TreePal(pImg1,ColorTab,256,8);
	SetAllPalette(&gpImg,ColorTab);

	hMemDC = gpImg.GetDC();
	pImg1->BitBlt(hMemDC,0,0,P.nWidth,P.nHeight,0,0,SRCCOPY);
	gpImg.ReleaseDC();

	ImageCopy(pImg0,&gpImg);
	gpImg.Destroy();
}
 
// local function to build optimal palette from CImage
void Create8TreePal(CImage *pImg,RGBQUAD *Pal, UINT nMaxColors, UINT nColorBits)
{
	struct	IMAGEPARAMENT P;
    int		i, j;
    BYTE	*pbBits;
    BYTE	r, g, b;
    NODE	*pTree;
    UINT	nLeafCount,nIndex;
    NODE	*pReducibleNodes[9];
      
 	GetImageParament(pImg,&P);

    // Initialize octree variables
    pTree = NULL;
    nLeafCount = 0;
	for (i=0; i<=(int) nColorBits; i++) pReducibleNodes[i] = NULL;

    for (i=0; i<P.nHeight; i++) {
		pbBits = (BYTE*) pImg->GetPixelAddress(0,i);
        for (j=0; j<P.nWidth; j++) {
            b = *pbBits++;
            g = *pbBits++;
            r = *pbBits++;
			if (P.nBitCount==32) pbBits++;
            AddColor (&pTree, r, g, b, nColorBits, 0, &nLeafCount,
                      pReducibleNodes);
            while (nLeafCount > nMaxColors)
                ReduceTree (nColorBits, &nLeafCount, pReducibleNodes);
        }
    }

	nIndex = 0;
    GetPaletteColors (pTree, Pal, &nIndex);
    DeleteTree (&pTree);
}

// local function to add a color to octree
void AddColor (NODE** ppNode, BYTE r, BYTE g, BYTE b, UINT nColorBits,
    UINT nLevel, UINT* pLeafCount, NODE** pReducibleNodes)
{
    int nIndex, shift;
    static BYTE mask[8] = {0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01};

    // If the node doesn't exist, create it
    if (*ppNode == NULL)
        *ppNode = CreateNode (nLevel, nColorBits, pLeafCount,
                              pReducibleNodes);

    // Update color information if it's a leaf node
    if ((*ppNode)->bIsLeaf) {
        (*ppNode)->nPixelCount++;
        (*ppNode)->nRedSum += r;
        (*ppNode)->nGreenSum += g;
        (*ppNode)->nBlueSum += b;
    }

    // Recurse a level deeper if the node is not a leaf
    else {
        shift = 7 - nLevel;
        nIndex = (((r & mask[nLevel]) >> shift) << 2) |
            (((g & mask[nLevel]) >> shift) << 1) |
            ((b & mask[nLevel]) >> shift);
        AddColor (&((*ppNode)->pChild[nIndex]), r, g, b, nColorBits,
                  nLevel + 1, pLeafCount, pReducibleNodes);
    }
}

// local function to create a new node in octree
NODE* CreateNode (UINT nLevel, UINT nColorBits, UINT* pLeafCount,
                  NODE** pReducibleNodes)
{
    NODE* pNode;

    if ((pNode = (NODE*) HeapAlloc (GetProcessHeap (), HEAP_ZERO_MEMORY,
        sizeof (NODE))) == NULL)
        return NULL;

    pNode->bIsLeaf = (nLevel == nColorBits) ? TRUE : FALSE;
    if (pNode->bIsLeaf) (*pLeafCount)++;
    else { // Add the node to the reducible list for this level
        pNode->pNext = pReducibleNodes[nLevel];
        pReducibleNodes[nLevel] = pNode;
    }
    return pNode;
}

// local function to reduce the nodes of octree
void ReduceTree (UINT nColorBits, UINT* pLeafCount, NODE** pReducibleNodes)
{
    int i;
    NODE* pNode;
    UINT nRedSum, nGreenSum, nBlueSum, nChildren;

    // Find the deepest level containing at least one reducible node
    for (i=nColorBits - 1; (i>0) && (pReducibleNodes[i] == NULL); i--);

    // Reduce the node most recently added to the list at level i
    pNode = pReducibleNodes[i];
    pReducibleNodes[i] = pNode->pNext;

    nRedSum = nGreenSum = nBlueSum = nChildren = 0;
    for (i=0; i<8; i++) {
        if (pNode->pChild[i] != NULL) {
            nRedSum += pNode->pChild[i]->nRedSum;
            nGreenSum += pNode->pChild[i]->nGreenSum;
            nBlueSum += pNode->pChild[i]->nBlueSum;
            pNode->nPixelCount += pNode->pChild[i]->nPixelCount;
            HeapFree (GetProcessHeap (), 0, pNode->pChild[i]);
            pNode->pChild[i] = NULL;
            nChildren++;
        }
    }

    pNode->bIsLeaf = TRUE;
    pNode->nRedSum = nRedSum;
    pNode->nGreenSum = nGreenSum;
    pNode->nBlueSum = nBlueSum;
    *pLeafCount -= (nChildren - 1);
}

// local function to delete a node of octree
void DeleteTree (NODE** ppNode)
{
    int i;

    for (i=0; i<8; i++) {
        if ((*ppNode)->pChild[i] != NULL)
            DeleteTree (&((*ppNode)->pChild[i]));
    }
    HeapFree (GetProcessHeap (), 0, *ppNode);
    *ppNode = NULL;
}

// local function to get color entry from a palette
void GetPaletteColors (NODE* pTree, RGBQUAD* Pal, UINT* pIndex)
{
    int i;

    if (pTree->bIsLeaf) {
        Pal[*pIndex].rgbRed =
            (BYTE) ((pTree->nRedSum) / (pTree->nPixelCount));
        Pal[*pIndex].rgbGreen =
            (BYTE) ((pTree->nGreenSum) / (pTree->nPixelCount));
        Pal[*pIndex].rgbBlue =
            (BYTE) ((pTree->nBlueSum) / (pTree->nPixelCount));
        (*pIndex)++;
    }
    else {
        for (i=0; i<8; i++) {
            if (pTree->pChild[i] != NULL)
                GetPaletteColors (pTree->pChild[i], Pal, pIndex);
        }
    }
}

#endif		//!_CREATEPAL_C

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
蜜臀精品一区二区三区在线观看 | 欧美日韩激情在线| 中文字幕日韩av资源站| 成人av免费观看| 亚洲欧洲韩国日本视频 | 色综合色狠狠天天综合色| 国产精品美女久久久久aⅴ| 成人免费视频一区二区| 亚洲欧美日韩久久| 欧美久久久久久久久久| 欧美aaaaaa午夜精品| 久久久久久久久久久久久女国产乱| 国产精品18久久久| 亚洲美女在线一区| 欧美高清www午色夜在线视频| 麻豆91在线观看| 中文字幕不卡在线观看| 在线免费一区三区| 久久成人av少妇免费| 国产精品久久久久久久久晋中| 一本大道综合伊人精品热热| 亚洲h动漫在线| 久久综合九色综合久久久精品综合 | 日韩黄色一级片| 久久久精品日韩欧美| 色综合天天视频在线观看| 免费欧美在线视频| 欧美国产精品劲爆| 69久久99精品久久久久婷婷| 国产乱人伦精品一区二区在线观看 | 日韩欧美123| 91亚洲大成网污www| 人人狠狠综合久久亚洲| 亚洲欧洲精品成人久久奇米网| 欧美一级黄色片| 99久久久久久| 韩日av一区二区| 亚洲国产一区二区视频| 国产无人区一区二区三区| 欧美日韩一区二区三区四区五区 | 国产精品久久久久7777按摩 | 日韩欧美一区电影| 91在线观看成人| 激情丁香综合五月| 午夜国产精品影院在线观看| 国产精品久久久久aaaa樱花| 日韩欧美国产三级电影视频| 在线观看亚洲精品| 岛国精品一区二区| 国产综合久久久久久鬼色| 亚洲国产精品麻豆| 国产精品福利在线播放| 2020国产精品久久精品美国| 欧美人妇做爰xxxⅹ性高电影| 不卡av在线免费观看| 精品制服美女久久| 日韩国产成人精品| 亚洲成人激情社区| 亚洲在线视频网站| 亚洲色图在线播放| 国产精品美女视频| 中文成人综合网| 国产午夜精品美女毛片视频| 久久蜜桃一区二区| 欧美大黄免费观看| 欧美一二三区在线| 欧美一级欧美一级在线播放| 欧美视频精品在线| 在线观看91视频| 欧洲精品在线观看| 欧美在线视频日韩| 在线观看视频一区二区 | 亚洲风情在线资源站| 亚洲一区二区三区视频在线播放 | 一本一道久久a久久精品综合蜜臀| 国产二区国产一区在线观看| 激情都市一区二区| 国产美女精品人人做人人爽| 国产一区二区美女| 国产精品一区二区无线| 国产精品综合在线视频| 国产电影精品久久禁18| 成人av动漫网站| 色噜噜狠狠色综合欧洲selulu| 91小宝寻花一区二区三区| 色婷婷综合久久久中文字幕| 在线视频你懂得一区二区三区| 在线观看免费成人| 3d动漫精品啪啪一区二区竹菊| 91精品免费观看| 久久久亚洲精品一区二区三区| 精品国产三级a在线观看| 久久你懂得1024| 亚洲欧洲日韩在线| 亚洲一区二区三区四区在线| 日韩精品每日更新| 黑人精品欧美一区二区蜜桃| 成人免费毛片a| 日本高清视频一区二区| 日韩一区二区三区在线视频| 久久精品无码一区二区三区| 亚洲人一二三区| 丝袜亚洲另类欧美| 国产电影一区在线| 色av一区二区| 日韩一区二区免费在线观看| 国产午夜亚洲精品理论片色戒 | 亚洲h动漫在线| 精品系列免费在线观看| 99视频超级精品| 制服.丝袜.亚洲.中文.综合| 久久综合久久久久88| 一区二区三区在线视频观看| 麻豆精品久久精品色综合| 丁香网亚洲国际| 欧美一区二区三区爱爱| 欧美国产视频在线| 奇米777欧美一区二区| a亚洲天堂av| 欧美电影免费观看高清完整版在线观看| 国产欧美一区视频| 天天影视涩香欲综合网| 成人免费电影视频| 91麻豆精品国产综合久久久久久 | 亚洲嫩草精品久久| 精品一区二区三区免费| 在线观看亚洲精品| 中文字幕精品—区二区四季| 日韩国产精品91| 色噜噜偷拍精品综合在线| 欧美成人a在线| 亚洲无人区一区| 成人激情综合网站| 欧美成人免费网站| 亚洲成人一区在线| 91丨porny丨蝌蚪视频| 久久久不卡网国产精品一区| 日韩黄色片在线观看| 91福利社在线观看| 国产精品全国免费观看高清| 美女免费视频一区| 欧美日韩成人综合在线一区二区| 中文字幕色av一区二区三区| 国产在线视频一区二区| 在线播放中文一区| 一区二区三区美女视频| 成人国产在线观看| 国产亚洲一区二区三区在线观看| 日韩精品电影在线| 91麻豆精品国产无毒不卡在线观看| 亚洲女同女同女同女同女同69| 粉嫩一区二区三区在线看| 欧美精品一区二区高清在线观看| 丝袜美腿亚洲一区| 欧美麻豆精品久久久久久| 亚洲激情五月婷婷| 色噜噜狠狠色综合中国| 亚洲精选视频在线| 91污在线观看| 伊人性伊人情综合网| 不卡一区二区在线| 国产精品美女久久久久aⅴ国产馆| 国产黄色91视频| 久久精品亚洲麻豆av一区二区| 免费av网站大全久久| 制服视频三区第一页精品| 午夜精品免费在线| 色悠久久久久综合欧美99| 69av一区二区三区| 3d成人h动漫网站入口| 日韩欧美精品在线| 精品久久久久久无| 日韩欧美激情四射| 国产视频一区二区在线观看| 7777精品久久久大香线蕉| 日本精品裸体写真集在线观看| 国产福利精品导航| 欧美综合久久久| 一本久久综合亚洲鲁鲁五月天| 成人一区二区视频| 久久99国产精品免费网站| 国产.欧美.日韩| 91麻豆国产福利精品| 国产69精品久久久久毛片| 艳妇臀荡乳欲伦亚洲一区| 久久只精品国产| 久久亚洲精华国产精华液| 欧美日韩高清影院| 97se亚洲国产综合自在线观| 色婷婷av一区二区三区大白胸| 成人少妇影院yyyy| 91麻豆蜜桃一区二区三区| 国产精品免费视频一区| 成人一区二区三区视频在线观看| 91精品国产91久久综合桃花| 久久精品视频在线免费观看| 一区二区三区四区亚洲| 一区二区三区日韩欧美精品| 欧美激情一区二区三区不卡| 精品久久久三级丝袜|