1

入力 HSB 値を取得して RGB 値に変換できる WindowsForm アプリケーションを作成しています。ここでJDBとMohsenの答えを適応させました:HSLからRGBカラーへの変換

私の結果のコードは以下の通りです:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;

namespace Colour_Picker
{
    public class HSBToRGB
    {
        public static Color HSBToRGBConversion(float hue, float saturation, float brightness)
        {
        float red, green, blue;

        if(saturation == 0){
            red = green = blue = brightness; // achromatic
        }else{
            var q = brightness < 0.5 ? brightness * (1 + saturation) : brightness + saturation - brightness * saturation;
            var p = 2 * brightness - q;
            red = hue2rgb(p, q, hue + 1f/3);
            green = hue2rgb(p, q, hue);
            blue = hue2rgb(p, q, hue - 1f/3);
        }

        return Color.FromArgb((int)Math.Round(red * 255), (int)Math.Round(green * 255), (int)Math.Round(blue * 255));
        }

        public static float hue2rgb(float p, float q, float t){
            if(t < 0) t += 1;
            if(t > 1) t -= 1;
            if(t < 1f/6) return p + (q - p) * 6 * t;
            if(t < 1f/2) return q;
            if(t < 2f/3) return p + (q - p) * (2f/3 - t) * 6;
            return p;
        }
    }
}

ソースでは、HSB 値は [0,1] のセットにある必要があると述べています。理想的には、H をセット [0,360] に、S と B をセット [0,100] に入れたいと考えています。hue2rgb をいじってみましたが、うまくいきませんでした。希望する制限を設定するにはどうすればよいですか?

編集: 元のコードのエラーについて助けてくれた TaW に感謝します。私は実際にはクラスの制限を [0, 1] のままにしていますが、メソッドが呼び出される前に、必要な制限から HSB 値を操作しています。

4

0 に答える 0