📄 _palette.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 + -