Quels outils sont utilisés pour travailler avec les couleurs HSL dans .net?comment utiliser HSL dans Asp.net
Répondre
La structure color fournit trois méthodes: GetHue, GetSaturation et GetBrightness. Bob Powell a écrit un interesting piece on this il y a plusieurs années.
Note historique bizarre - "HSL" (et le "HSV" connexe) sont l'une des nombreuses choses provenant du Centre de recherche Palo Alto de Xerox (PARC) dans les années 70, gracieuseté de Alvy Ray Smith.
Cette classe ColorRGB fournit des moyens d'obtenir et de définir HSL, ainsi que des conversions implicites vers et depuis System.Drawing.Color. Il est basé sur un excellent exemple de GeekMonkey.com.
using System;
using System.Drawing;
namespace RMA.Drawing
{
public class ColorRGB
{
public byte R;
public byte G;
public byte B;
public byte A;
public ColorRGB()
{
R = 255;
G = 255;
B = 255;
A = 255;
}
public ColorRGB(Color value)
{
this.R = value.R;
this.G = value.G;
this.B = value.B;
this.A = value.A;
}
public static implicit operator Color(ColorRGB rgb)
{
Color c = Color.FromArgb(rgb.A, rgb.R, rgb.G, rgb.B);
return c;
}
public static explicit operator ColorRGB(Color c)
{
return new ColorRGB(c);
}
// Given H,S,L in range of 0-1
// Returns a Color (RGB struct) in range of 0-255
public static ColorRGB FromHSL(double H, double S, double L)
{
return FromHSLA(H, S, L, 1.0);
}
// Given H,S,L,A in range of 0-1
// Returns a Color (RGB struct) in range of 0-255
public static ColorRGB FromHSLA(double H, double S, double L, double A)
{
double v;
double r, g, b;
if (A > 1.0)
A = 1.0;
r = L; // default to gray
g = L;
b = L;
v = (L <= 0.5) ? (L * (1.0 + S)) : (L + S - L * S);
if (v > 0)
{
double m;
double sv;
int sextant;
double fract, vsf, mid1, mid2;
m = L + L - v;
sv = (v - m)/v;
H *= 6.0;
sextant = (int)H;
fract = H - sextant;
vsf = v * sv * fract;
mid1 = m + vsf;
mid2 = v - vsf;
switch (sextant)
{
case 0:
r = v;
g = mid1;
b = m;
break;
case 1:
r = mid2;
g = v;
b = m;
break;
case 2:
r = m;
g = v;
b = mid1;
break;
case 3:
r = m;
g = mid2;
b = v;
break;
case 4:
r = mid1;
g = m;
b = v;
break;
case 5:
r = v;
g = m;
b = mid2;
break;
}
}
ColorRGB rgb = new ColorRGB();
rgb.R = Convert.ToByte(r * 255.0f);
rgb.G = Convert.ToByte(g * 255.0f);
rgb.B = Convert.ToByte(b * 255.0f);
rgb.A = Convert.ToByte(A * 255.0f);
return rgb;
}
// Hue in range from 0.0 to 1.0
public float H
{
get
{
// Use System.Drawing.Color.GetHue, but divide by 360.0F
// because System.Drawing.Color returns hue in degrees (0 - 360)
// rather than a number between 0 and 1.
return ((Color)this).GetHue()/360.0F;
}
}
// Saturation in range 0.0 - 1.0
public float S
{
get
{
return ((Color)this).GetSaturation();
}
}
// Lightness in range 0.0 - 1.0
public float L
{
get
{
return ((Color)this).GetBrightness();
}
}
}
}
Votre FromHSLA ne gère pas le cas de h = 1.0. –
J'ai mis à jour le code; l'instruction switch gère maintenant h = 1.0 –
Non, vous avez corrigé le blocage Alpha. Le problème est que Hue peut être 1.0, ce qui donne une valeur de sextant de 6, qui n'est pas traitée dans l'instruction 'case'. –
En plus de la réponse de secretGeek, pour obtenir une couleur à partir des valeurs HSL (ou vice-versa), vous pouvez également utiliser ces appels de fonctions natives (exemple de code dans Visual Basic):
Public Declare Sub ColorRGBToHLS Lib "shlwapi.dll" _
(ByVal clrRGB As UInteger, _
ByRef pwHue As Short, _
ByRef pwLuminance As Short, _
ByRef pwSaturation As Short)
Public Declare Function ColorHLSToRGB Lib "shlwapi.dll" _
(ByVal wHue As Short, _
ByVal wLuminance As Short, _
ByVal wSaturation As Short) As UInteger
(en utilisant ColorTranslator.ToWin32
et ColorTranslator.FromWin32
lors du passage/réception de l'argument/résultat de couleur)
- 1. problème de couleur HSL dans Firefox
- 2. comment utiliser session ASP.NET dans WCF?
- 3. comment utiliser les pages ASP dans asp.net
- 4. Comment utiliser Red5 avec Asp.net
- 5. asp.net MVC, comment utiliser la classe HTTPApplication
- 6. Comment utiliser imagemagick sur le site asp.net?
- 7. Comment utiliser au mieux l'en-tête Expires dans ASP.NET MVC?
- 8. Comment utiliser les paramètres facultatifs dans un contrôleur ASP.NET MVC
- 9. Comment utiliser Html.Encode avec Html.Texbox dans Asp.net MVC?
- 10. Comment utiliser les gestionnaires génériques (ASHX) dans ASP.NET MVC?
- 11. Comment utiliser l'état de session ASP.NET dans un HttpHandler?
- 12. Comment utiliser les composants WebPart dans asp.net C#?
- 13. Comment utiliser une méthode d'extension dans une vue ASP.NET MVC?
- 14. Comment utiliser plusieurs moteurs de vue dans l'application ASP.NET MVC
- 15. Comment utiliser le validateur dans ce cas est ASP.NET?
- 16. Comment utiliser ASP.NET MVC Html.RouteLink dans Visual Basic?
- 17. Comment utiliser OpenID dans mon nouveau site Web ASP.NET?
- 18. Comment utiliser jquery avec asp.net ajax
- 19. Comment utiliser un UpdatePanel correctement? (asp.net)
- 20. Comment utiliser Crystal Reports avec ASP.NET?
- 21. Quand utiliser UserControls dans ASp.Net MVC
- 22. Multithreading dans C# comment utiliser?
- 23. Comment utiliser InstanceScope.HttpSession dans StructureMap?
- 24. Comment utiliser CollapsiblePanel
- 25. Puis-je utiliser un XBAP dans une application ASP.NET?
- 26. comment puis-je utiliser la carte de structure asp.net 3.5
- 27. Comment utiliser l'authentification par formulaire avec asp.net mvc?
- 28. Comment utiliser Pop-Ups modale avec ASP.Net MVC et AJAX?
- 29. Comment utiliser les ressources ASP.NET de cette manière?
- 30. Comment utiliser les contrôles serveur avec PostBack avec ASP.NET MVC?
Le code de Bob Powell est vraiment pratique. Je l'ai depuis utilisé dans mes propres affaires et l'ai converti pour fournir des méthodes d'extension sur la classe System.Windows.Media.Color. –
Le lien vers http://www.bobpowell.net/RGBHSB.htm est un lien mort –
Merci Derek, je l'ai mis à jour avec un lien vers la copie de l'article de archive.org. –