converting HSV to RGBの.NETフレームワークに組み込まれているAPIはありますか?私はSystem.Drawing.Colorのメソッドを見ていませんでしたが、プラットフォームに1つもないというのは驚くべきことです。HSVからRGBへの組み込みのC#/ .NET System APIはありますか?
答えて
.NET Frameworkでこれを行うメソッドはありません。
が、これは実装コードである
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;
}
をConverting HSV to RGB colour using C#
をチェックアウトがあり、これを行うための組み込みの方法はありませんが、計算がひどく複雑ではありません。
ColorのGetHue()、GetSaturation()およびGetBrightness()は、HSVではなくHSL値を返します。
次のC#コードは、Wikipediaに記載されているアルゴリズムを使用してRGBとHSVを変換します。
私は既にこの回答をhereとして掲載していますが、ここでコードをコピーして簡単に参照できます。 Windowsシステムカラーにしてからを含むすべての必要な変換を提供するために、優れたC#クラスを持っているhttp://richnewman.wordpress.com/hslcolor-class/で
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に問題があるかもしれません。逆の色のコードを使用して色相を180度回転させようとしましたが、うまく機能しません。受け入れられたコードは、私にとって正しいと思われる異なる色を与えます。 –
私はあなたのColorToHSV関数を使用しています。うまくいくようです。 –
@IsaacBolingerはネガティブな色相ではうまく動作しません。色相> = 0ではうまく動作しますが、<0,360の間では色相を使用する方が適しています。 – xmedeko
ルック。
HSLではなく、HSB/Vが問題になります。これはしばしば混同されます。実際、マイクロソフト自身は、Color.GetBrightness()をHSBと呼ぶことによって、間違ってそれを得ています。実際にはHSLです。 – redshift5
これは組み込まれていませんが、ColorMineと呼ばれるオープンソースのC#ライブラリがあり、色空間を簡単に変換することができます。 HSVへ
Rgbの:RGBに
var rgb = new Rgb {R = 123, G = 11, B = 7};
var hsv = rgb.To<Hsv>();
HSV:その方法について
var hsv = new Hsv { H = 360, S = .5, L = .17 }
var rgb = hsv.to<Rgb>();
- 1. Cでチャネージケースの組み込み関数はありますか?
- 2. セットリーダーから読み込む組み込み関数はありますか?
- 3. Objective Cに組み込み関数がありますか?
- 4. xmlの読み込み/プロジェクトへの組み込み - C#
- 5. MVC組み込みシステムのGUIの例はありますか?
- 6. .Net組み込みリソースにはサイズ制限がありますか?
- 7. MVC 4には組み込みのサイトマップソリューションがありますか?
- 8. Rustに組み込みのID関数はありますか?
- 9. Javaの組み込みデータベース/ファイルバックアップフレームワークはありますか?
- 10. RESTful APIへの組み込み/埋め込みvs.リンク
- 11. javafx読み込みjavafx.scene.image.Image to ImageIO.write()、CMYKからRGBへ
- 12. 組み込み用のC/C++組み込み関数VMOVD
- 13. 組み込み型には移動セマンティクスがありますか?
- 14. 組み込み関数 "none"はありますか?
- 15. golangにコマンドラインインタプリタ用の組み込みパッケージがありますか?
- 16. PowerShellの組み込みプロパティへのアクセス
- 17. レールへのアップグレード5.1.2レールから4.20ブレーク角の組み込み
- 18. C#カンマ区切りテキストファイルからWindowsフォームへの読み込み
- 19. Visual C++で128ビットの組み込み組み込み
- 20. Objective Cプロジェクトへの静的C++ライブラリの組み込み
- 21. C++の組み込みリソース
- 22. 組み込みの名前/値ペア属性はありますか?
- 23. HSVからRGBへの変換がOpenCVで失敗する
- 24. 組み込みデータ型からユーザー定義データ型への変換C++
- 25. 組み込み型からカスタムクラスへの変換
- 26. セット組み込みからリーンの等価設定へ
- 27. H2組み込みデータベースからPostgreSQLへの移行
- 28. アプリケーションコンテキストへのBeanの組み込み
- 29. C#では、使用しないでください。組み込みの例外はありますか?
- 30. VB6読み込み.NET 4 Windows 7からWindows XPへのC#COM DLL
感謝。色が.GetHue()、.GetSaturation()および.GetBrightness()ですが、.fromHSB()のような逆のメソッドはありません。 – MusiGenesis
確かに...その非常に奇妙な省略、イモ。 – jsight
3つの別々の値に対して* out *を使う代わりに、Colorオブジェクトを返さないのはなぜですか? –