私はイメージの最も使用されている色を見つけるためにアプリケーションを作成しています。色のRGB値を取得するまでですが、色名を取得する方法はplzに役立ちます。C#でRGB値を持っている間に色の名前を取得する方法は?
答えて
System.Drawing名前空間のColorクラスを使用できる必要があります.Colorオブジェクトを返す静的メソッドFromARGBがあります。それはあなたがそのようにRGB値を入力することができます1、いくつかのオーバーロードがあります。
var color = Color.FromArgb(100, 5,5,5).Name;
ドキュメントから: 'このメソッドは、名前から色が作成された場合はユーザー定義の色名、または既知の色の名前を返します。カスタムカラーの場合は、RGB値が返されます。 ' –
** **は「赤」の形式で名前を返しません。あなたの例では、名前は64050505として出てきます。 – adrianbanks
はい、それは16進値を与えています、どのように名前を取得するのですか? – fresky
このメソッドは、Color
クラスに定義済みの色を検討し、引数として渡された色に対して、それらを比較するためにリフレクションを使用しています。これはさらに最適化することができますが、それはあなたに一般的なテクニックのアイデアを与えるはずです。コメントで述べたように、KnownColor
列挙はこれをより簡単にするために使用することができ
private static String GetColorName(Color color)
{
var predefined = typeof(Color).GetProperties(BindingFlags.Public | BindingFlags.Static);
var match = (from p in predefined where ((Color)p.GetValue(null, null)).ToArgb() == color.ToArgb() select (Color)p.GetValue(null, null));
if (match.Any())
return match.First().Name;
return String.Empty;
}
'Any'の代わりに' First'の代わりに 'FirstOrDefault'を呼び出し、結果がnullであるかどうかを確認します。 –
色は構造体です。 FirstOrDefaultはnullではなく空の色を返します。 –
:
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
class Test
{
static void Main()
{
Color color = Color.FromArgb(255, 0, 0);
Console.WriteLine(color.Name); // ffff0000
var colorLookup = Enum.GetValues(typeof(KnownValue))
.Cast<KnownColor>()
.Select(Color.FromKnownColor)
.ToLookup(c => c.ToArgb());
// There are some colours with multiple entries...
foreach (var namedColor in colorLookup[color.ToArgb()])
{
Console.WriteLine(namedColor.Name);
}
}
}
オリジナル答え
Color.FromArgb
はあなたにColor
を与えるだろうが、それ決して名前を持つことはありません。あなたは私が知っている限り、名前付きの色を得るために反射を使用する必要があります。ここで私は同時にアップ働いていたコール・キャンベルのソリューションの別のバージョンがあります
...
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Reflection;
class Test
{
static void Main()
{
Color color = Color.FromArgb(255, 0, 0);
Console.WriteLine(color.Name); // ffff0000
var colorLookup = typeof(Color)
.GetProperties(BindingFlags.Public | BindingFlags.Static)
.Select(f => (Color) f.GetValue(null, null))
.Where(c => c.IsNamedColor)
.ToLookup(c => c.ToArgb());
// There are some colours with multiple entries...
foreach (var namedColor in colorLookup[color.ToArgb()])
{
Console.WriteLine(namedColor.Name);
}
}
}
[KnownColor enumeration](https://msdn.microsoft.com/en-us/library/system.drawing.knowncolor(v = vs.110).aspx?cs-lang = csharp#code-snippet -2)。 –
@AndrewMorton:良い点 - 編集済み。 –
'KnownColor'は' ActiveCaptionText'のようなシステムカラーを含んでいるので、この場合は本当に役に立たないです。したがって、このメソッドはこれらの名前も返します。 – Karsten
迅速かつ簡単なものについては、この(WPFで)試してみてください。
public string GetNameOfColor(Color color) {
var colorProperty = typeof(Colors).GetProperties().FirstOrDefault(p =>
(Color)(p.GetValue(p, null)) == color);
return (colorProperty != null) ? colorProperty.Name : color.ToString();
}
Visual Studio 2010では、p.GetValue(p, null)
が必要です。 Visual Studio 2013以降では、p.GetValue(p)
を使用できます。
この技術の利点は、その簡潔さに加えて、それはSystem.Drawing
またはSystem.Reflection
への参照を必要としないことであるが、ユーザがWPFでSystem.Windows
名前空間、内部に残ることができます。 System.Windows.Media
への参照が必要です。これは、WPFの色を使って作業している場合には、すでに持っているはずです。あなたが私のような人であれば、WPFアプリケーションには必要なく、System.Drawing
を追加しないでください。 WPF名前空間の内部にいる理由は、その優先事項です。たとえば、WPF v/s System.Drawingのディスカッションを参照してください。
これは他の2つの回答とどのように違いますか?その部分はWPFですか? –
- 1. C++ - 私はこのコードを持っている名前空間
- 2. 名前空間を持たないクラス名だけを取得する方法
- 3. C#のコンパクトなフレームワークで色の名前から色を取得するには?
- 4. pdfファイルのテキストの背景色(RGB値)を取得する方法は?
- 5. rgb値に近い色を生成する方法は?
- 6. 名前空間と非名前空間XMLを混在させて値を取得する方法
- 7. RGBの色を取得する
- 8. 異なる色の画像からrgb値を取得する
- 9. cのinode値でディレクトリ名を取得する方法は?
- 10. PythonでRGBAをRGBに変換する方法、または正しい色コードを取得する方法
- 11. 名前空間(またはフレームワーク名)を持つ文字列としてSwift型名を取得する方法
- 12. CGImageRefオブジェクトからピクセルのRGB値を取得する方法は?
- 13. HtmlはRgbで色を取得
- 14. は、私は、次のXMLを持っている名前空間
- 15. は、私は、この名前空間を持っている
- 16. 名前空間内のすべての名前空間を再帰的に取得する方法
- 17. python - PyQtで名前付きの色を取得するには?
- 18. 1次元整数RGB配列から離れた各色のRGB値を取得する方法
- 19. 文書 - タグの名前を名前で取得する方法
- 20. HTMLParserを持つタグの間で値を取得する方法
- 21. RGBカラー、間違った色
- 22. 名前XMLを持つ要素の値を取得する方法PHP parse
- 23. C#設定されているプロパティの名前を取得する方法
- 24. zendで "controller"という名前のパラメータの値を取得する方法は?
- 25. Laravel angleを使ってuser_idで名前を取得する方法は?
- 26. プログラムで名前ノードのホスト名を取得する方法は?
- 27. Cでダウンロードする前にバイナリファイルの名前を取得する
- 28. C#WMI現在のオーディオデバイスの名前を取得する方法
- 29. データストア - ID /名前値の取得方法
- 30. 私のコードが紺色のファブリックサービスで実行されているノードの名前を取得する方法は?
これは役立ちます。http://stackoverflow.com/questions/365935/trying-to-convert-rgb-from-a-net-color-to-a-string-such-as-red-or-青 – Habib
[何を試しましたか](http://whathaveyoutried.com)?あなたはどこにいるのですか?色が知られている名前のものではない場合、あなたは何が起こると思いますか? – Oded