RGB24转RGB256的算法问题
已经构造了一个调色板,256个颜色
现在要将m*n大小的图形转换为真彩色(RGB24),计算过程大概如下
extern RGBQUAD rgbClrs[256];
UINT WINAPI GetNearestIndex(COLORREF color)
{
UINT index = 0;
int i, diff = 0x7fffffff;
int r,g,b;
for( i = 0; i < 256 && diff ; i++)
{
r = rgbClrs[i].rgbRed - GetRValue(color);
g = rgbClrs[i].rgbGreen - GetGValue(color);
b = rgbClrs[i].rgbBlue - GetBValue(color);
r = r*r + g*g + b*b;
if( r < diff ) { index = i; diff = r; }
}
return index;
}
以上是微软源代码中:GetNearestPaletteIndex的实现(改了一下,以前是传入HPALETTE);
当然r*r + g*g + b*b可以换为 abs(r) + abs(g) + abs(b),效果一样
然后就是遍历m*n这个块,找出所有点的Index,BUT....,太慢太慢太慢了~
转换一个1280*1024的位图,有时候需要转换5~6秒;各位XDJM有什么好算法?