请问在0-255范围内将rgb转换为hsv,hsv转换为rgb的算法。

在0-255范围内将rgb转换为hsv,hsv转换为rgb的算法。

我正在寻找从RGB到HSV的颜色空间转换器,特别是对于这两个颜色空间的范围0到255。



牧羊人nacy
浏览 1702回答 3
3回答

呼啦一阵风

我已经用了很长时间了-我不知道它们是从哪里来的.注意,除了角度外,输入和输出都在0到1.0之间。注意:此代码不对输入进行真正的正常检查。小心点!typedef&nbsp;struct&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;r;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a&nbsp;fraction&nbsp;between&nbsp;0&nbsp;and&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;g;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a&nbsp;fraction&nbsp;between&nbsp;0&nbsp;and&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;b;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a&nbsp;fraction&nbsp;between&nbsp;0&nbsp;and&nbsp;1}&nbsp;rgb;typedef&nbsp;struct&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;h;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;angle&nbsp;in&nbsp;degrees &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;s;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a&nbsp;fraction&nbsp;between&nbsp;0&nbsp;and&nbsp;1 &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;v;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;a&nbsp;fraction&nbsp;between&nbsp;0&nbsp;and&nbsp;1}&nbsp;hsv;static&nbsp;hsv&nbsp;&nbsp;&nbsp;rgb2hsv(rgb&nbsp;in);static&nbsp;rgb&nbsp;&nbsp;&nbsp;hsv2rgb(hsv&nbsp;in);hsv&nbsp;rgb2hsv(rgb&nbsp;in){ &nbsp;&nbsp;&nbsp;&nbsp;hsv&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out; &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;min,&nbsp;max,&nbsp;delta; &nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;=&nbsp;in.r&nbsp;<&nbsp;in.g&nbsp;?&nbsp;in.r&nbsp;:&nbsp;in.g; &nbsp;&nbsp;&nbsp;&nbsp;min&nbsp;=&nbsp;min&nbsp;&nbsp;<&nbsp;in.b&nbsp;?&nbsp;min&nbsp;&nbsp;:&nbsp;in.b; &nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;=&nbsp;in.r&nbsp;>&nbsp;in.g&nbsp;?&nbsp;in.r&nbsp;:&nbsp;in.g; &nbsp;&nbsp;&nbsp;&nbsp;max&nbsp;=&nbsp;max&nbsp;&nbsp;>&nbsp;in.b&nbsp;?&nbsp;max&nbsp;&nbsp;:&nbsp;in.b; &nbsp;&nbsp;&nbsp;&nbsp;out.v&nbsp;=&nbsp;max;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;v &nbsp;&nbsp;&nbsp;&nbsp;delta&nbsp;=&nbsp;max&nbsp;-&nbsp;min; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(delta&nbsp;<&nbsp;0.00001) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.s&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;=&nbsp;0;&nbsp;//&nbsp;undefined,&nbsp;maybe&nbsp;nan? &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;max&nbsp;>&nbsp;0.0&nbsp;)&nbsp;{&nbsp;//&nbsp;NOTE:&nbsp;if&nbsp;Max&nbsp;is&nbsp;==&nbsp;0,&nbsp;this&nbsp;divide&nbsp;would&nbsp;cause&nbsp;a&nbsp;crash &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.s&nbsp;=&nbsp;(delta&nbsp;/&nbsp;max);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;s &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;if&nbsp;max&nbsp;is&nbsp;0,&nbsp;then&nbsp;r&nbsp;=&nbsp;g&nbsp;=&nbsp;b&nbsp;=&nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;s&nbsp;=&nbsp;0,&nbsp;h&nbsp;is&nbsp;undefined &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.s&nbsp;=&nbsp;0.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;=&nbsp;NAN;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;its&nbsp;now&nbsp;undefined &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;in.r&nbsp;>=&nbsp;max&nbsp;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;>&nbsp;is&nbsp;bogus,&nbsp;just&nbsp;keeps&nbsp;compilor&nbsp;happy &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;=&nbsp;(&nbsp;in.g&nbsp;-&nbsp;in.b&nbsp;)&nbsp;/&nbsp;delta;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;between&nbsp;yellow&nbsp;&&nbsp;magenta &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;in.g&nbsp;>=&nbsp;max&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;=&nbsp;2.0&nbsp;+&nbsp;(&nbsp;in.b&nbsp;-&nbsp;in.r&nbsp;)&nbsp;/&nbsp;delta;&nbsp;&nbsp;//&nbsp;between&nbsp;cyan&nbsp;&&nbsp;yellow &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;=&nbsp;4.0&nbsp;+&nbsp;(&nbsp;in.r&nbsp;-&nbsp;in.g&nbsp;)&nbsp;/&nbsp;delta;&nbsp;&nbsp;//&nbsp;between&nbsp;magenta&nbsp;&&nbsp;cyan &nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;*=&nbsp;60.0;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;degrees &nbsp;&nbsp;&nbsp;&nbsp;if(&nbsp;out.h&nbsp;<&nbsp;0.0&nbsp;) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.h&nbsp;+=&nbsp;360.0; &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out;}rgb&nbsp;hsv2rgb(hsv&nbsp;in){ &nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hh,&nbsp;p,&nbsp;q,&nbsp;t,&nbsp;ff; &nbsp;&nbsp;&nbsp;&nbsp;long&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;rgb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out; &nbsp;&nbsp;&nbsp;&nbsp;if(in.s&nbsp;<=&nbsp;0.0)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;<&nbsp;is&nbsp;bogus,&nbsp;just&nbsp;shuts&nbsp;up&nbsp;warnings &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;hh&nbsp;=&nbsp;in.h; &nbsp;&nbsp;&nbsp;&nbsp;if(hh&nbsp;>=&nbsp;360.0)&nbsp;hh&nbsp;=&nbsp;0.0; &nbsp;&nbsp;&nbsp;&nbsp;hh&nbsp;/=&nbsp;60.0; &nbsp;&nbsp;&nbsp;&nbsp;i&nbsp;=&nbsp;(long)hh; &nbsp;&nbsp;&nbsp;&nbsp;ff&nbsp;=&nbsp;hh&nbsp;-&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;in.v&nbsp;*&nbsp;(1.0&nbsp;-&nbsp;in.s); &nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;=&nbsp;in.v&nbsp;*&nbsp;(1.0&nbsp;-&nbsp;(in.s&nbsp;*&nbsp;ff)); &nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;in.v&nbsp;*&nbsp;(1.0&nbsp;-&nbsp;(in.s&nbsp;*&nbsp;(1.0&nbsp;-&nbsp;ff))); &nbsp;&nbsp;&nbsp;&nbsp;switch(i)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;q; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;q; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;5: &nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.r&nbsp;=&nbsp;in.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.g&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.b&nbsp;=&nbsp;q; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;out;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

哆啦的时光机

您也可以在不浮动的情况下尝试这段代码(速度更快,但不太准确):typedef&nbsp;struct&nbsp;RgbColor{ &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;r; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;g; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;b;}&nbsp;RgbColor;typedef&nbsp;struct&nbsp;HsvColor{ &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;h; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;s; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;v;}&nbsp;HsvColor;RgbColor&nbsp;HsvToRgb(HsvColor&nbsp;hsv){ &nbsp;&nbsp;&nbsp;&nbsp;RgbColor&nbsp;rgb; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;region,&nbsp;remainder,&nbsp;p,&nbsp;q,&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hsv.s&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.g&nbsp;=&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.b&nbsp;=&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rgb; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;region&nbsp;=&nbsp;hsv.h&nbsp;/&nbsp;43; &nbsp;&nbsp;&nbsp;&nbsp;remainder&nbsp;=&nbsp;(hsv.h&nbsp;-&nbsp;(region&nbsp;*&nbsp;43))&nbsp;*&nbsp;6;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;p&nbsp;=&nbsp;(hsv.v&nbsp;*&nbsp;(255&nbsp;-&nbsp;hsv.s))&nbsp;>>&nbsp;8; &nbsp;&nbsp;&nbsp;&nbsp;q&nbsp;=&nbsp;(hsv.v&nbsp;*&nbsp;(255&nbsp;-&nbsp;((hsv.s&nbsp;*&nbsp;remainder)&nbsp;>>&nbsp;8)))&nbsp;>>&nbsp;8; &nbsp;&nbsp;&nbsp;&nbsp;t&nbsp;=&nbsp;(hsv.v&nbsp;*&nbsp;(255&nbsp;-&nbsp;((hsv.s&nbsp;*&nbsp;(255&nbsp;-&nbsp;remainder))&nbsp;>>&nbsp;8)))&nbsp;>>&nbsp;8; &nbsp;&nbsp;&nbsp;&nbsp;switch&nbsp;(region) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;0: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;hsv.v;&nbsp;rgb.g&nbsp;=&nbsp;t;&nbsp;rgb.b&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;1: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;q;&nbsp;rgb.g&nbsp;=&nbsp;hsv.v;&nbsp;rgb.b&nbsp;=&nbsp;p; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;2: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;p;&nbsp;rgb.g&nbsp;=&nbsp;hsv.v;&nbsp;rgb.b&nbsp;=&nbsp;t; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;3: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;p;&nbsp;rgb.g&nbsp;=&nbsp;q;&nbsp;rgb.b&nbsp;=&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case&nbsp;4: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;t;&nbsp;rgb.g&nbsp;=&nbsp;p;&nbsp;rgb.b&nbsp;=&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rgb.r&nbsp;=&nbsp;hsv.v;&nbsp;rgb.g&nbsp;=&nbsp;p;&nbsp;rgb.b&nbsp;=&nbsp;q; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;break; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;rgb;}HsvColor&nbsp;RgbToHsv(RgbColor&nbsp;rgb){ &nbsp;&nbsp;&nbsp;&nbsp;HsvColor&nbsp;hsv; &nbsp;&nbsp;&nbsp;&nbsp;unsigned&nbsp;char&nbsp;rgbMin,&nbsp;rgbMax; &nbsp;&nbsp;&nbsp;&nbsp;rgbMin&nbsp;=&nbsp;rgb.r&nbsp;<&nbsp;rgb.g&nbsp;?&nbsp;(rgb.r&nbsp;<&nbsp;rgb.b&nbsp;?&nbsp;rgb.r&nbsp;:&nbsp;rgb.b)&nbsp;:&nbsp;(rgb.g&nbsp;<&nbsp;rgb.b&nbsp;?&nbsp;rgb.g&nbsp;:&nbsp;rgb.b); &nbsp;&nbsp;&nbsp;&nbsp;rgbMax&nbsp;=&nbsp;rgb.r&nbsp;>&nbsp;rgb.g&nbsp;?&nbsp;(rgb.r&nbsp;>&nbsp;rgb.b&nbsp;?&nbsp;rgb.r&nbsp;:&nbsp;rgb.b)&nbsp;:&nbsp;(rgb.g&nbsp;>&nbsp;rgb.b&nbsp;?&nbsp;rgb.g&nbsp;:&nbsp;rgb.b); &nbsp;&nbsp;&nbsp;&nbsp;hsv.v&nbsp;=&nbsp;rgbMax; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hsv.v&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.h&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.s&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hsv; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;hsv.s&nbsp;=&nbsp;255&nbsp;*&nbsp;long(rgbMax&nbsp;-&nbsp;rgbMin)&nbsp;/&nbsp;hsv.v; &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(hsv.s&nbsp;==&nbsp;0) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.h&nbsp;=&nbsp;0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hsv; &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rgbMax&nbsp;==&nbsp;rgb.r) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.h&nbsp;=&nbsp;0&nbsp;+&nbsp;43&nbsp;*&nbsp;(rgb.g&nbsp;-&nbsp;rgb.b)&nbsp;/&nbsp;(rgbMax&nbsp;-&nbsp;rgbMin); &nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if&nbsp;(rgbMax&nbsp;==&nbsp;rgb.g) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.h&nbsp;=&nbsp;85&nbsp;+&nbsp;43&nbsp;*&nbsp;(rgb.b&nbsp;-&nbsp;rgb.r)&nbsp;/&nbsp;(rgbMax&nbsp;-&nbsp;rgbMin); &nbsp;&nbsp;&nbsp;&nbsp;else &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;hsv.h&nbsp;=&nbsp;171&nbsp;+&nbsp;43&nbsp;*&nbsp;(rgb.r&nbsp;-&nbsp;rgb.g)&nbsp;/&nbsp;(rgbMax&nbsp;-&nbsp;rgbMin); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;hsv;}注这个算法使用的0x00 - 0xFF因为它的范围(不&nbsp;0-360).(来源)
打开App,查看更多内容
随时随地看视频慕课网APP