Công cụ nào được sử dụng để làm việc với các màu HSL trong .net?cách sử dụng HSL trong Asp.net
Trả lời
Cấu trúc màu cung cấp ba phương thức: GetHue, GetSaturation và GetBrightness.
Bob Powell đã viết một số interesting piece on this cách đây vài năm.
Lưu ý lịch sử kỳ lạ - "HSL" (và liên quan "HSV") là một trong rất nhiều điều bắt nguồn từ Trung tâm nghiên cứu Palo Alto của Xerox (PARC) vào những năm 70, được phép của Alvy Ray Smith.
Lớp ColorRGB này cung cấp các cách để nhận và đặt HSL, cùng với chuyển đổi tiềm ẩn đến và từ System.Drawing.Color. Nó dựa trên một ví dụ tuyệt vời từ 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();
}
}
}
}
FromHSLA của bạn không xử lý trường hợp h = 1.0. –
Tôi đã cập nhật mã; câu lệnh switch giờ đây xử lý h = 1.0 –
Không, bạn đã sửa lỗi Alpha. Vấn đề là Hue có thể là 1.0, cung cấp giá trị sextant là 6, không được xử lý trong câu lệnh 'case'. –
Ngoài câu trả lời secretGeek, để có được một màu sắc từ các giá trị HSL (hoặc ngược lại), bạn cũng có thể sử dụng các chức năng cuộc gọi có nguồn gốc (mẫu mã trong 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
(sử dụng ColorTranslator.ToWin32
và ColorTranslator.FromWin32
khi chuyển/nhận đối số/kết quả màu)
- 1. Cách sử dụng OpenID trong ASP.net
- 2. Điều chỉnh hình ảnh HSL trên GPU
- 3. Sử dụng DisplayNameAttribute trong ASP.NET
- 4. Cách sử dụng HTTPS trong ứng dụng ASP.Net
- 5. Cách sử dụng SSL trong ứng dụng ASP.NET
- 6. cách gửi thư bằng cách sử dụng smtp trong asp.net
- 7. Sử dụng jQuery trong ASP.NET
- 8. Sử dụng System.Timers.Timer trong asp.net
- 9. Sử dụng dropzone.js trong asp.net
- 10. Sử dụng tư cách thành viên ASP.NET trong PHP
- 11. AccountController bằng cách sử dụng MySQL trong ASP.NET MVC
- 12. Cách sử dụng Base ViewModel trong Asp.net MVC 2
- 13. Sử dụng tư cách thành viên ASP.NET trong ServiceStack
- 14. Cách sử dụng nhãn cho trong biểu mẫu web ASP.Net?
- 15. Cách sử dụng các tệp GZIP Trong Asp.net?
- 16. Làm cách nào để sử dụng Hồ sơ trong ASP.NET?
- 17. Sử dụng Google Checkout trong ASP.Net
- 18. Sử dụng thành viên nào trong ASP.NET
- 19. Sử dụng TypeScript trong ASP.NET MVC
- 20. Sử dụng image404 với azurereader2 trong ASP.net
- 21. Sử dụng ASP.NET Web Forms UserControl trong ASP.NET MVC?
- 22. Sử dụng ASP.NET global.asax
- 23. Chuyển đổi từ RGB sang HSL với Mục tiêu C
- 24. Sử dụng pdf.js trong ASP.NET MVC3
- 25. Sử dụng Url.Content trong ASP.net MVC 2.0
- 26. Sử dụng cookie trong asp.net mvc C#
- 27. sử dụng SquishIt trong ASP.NET MVC 3
- 28. Sử dụng sự kiện OnInit trong asp.net
- 29. Cách thích hợp để sử dụng JQuery khi sử dụng MasterPages trong ASP.NET?
- 30. Sử dụng tài liệu google trong ứng dụng asp.net
Mã của Bob Powell thực sự hữu ích. Tôi đã sử dụng nó trong công cụ của riêng mình và chuyển đổi nó để cung cấp các phương thức mở rộng trên lớp System.Windows.Media.Color. –
Liên kết tới http://www.bobpowell.net/RGBHSB.htm là liên kết đã chết –
Cảm ơn Derek, tôi đã cập nhật liên kết này để lưu trữ bản sao bài viết của.org.org. –