converting HSV to RGB için .NET çerçevesinde yerleşik bir API var mı? Bunun için System.Drawing.Color'da bir yöntem görmedim, ancak platformda bir tane olmayacak gibi görünüyor.HSV'den RGB'ye yerleşik bir C#/NET Sistem API'si var mı?
cevap
.NET çerçevesinde bunu yapan bir yöntem olduğunu sanmıyorum.
Kontrol dışarı Converting HSV to RGB colour using C#
Bu
void HsvToRgb(double h, double S, double V, out int r, out int g, out int b)
{
double H = h;
while (H < 0) { H += 360; };
while (H >= 360) { H -= 360; };
double R, G, B;
if (V <= 0)
{ R = G = B = 0; }
else if (S <= 0)
{
R = G = B = V;
}
else
{
double hf = H/60.0;
int i = (int)Math.Floor(hf);
double f = hf - i;
double pv = V * (1 - S);
double qv = V * (1 - S * f);
double tv = V * (1 - S * (1 - f));
switch (i)
{
// Red is the dominant color
case 0:
R = V;
G = tv;
B = pv;
break;
// Green is the dominant color
case 1:
R = qv;
G = V;
B = pv;
break;
case 2:
R = pv;
G = V;
B = tv;
break;
// Blue is the dominant color
case 3:
R = pv;
G = qv;
B = V;
break;
case 4:
R = tv;
G = pv;
B = V;
break;
// Red is the dominant color
case 5:
R = V;
G = pv;
B = qv;
break;
// Just in case we overshoot on our math by a little, we put these here. Since its a switch it won't slow us down at all to put these here.
case 6:
R = V;
G = tv;
B = pv;
break;
case -1:
R = V;
G = pv;
B = qv;
break;
// The color is not defined, we should throw an error.
default:
//LFATAL("i Value error in Pixel conversion, Value is %d", i);
R = G = B = V; // Just pretend its black/white
break;
}
}
r = Clamp((int)(R * 255.0));
g = Clamp((int)(G * 255.0));
b = Clamp((int)(B * 255.0));
}
/// <summary>
/// Clamp a value to 0-255
/// </summary>
int Clamp(int i)
{
if (i < 0) return 0;
if (i > 255) return 255;
return i;
}
Bunu yapmak için yerleşik bir yöntem yoktur, uygulama kodu, ama hesaplamalar korkunç karmaşık değildir.
Ayrıca, Color'ın GetHue(), GetSaturation() ve GetBrightness() HSV değil, HSL değerlerini döndürdüğünü unutmayın.
Aşağıdaki C# kodu, Wikipedia'da açıklanan algoritmaları kullanarak RGB ve HSV arasında dönüştürür.
Bu cevabı zaten gönderdim, ancak hızlı başvuru için kodu buraya kopyalayacağım. ve windows sistem renklerden dahil olmak üzere tüm gerekli dönüşümleri sağlamak için mükemmel bir C# sınıfı vardır http://richnewman.wordpress.com/hslcolor-class/ de
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);
}
ColorFromHSV'nizde bir sorun olabilir, aksi halde kodunuzu kullanarak tonunuzu 180 derece döndürmeye çalışıyordum ve çok iyi çalışmıyor. Kabul edilen kod, bana uygun görünen farklı bir renk verir. –
Ancak, ColorToHSV işlevini kullanıyorum. Gayet iyi görünüyor. –
@IsaacBolinger, negatif renk tonuyla iyi çalışmaz, tonu> = 0 için iyi çalışır, ancak kodunuzda <0, 360 arasında renk tonu kullanmak daha iyidir. – xmedeko
bak.
Soru, çoğu zaman karışık olan HSL/HS değil HSB/V içindir. Aslında Microsoft, Color.GetBrightness() 'ın HSB olduğu ve gerçekte HSL olduğu yönündedir. – redshift5
İçinde yerleşik değil, ancak renk boşlukları arasında kolayca dönüştürmeyi sağlayan ColorMine adlı açık kaynaklı bir C# kitaplığı var. Hsv için
Rgb: rgb için
var rgb = new Rgb {R = 123, G = 11, B = 7};
var hsv = rgb.To<Hsv>();
Hsv: Yönteme
var hsv = new Hsv { H = 360, S = .5, L = .17 }
var rgb = hsv.to<Rgb>();
- 1. Chrome'da yerleşik bir Çağrı Yığını var mı?
- 2. Android'de yerleşik bir PDF görüntüleyici var mı?
- 3. MVC gömülü sistem GUI örnekleri var mı?
- 4. Süreçler oluşturulduğunda bir Sistem olayı var mı?
- 5. Python'da yerleşik çapraz iş parçacıkları var mı?
- 6. Liferay'de yerleşik web analizi aracı var mı?
- 7. Herhangi bir büyük tarayıcıda yerleşik bir HTML doğrulayıcı var mı?
- 8. Bir tarayıcıda yerleşik HTML5 form doğrulaması var mı kontrol edin?
- 9. Perl'de yerleşik bir doğru/yanlış boole değeri var mı?
- 10. Windows Forms'ta yerleşik bir onay iletişim kutusu var mı?
- 11. Python'da Perl'in eki gibi yerleşik bir işlev var mı?
- 12. Yatay dize birleştirme için yerleşik bir işlev var mı?
- 13. MVC 4'ün yerleşik bir site haritası çözümü var mı?
- 14. Bir OS X sistem çerçevesi sistem çapında enjekte etmenin bir yolu var mı?
- 15. C++ akışlarını uluslararasılaştırmak için bir sistem var mı?
- 16. PHP'nin sistem işlevlerini daha fazla yapmaya teşebbüs eden var mı? Nesne Odaklı mı?
- 17. Vue.js, kalıcı bir nesnenin bir kopyasını tekrarlanan bir diziye eklemek için yerleşik bir yol var mı?
- 18. Haskell'de, bir elemanın bir listesini oluşturan yerleşik bir fonksiyon var mı?
- 19. Bir dizenin (veya tanıtıcının) bir komut dosyasına başvurup başvurmadığına dair yerleşik bir test var mı?
- 20. Android'de "Sistem Çubuğu" na programlı erişim var mı?
- 21. 'Sistem verileri' bir veritabanında mı olmalı?
- 22. Python'un bir çok satırlı dizgiyi serbest bırakmak için yerleşik bir işlevi var mı?
- 23. Öğeleri yakutta yinelenebilir bir şekilde sarmak için daha temiz, daha kısa, yerleşik bir yol var mı?
- 24. Kodda yerleşik bir django yerleşik filtre kullanın (şablonun dışında)
- 25. CMS yerleşik
- 26. Yerleşik entegrasyon testleri eşzamanlı mı, sıralı mı çalışıyor?
- 27. SWIG'in yeni yerleşik özelliği ile pythonappend'i kullanmanın bir yolu var mı?
- 28. Python'da `ve` ve/veya `veya` yerleşik bir işlev sürümü var mı?
- 29. Yürütme (Tt) yöntemini garanti eden yerleşik bir Java türü var mı?
- 30. Google Chrome'un yerleşik PDF Görüntüleyici ile kullanılacak herhangi bir API var mı?
teşekkürler. Renk, .GetHue(), .GetSaturation() ve .GetBrightness(), ancak .fromHSB() gibi ters bir yöntem yoktur garip. – MusiGenesis
Gerçekten de ... çok tuhaf bir ihmal, imo. – jsight
Niçin üç ayrı değer için * out * kullanmak yerine bir Color nesnesi döndürmüyor? –