好我试图按照本指南,以使在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,或者如果我打算符合符合条件的权利

有帮助吗?

解决方案

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

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

让我知道这是否解决了你的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top