C # Кисть для строки

c# string brush

4417 просмотра

3 ответа

158 Репутация автора

Я ищу способ сохранить цвет кисти в виде строки. Например, у меня есть кисть, которая имеет красный цвет. Теперь я хочу написать «красный» в текстовом поле.

Спасибо за любую помощь.

Автор: Waronius Источник Размещён: 11.10.2012 02:31

Ответы (3)


0 плюса

111 Репутация автора

В основном я выложу то, что уже ответили.

string color = textBox1.Text;

// best, using Color's static method
Color red1 = Color.FromName(color);

// using a ColorConverter
TypeConverter tc1 = TypeDescriptor.GetConverter(typeof(Color)); // ..or..
TypeConverter tc2 = new ColorConverter();
Color red2 = (Color)tc.ConvertFromString(color);

// using Reflection on Color or Brush
Color red3 = (Color)typeof(Color).GetProperty(color).GetValue(null, null);

// in WPF you can use a BrushConverter
SolidColorBrush redBrush = (SolidColorBrush)new BrushConverter().ConvertFromString(color);

Оригинальный ответ: Преобразовать строку в имя цвета кисти / кисти в C #

Автор: inzenir Размещён: 11.10.2012 02:36

2 плюса

139 Репутация автора

Что это за кисть? Если это рисование пространства имен, то кисть является абстрактным классом. Для SolidBrush выполните:

brush.Color.ToString ()

В противном случае получите свойство color и используйте метод ToString () для преобразования цвета в его строковое представление.

Автор: pathfinder666 Размещён: 11.10.2012 02:37

2 плюса

80115 Репутация автора

Решение

Если Brushобъект был создан с помощью Colorfrom System.Drawing.Color, то вы можете использовать свойство Colors Name.

В противном случае, вы можете просто попытаться найти цвет, используя отражение

// hack
var b = new SolidBrush(System.Drawing.Color.FromArgb(255, 255, 235, 205));
var colorname = (from p in typeof(System.Drawing.Color).GetProperties()
                 where p.PropertyType.Equals(typeof(System.Drawing.Color))
                 let value = (System.Drawing.Color)p.GetValue(null, null)
                 where value.R == b.Color.R &&
                       value.G == b.Color.G &&
                       value.B == b.Color.B &&
                       value.A == b.Color.A
                 select p.Name).DefaultIfEmpty("unknown").First();

// colorname == "BlanchedAlmond"

или создайте отображение самостоятельно (и посмотрите на цвет с помощью a Dictionary), возможно, используя одну из множества таблиц цветов вокруг.

Редактировать:

Вы написали комментарий, в котором говорите, что используете System.Windows.Media.Color, но вы все равно можете использовать его System.Drawing.Colorдля поиска названия цвета.

var b = System.Windows.Media.Color.FromArgb(255, 255, 235, 205);
var colorname = (from p in typeof(System.Drawing.Color).GetProperties()
                 where p.PropertyType.Equals(typeof(System.Drawing.Color))
                 let value = (System.Drawing.Color)p.GetValue(null, null)
                 where value.R == b.R &&
                       value.G == b.G &&
                       value.B == b.B &&
                       value.A == b.A
                 select p.Name).DefaultIfEmpty("unknown").First();
Автор: sloth Размещён: 11.10.2012 02:50
32x32