|

楼主 |
发表于 2004-6-23 16:09:00
|
显示全部楼层
Re:一个关于颜色转换的问题
终于得到了代码,感谢nowpaper.
#define mid(a,b,c) (a>=b&&a<=c)? A b>=a&&b<=c ? b:c))
void RGB2HSV(int nRed,int nGreen, int nBlue, int *nH,int *nS, int *nV)
{
int nLow,nMid,nHigh;
if(nRed==nGreen&&nGreen==nBlue){
*nH=0;
*nS==0;
*nV=nRed;
return ;
}
nLow=min( nRed,min(nGreen,nBlue));
nHigh=max(nRed,max(nGreen,nBlue));
nMid=mid(nRed,nGreen,nBlue);
*nV=(nLow+nHigh)/2;
*nS=nHigh-nLow;
int nCommon=(int)(60.0*(double)(nMid-nLow)/(double)(nHigh-nLow));
if(nRed==nLow&&nBlue==nHigh)
*nH=240-nCommon;
else if(nRed==nLow&&nGreen==nHigh)
*nH=120+nCommon;
else if(nGreen==nLow&&nRed==nHigh)
*nH=360-nCommon;
else if(nGreen==nLow&&nBlue==nHigh)
*nH=240-nCommon;
else if(nBlue==nLow&&nGreen==nHigh)
*nH=120-nCommon;
else if(nBlue==nLow&&nRed==nHigh)
*nH=nCommon;
}
|
|