перетворити з кольору в пензлик


Відповіді:


139

Це для того, Colorщоб Brush….

ви не можете його перетворити, ви повинні зробити новий пензлик ....

SolidColorBrush brush = new SolidColorBrush( myColor );

Тепер, якщо вам це потрібно в XAML, ви МОЖЕТЕ зробити спеціальний конвертер значень і використовувати його у прив'язці


8
Для зворотної сумісності було б краще використовувати SolidBrush( System.Drawing), який доступний з .NET Framework 1.1 замість SolidColorBrush( System.Windows.Media), доступного починаючи з .NET Framework 3.0.
BillyJoe

35
Brush brush = new SolidColorBrush(color);

Навпаки:

if (brush is SolidColorBrush colorBrush)
    Color color = colorBrush.Color;

Або щось подібне.

Це не всі пензлі - це кольори, але ви можете перетворити всі кольори на (SolidColor) пензлик.


Колір до кисті!
рейзерле

@raiserle: Для вашої інформації, раніше використовувався вміст запитання, I want to convert from Brush to Color in c#тоді як назва була навпаки.
НВ


18

Ви можете скористатися цим:

new SolidBrush(color)

де колір є приблизно таким:

Color.Red

або

Color.FromArgb(36,97,121))

або ...


2
Для зворотної сумісності ця відповідь краща, оскільки SolidBrush( System.Drawing) доступний з .NET Framework 1.1, тоді як SolidColorBrush( System.Windows.Media) доступний починаючи з .NET Framework 3.0.
BillyJoe

2

У мене було те саме питання і раніше, ось мій клас, який вирішив перетворення кольорів Використовуйте його та насолоджуйтесь:

Ось, іди, використовуй мій клас для перетворення кольорів

using System;
using System.Windows.Media;
using SDColor = System.Drawing.Color;
using SWMColor = System.Windows.Media.Color;
using SWMBrush = System.Windows.Media.Brush;

//Developed by امین امیری دربان
namespace APREndUser.CodeAssist
{
    public static class ColorHelper
    {
        public static SWMColor ToSWMColor(SDColor color) => SWMColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SDColor ToSDColor(SWMColor color) => SDColor.FromArgb(color.A, color.R, color.G, color.B);
        public static SWMBrush ToSWMBrush(SDColor color) => (SolidColorBrush)(new BrushConverter().ConvertFrom(ToHexColor(color)));
        public static string ToHexColor(SDColor c) => "#" + c.R.ToString("X2") + c.G.ToString("X2") + c.B.ToString("X2");
        public static string ToRGBColor(SDColor c) => "RGB(" + c.R.ToString() + "," + c.G.ToString() + "," + c.B.ToString() + ")";
        public static Tuple<SDColor, SDColor> GetColorFromRYGGradient(double percentage)
        {
            var red = (percentage > 50 ? 1 - 2 * (percentage - 50) / 100.0 : 1.0) * 255;
            var green = (percentage > 50 ? 1.0 : 2 * percentage / 100.0) * 255;
            var blue = 0.0;
            SDColor result1 = SDColor.FromArgb((int)red, (int)green, (int)blue);
            SDColor result2 = SDColor.FromArgb((int)green, (int)red, (int)blue);
            return new Tuple<SDColor, SDColor>(result1, result2);
        }
    }

}

1

Якщо ви працюєте з додатком, який містить суміш форм Windows і WPF, у вас може виникнути додаткове ускладнення при спробі перетворення System.Drawing.Color в System.Windows.Media.Color. Я не впевнений, чи є простіший спосіб зробити це, але я зробив це так:

System.Drawing.Color MyColor = System.Drawing.Color.Red;
System.Windows.Media.Color = ConvertColorType(MyColor);

System.Windows.Media.Color ConvertColorType(System.Drawing.Color color)
{
  byte AVal = color.A;
  byte RVal = color.R;
  byte GVal = color.G;
  byte BVal = color.B;

  return System.Media.Color.FromArgb(AVal, RVal, GVal, BVal);
}

Тоді ви можете скористатися однією з методів, згаданих раніше для перетворення на кисть.


0

Часто достатньо використовувати кисть братів або сестер або батьків для цієї мети, і це легко доступно в wpf шляхом отримання їх власності переднього плану або фону.

посилання: Control.Background

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.