游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2004|回复: 1

一个关于颜色转换的问题

[复制链接]

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
发表于 2003-9-15 20:20:00 | 显示全部楼层 |阅读模式
请问:HSB颜色和RGB颜色如何互相转换?
PhotoShop中的拾色器使用的就是HSB颜色。
H好像是“色相”,取值范围是0-360
S好像是“饱和度”,取值范围是0-100%
B好像是“明度”,取值范围是0-100%

65

主题

225

帖子

232

积分

中级会员

Rank: 3Rank: 3

积分
232
 楼主| 发表于 2004-6-23 16:09:00 | 显示全部楼层

Re:一个关于颜色转换的问题

终于得到了代码,感谢nowpaper.
#define mid(a,b,c) (a>=b&&a<=c)? Ab>=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;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2025-7-2 12:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表