この関数を使用してHSVからRGBへの変換を改善しようとしていますが、floatを使用しないと少し問題があります。 。(C言語)
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;
私の問題は、私はfloatを使用しなくても、私は切り捨てられた値を持つ、(rgb.b-rgb.r)<1
を持っているということである(そう0)と常にhsv.h
滞在85時...
hsv.h = 85 + 43 *(rgb.b - rgb.r)/(rgbMax - rgbMin);
誰もが考えていますか?
タイトルには言語は必要ありません。これは、どのタグ用のものですか。タイトルがあなたが選んだタグと一致しないときは特に愚かです。私はあなたがこの質問を見たと思うだろう、あるいはあなたのタイトルはかなりの偶然です... https://stackoverflow.com/questions/3018313/algorithm-to-convert-rgb-to-hsv-and-hsv-to -rgb-in-range-0-255-for-bothなぜfloatを使用できないのですか?固定小数点を考えましたか? –
'.b'と' .r'はおそらく整数なので、減算の結果を 'float'に変換すると違いはありません。あなたの質問は不明なようです。 –
私はfloatを使うことができません... .bと.rは構造体で設定した符号なしの文字です。 –