Erreur de la transmission de paramètres pour la simple RVB de couleur HSL convertisseur
-
21-12-2019 - |
Question
Bon, je suis en train de suivre ce guide pour la fabrication d'un convertisseur en c#: http://www.geekymonkey.com/Programming/CSharp/RGB2HSL_HSL2RGB.htm
voici mon code:
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);
}
}
}
J'obtiens une erreur lorsque j'appelle la méthode finale:'RGB2HSL", affirmant la méthode a des arguments non valides.
Pas sûr si c'est pour le faire avec mon surchargé struct pour ColorRGB, ou si je suis censé pour être admissible, il
La solution
Vous avez juste oublié le mot hors dans l'appel de fonction
RGB2HSL(rgb, out h, out s, out l);
Laissez-moi savoir si cela a résolu votre problème.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow