Làm cách nào để đổi màu RGB thành HSV? Trong ngôn ngữ C#. Tôi tìm kiếm phương pháp rất nhanh mà không cần bất kỳ thư viện bên ngoài nào.Làm cách nào để thay đổi màu RGB thành HSV?
Trả lời
Bạn đã xem xét đơn giản bằng cách sử dụng không gian tên System.Drawing? Ví dụ:.
System.Drawing.Color color = System.Drawing.Color.FromArgb(red, green, blue);
float hue = color.GetHue();
float saturation = color.GetSaturation();
float lightness = color.GetBrightness();
Lưu ý rằng nó không phải là chính xác những gì bạn đã yêu cầu (xem differences between HSL and HSV và lớp màu không có một sự chuyển đổi trở lại từ HSL/HSV nhưng sau này là hợp lý easy to add
Khi bạn chỉ ra, điều này không thực sự trả lời câu hỏi bởi vì các phương pháp này cung cấp chuyển đổi RGB thành HSL, không phải RGB thành HSV. – Greg
@greg: Tôi đồng ý, điều này sẽ dẫn đến kết quả khủng khiếp, như tôi đã trải nghiệm bản thân mình. – leppie
-1: Vì đây không phải là câu trả lời cho câu hỏi. HSV rất khác với HSL. * Lưu ý *: HSV đôi khi được gọi là HSB (đặc biệt là trong Photoshop, và trong .NET) –
Có một thực hiện C ở đây:
http://www.cs.rit.edu/~ncs/color/t_convert.html
nên rất đơn giản để chuyển sang C#, như hầu như không có chức năng này được gọi là - chỉ cần tính toán.
tìm thấy qua Google
Việc triển khai này không chính xác. Dường như là [dựa trên mã ví dụ này] (http://en.literateprograms.org/RGB_to_HSV_color_space_conversion_%28C%29) nhưng nó thiếu một phần (phần bình thường hóa). Tôi đã vấp phải một lúc rồi! –
này là phiên bản VB.net mà làm việc tốt cho tôi được chuyển từ mã C trong bài BlaM của
có một thực hiện C ở đây:.
http://www.cs.rit.edu/~ncs/color/t_convert.html
Nên rất đơn giản để chuyển đổi sang C#, vì hầu như không có hàm nào được gọi - chỉ> tính toán.
Public Sub HSVtoRGB(ByRef r As Double, ByRef g As Double, ByRef b As Double, ByVal h As Double, ByVal s As Double, ByVal v As Double)
Dim i As Integer
Dim f, p, q, t As Double
If (s = 0) Then
' achromatic (grey)
r = v
g = v
b = v
Exit Sub
End If
h /= 60 'sector 0 to 5
i = Math.Floor(h)
f = h - i 'factorial part of h
p = v * (1 - s)
q = v * (1 - s * f)
t = v * (1 - s * (1 - f))
Select Case (i)
Case 0
r = v
g = t
b = p
Exit Select
Case 1
r = q
g = v
b = p
Exit Select
Case 2
r = p
g = v
b = t
Exit Select
Case 3
r = p
g = q
b = v
Exit Select
Case 4
r = t
g = p
b = v
Exit Select
Case Else 'case 5:
r = v
g = p
b = q
Exit Select
End Select
End Sub
Lưu ý rằng Color.GetSaturation()
và Color.GetBrightness()
giá trị trả lại HSL, không HSV.
Đoạn mã sau thể hiện sự khác biệt.
Color original = Color.FromArgb(50, 120, 200);
// original = {Name=ff3278c8, ARGB=(255, 50, 120, 200)}
double hue;
double saturation;
double value;
ColorToHSV(original, out hue, out saturation, out value);
// hue = 212.0
// saturation = 0.75
// value = 0.78431372549019607
Color copy = ColorFromHSV(hue, saturation, value);
// copy = {Name=ff3278c8, ARGB=(255, 50, 120, 200)}
// Compare that to the HSL values that the .NET framework provides:
original.GetHue(); // 212.0
original.GetSaturation(); // 0.6
original.GetBrightness(); // 0.490196079
Mã C# sau là mã bạn muốn. Nó chuyển đổi giữa RGB và HSV bằng các thuật toán được mô tả trên Wikipedia. Phạm vi là 0 - 360 cho hue
và 0 - 1 cho saturation
hoặc value
.
public static void ColorToHSV(Color color, out double hue, out double saturation, out double value)
{
int max = Math.Max(color.R, Math.Max(color.G, color.B));
int min = Math.Min(color.R, Math.Min(color.G, color.B));
hue = color.GetHue();
saturation = (max == 0) ? 0 : 1d - (1d * min/max);
value = max/255d;
}
public static Color ColorFromHSV(double hue, double saturation, double value)
{
int hi = Convert.ToInt32(Math.Floor(hue/60)) % 6;
double f = hue/60 - Math.Floor(hue/60);
value = value * 255;
int v = Convert.ToInt32(value);
int p = Convert.ToInt32(value * (1 - saturation));
int q = Convert.ToInt32(value * (1 - f * saturation));
int t = Convert.ToInt32(value * (1 - (1 - f) * saturation));
if (hi == 0)
return Color.FromArgb(255, v, t, p);
else if (hi == 1)
return Color.FromArgb(255, q, v, p);
else if (hi == 2)
return Color.FromArgb(255, p, v, t);
else if (hi == 3)
return Color.FromArgb(255, p, q, v);
else if (hi == 4)
return Color.FromArgb(255, t, p, v);
else
return Color.FromArgb(255, v, p, q);
}
tôi nghĩ rằng bạn đã transposed các giá trị mẫu của Saturation và Value trong câu trả lời của bạn. Khi tôi chuyển đổi rgb (50,120,200) thành Hue-Saturation-Value (HSV), tôi nhận được hsv (212, 75%, 78,4%). Nhìn vào công thức wikipedia cho HSV: V = Max (r, g, b). Trong trường hợp này max (50,120,200) = 200. 200/255 = 0.7843 –
tôi sẽ chỉ chỉnh sửa câu trả lời, chuyển đổi các số Saturation và Value. Độ bão hòa phải là 0,75, Giá trị phải là 0,7843 ... –
Bất kỳ ý tưởng nào làm cách nào để chuyển đổi độ bão hòa từ 0-1 thành giá trị bão hòa mà MS Paint sử dụng (tức là tỷ lệ 0-240)? –
EasyRGB có nhiều chuyển đổi không gian màu. Here is the code cho chuyển đổi RGB-> HSV.
FIRST: chắc chắn rằng bạn có một màu như một bitmap, như thế này: (! E là từ Mà xử lý sự kiện chọn màu của tôi)
Bitmap bmp = (Bitmap)pictureBox1.Image.Clone();
paintcolor = bmp.GetPixel(e.X, e.Y);
Những gì tôi đã làm khi tôi đã có này vấn đề một whilke trước, lần đầu tiên tôi nhận được các giá trị rgba (đỏ, xanh lá cây, xanh dương và alpha). Tiếp theo tôi tạo 3 phao nổi: màu nổi, độ bão hòa nổi, độ sáng nổi.Sau đó, bạn chỉ cần làm:
hue = yourcolor.Gethue;
saturation = yourcolor.GetSaturation;
brightness = yourcolor.GetBrightness;
Toàn bộ lô trông như thế này:
Bitmap bmp = (Bitmap)pictureBox1.Image.Clone();
paintcolor = bmp.GetPixel(e.X, e.Y);
float hue;
float saturation;
float brightness;
hue = paintcolor.GetHue();
saturation = paintcolor.GetSaturation();
brightness = paintcolor.GetBrightness();
Nếu bây giờ bạn muốn hiển thị chúng trong một nhãn, chỉ cần làm:
yourlabelname.Text = hue.ToString;
yourlabelname.Text = saturation.ToString;
yourlabelname.Text = brightness.ToString;
Ở đây bạn đi , bây giờ bạn có Giá trị RGB thành giá trị HSV :)
Hy vọng điều này sẽ giúp
- 1. RGB đến HSV màu trong javascript?
- 2. RGB đến HSV trong PHP
- 3. Từ RGB để HSV trong OpenGL GLSL
- 4. Làm cách nào để chuyển đổi màu RGB thành màu 8-bit khớp gần nhất?
- 5. OpenCV hình ảnh chuyển đổi từ RGB để HSV
- 6. Chuyển đổi hình ảnh từ RGB sang không gian màu HSV
- 7. Chuyển đổi chuỗi màu hex thành màu RGB
- 8. Java: cách chuyển đổi màu RGB thành CIE Lab
- 9. Làm thế nào để sử dụng giá trị RGB riêng để thay đổi Màu Nút Winform?
- 10. Làm cách nào để chuyển đổi định dạng "background-color" thành rgb()?
- 11. Thay đổi hình ảnh màu RGB thành hình ảnh Màu xám bằng cách sử dụng Mục tiêu C
- 12. Chuyển đổi RGBA bằng màu cơ bản thành RGB?
- 13. Chuyển đổi mã vòng tròn HSV từ Delphi thành C#
- 14. Làm cách nào để chuyển đổi hình ảnh RGB thành thang độ xám nhưng giữ một màu?
- 15. Làm cách nào để giảm bitmap thành bộ màu RGB đã biết
- 16. Làm cách nào để thay đổi màu chữ với jQuery?
- 17. Làm cách nào để thay đổi màu nền trong gnuplot?
- 18. Làm cách nào để thay đổi màu chữ của sectionIndexTitlesForTableView?
- 19. Làm cách nào để thay đổi màu invisibles trong Xcode4?
- 20. Làm cách nào để thay đổi màu nền bằng JavaScript?
- 21. Làm cách nào để thay đổi màu sbt?
- 22. Làm cách nào để thay đổi màu JProgressBar?
- 23. Làm cách nào để thay đổi màu của textView android.R.layout.simple_spinner_dropdown_item?
- 24. Làm thế nào để thay đổi màu nền của UITabbar tab được chọn thành màu xanh?
- 25. cách chuyển đổi giá trị màu RGB thành giá trị thập lục phân trong C++?
- 26. Làm thế nào để có được thành phần RGB của một màu tùy chỉnh trong ios
- 27. Làm cách nào để tự động thay đổi màu trong C# thành giá trị hex?
- 28. Làm cách nào để thay đổi màu sắc trong SharpDevelop thành một chủ đề tối?
- 29. thêm/trộn màu sắc trong không gian HSV
- 30. Làm mờ LED RGB RGB từ màu này sang màu khác?
Không phải là một bản sao _exact_. HSL! = HSV. –
Việc cần làm để điều chỉnh mã từ HSL post để sử dụng trong giải pháp HSV? –
Wikipedia: Cả hai đều là hình trụ toán học, nhưng HSV có thể được nghĩ về khái niệm như một hình nón ngược màu, HSL khái niệm đại diện cho hình nón đôi hoặc hình cầu. Trong khi "màu sắc" trong HSL và HSV đề cập đến cùng một thuộc tính, định nghĩa của chúng về "bão hòa" khác nhau đáng kể. – BlaM