错误传递简单RGB到HSL颜色转换器的参数

时间:2014-07-30 18:15:02

标签: c# visual-studio rgb hsl

好的,我正在尝试按照本指南在c#中创建转换器:http://www.geekymonkey.com/Programming/CSharp/RGB2HSL_HSL2RGB.htm

这是我的代码:

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

namespace ColorPickerTest
{

      // Given a Color (RGB Struct) in range of 0-255
      // Return H,S,L in range of 0-1

    class Program
    {


        public struct ColorRGB
        {
            public byte R;
            public byte G;
            public byte B;
            public ColorRGB(Color value)
            {
                this.R = value.R;
                this.G = value.G;
                this.B = value.B;
            }
            public static implicit operator Color(ColorRGB rgb)
            {
                Color c = Color.FromArgb(rgb.R, rgb.G, rgb.B);
                return c;
            }
            public static explicit operator ColorRGB(Color c)
            {
                return new ColorRGB(c);
            }
        }
        public static void RGB2HSL(ColorPickerTest.Program.ColorRGB rgb, out double h, out double s, out double l)
        {
            double r = rgb.R / 255.0;
            double g = rgb.G / 255.0;
            double b = rgb.B / 255.0;
            double v;
            double m;
            double vm;
            double r2, g2, b2;

            h = 0; // default to black
            s = 0;
            l = 0;
            v = Math.Max(r, g);
            v = Math.Max(v, b);
            m = Math.Min(r, g);
            m = Math.Min(m, b);
            l = (m + v) / 2.0;
            if (l <= 0.0)
            {
                return;
            }
            vm = v - m;
            s = vm;
            if (s > 0.0)
            {
                s /= (l <= 0.5) ? (v + m) : (2.0 - v - m);
            }
            else
            {
                return;
            }
            r2 = (v - r) / vm;
            g2 = (v - g) / vm;
            b2 = (v - b) / vm;
            if (r == v)
            {
                h = (g == m ? 5.0 + b2 : 1.0 - g2);
            }
            else if (g == v)
            {
                h = (b == m ? 1.0 + r2 : 3.0 - b2);
            }
            else
            {
                h = (r == m ? 3.0 + g2 : 5.0 - r2);
            }
            h /= 6.0;
        }


        static void Main(string[] args)
        {

            Color slateBlue = Color.FromName("SlateBlue");
            byte g = slateBlue.G;
            byte b = slateBlue.B;
            byte r = slateBlue.R;
            byte a = slateBlue.A;
            string text = String.Format("Slate Blue has these ARGB values: Alpha:{0}, " +
                "red:{1}, green: {2}, blue {3}", new object[]{a, r, g, b});
            Console.WriteLine(text);
            Console.ReadKey();


            ColorPickerTest.Program.ColorRGB rgb = new  ColorPickerTest.Program.ColorRGB(slateBlue);
            double h, s, l;
            RGB2HSL(rgb, h, s, l);

        }
    }
}

当我调用最终方法时出现错误:'RGB2HSL',说该方法的参数无效。

不确定是否与我重载的ColorRGB结构有关,或者我是否打算对其进行限定

1 个答案:

答案 0 :(得分:1)

你刚忘记了 out 这个词进入调用函数

RGB2HSL(rgb, out h, out s, out l);

如果这解决了您的问题,请告诉我。