⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _palette.cpp

📁 24位真彩色转256色,24位真彩色转256色
💻 CPP
字号:
// _Palette.cpp: implementation of the C_Palette class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "_Palette.h"

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

C_Palette::C_Palette()
{
	m_wPaletteSize = 0;

	m_wColorCount = 0;

	m_psClrItem = NULL ;
	m_pdwDiff = NULL ;
}

C_Palette::~C_Palette()
{
	if(m_psClrItem != NULL)
	{
		delete [] m_psClrItem ;
		m_psClrItem = NULL ;
	}

	if(NULL != m_pdwDiff)
	{
		delete [] m_pdwDiff ;
		m_pdwDiff = NULL ;
	}
}

HRESULT	C_Palette::Initialize(WORD wPaletteSize)
{
	if(wPaletteSize == 0)
	{
		return ERROR_INVALID_PARAM ;
	}

	if(m_psClrItem != NULL)
	{
		return ERROR_PALETTE_INITIALIZED ;
	}

	m_wPaletteSize = wPaletteSize;

	m_wColorCount = 0;

	m_psClrItem = new S_Color[m_wPaletteSize] ;
	if(m_psClrItem == NULL)
	{
		return ERROR_MEMORY_FAIL ;
	}

	m_pdwDiff = new DWORD[256*2-1];
	if(m_pdwDiff == NULL)
	{
		return ERROR_MEMORY_FAIL ;
	}

	m_pdwDiff[255] = 0 ;
	for (int i=1; i<256; i++)
    {
		m_pdwDiff[255+i] = m_pdwDiff[255-i] = i * i ;
    }

	return 0 ;
}

void C_Palette::Clear()
{
	m_wColorCount = 0;
}

HRESULT	C_Palette::AddColor(S_Color * psClr)
{
	if(psClr == NULL)
	{
		return ERROR_INVALID_PARAM ;
	}

	if(m_psClrItem == NULL)
	{
		return ERROR_PALETTE_NOT_INITIALIZE ;
	}

	if(m_wColorCount >= m_wPaletteSize)
	{
		return ERROR_PALETTE_OVERFLOW ;
	}

	m_psClrItem[m_wColorCount].byRed = psClr->byRed ;
	m_psClrItem[m_wColorCount].byGreen = psClr->byGreen ;
	m_psClrItem[m_wColorCount].byBlue = psClr->byBlue ;

	m_wColorCount++ ;

	return  0;
}

DWORD C_Palette::NearestColorIndex(S_Color * psClr)
{
	if(psClr == NULL)
	{
		return ERROR_INVALID_PARAM ;
	}

	if(m_psClrItem == NULL)
	{
		return ERROR_PALETTE_NOT_INITIALIZE ;
	}

	int i32DiffLowest = INT_MAX ;
	int i32Diff ;
	int wIndex = 0 ;

	DWORD * pdwDiff = m_pdwDiff + 255 ;

	int i ;

	S_Color * psClrTemp ;

/*	while(i++<m_wColorCount)
	{
		i32Diff = pdwDiff [ m_psClrItem[i].byGreen - psClr->byGreen ];
		if(i32Diff < i32DiffLowest)
		{
			i32Diff += pdwDiff [ m_psClrItem[i].byRed - psClr->byRed ];
			if(i32Diff < i32DiffLowest)
			{
				i32Diff += pdwDiff [ m_psClrItem[i].byBlue - psClr->byBlue ];
				if(i32Diff < i32DiffLowest)
				{
					if(i32Diff == 0) return i ;

					wIndex = i ;
					i32DiffLowest = i32Diff ;
				}
			}
		}
	}*/

	_asm
	{
		mov i,0
		mov psClrTemp,m_psClrItem
_Loop:
		cmp i,256
		jnl _Exit

		inc i
		add psClrTemp,4

		mov ax,psClrTemp

_Exit:

	}

	return wIndex ;

}

HRESULT C_Palette::GetPalette(S_Palette * psPalette)
{
	if(psPalette == NULL)
	{
		return ERROR_INVALID_PARAM ;
	}

	if(m_psClrItem == NULL)
	{
		return ERROR_PALETTE_NOT_INITIALIZE ;
	}

	psPalette->psClrData = m_psClrItem ;
	psPalette->dwItemCount = m_wColorCount ;

	return  0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -