C++ (C语言)将RGB转换为HSV和HSV转换为RGB的算法,范围为0-255
我试图使用这个函数来改善HSV到RGB的转换,但是在不使用浮点的情况下有一个小问题C++ (C语言)将RGB转换为HSV和HSV转换为RGB的算法,范围为0-255,c++,colors,C++,Colors,我试图使用这个函数来改善HSV到RGB的转换,但是在不使用浮点的情况下有一个小问题 HsvColor hsv; unsigned char rgbMin, rgbMax; rgbMin = rgb.r < rgb.g ? (rgb.r < rgb.b ? rgb.r : rgb.b) : (rgb.g < rgb.b ? rgb.g : rgb.b); rgbMax = rgb.r > rgb.g ? (rgb.r > rgb.b ? rgb.r : rgb.b)
HsvColor hsv;
unsigned char rgbMin, rgbMax;
rgbMin = rgb.r < rgb.g ? (rgb.r < rgb.b ? rgb.r : rgb.b) : (rgb.g < rgb.b ? rgb.g : rgb.b);
rgbMax = rgb.r > rgb.g ? (rgb.r > rgb.b ? rgb.r : rgb.b) : (rgb.g > rgb.b ? rgb.g : rgb.b);
hsv.v = rgbMax;
if (hsv.v == 0)
{
hsv.h = 0;
hsv.s = 0;
return hsv;
}
hsv.s = 255 * (long int)(rgbMax - rgbMin) / hsv.v;
if (hsv.s == 0)
{
hsv.h = 0;
return hsv;
}
if (rgbMax == rgb.r)
hsv.h = 0 + 43 * (rgb.g - rgb.b) / (rgbMax - rgbMin);
else if (rgbMax == rgb.g)
hsv.h = 85 + 43 * (rgb.b - rgb.r) / (rgbMax - rgbMin);
else
hsv.h = 171 + 43 * (rgb.r - rgb.g) / (rgbMax - rgbMin);
return hsv;
我的问题是,我有rgb.b-rgb.r对于小数点后3位的精度,在操作之前,将操作数乘以1000,这样你将有1000*rgb.b-rgb.r<1000而不是rgb.b-rgb.r。你不需要标题中的语言,这就是标记的用途。当标题与您选择的标签不匹配时尤其愚蠢。我猜你已经看过这个问题了,或者你的题目是个巧合。。。你为什么不能用浮球?你们考虑过定点吗?假定.b和.r都是整数,把减法的结果转换成浮点数应该不会有任何区别;所以你的问题似乎不清楚。我不能用float。b和.r是我在一个结构中配置的无符号字符。那么,你的问题是什么?.b和.r是无符号字符,所以如果它们的差异只是rgb.b和rgb.r是无符号字符,因此是整数。对于rgb.b-rgb.r