converter de cor para pincel

110

Como faço para converter Colora Brushem C #?

kartal
fonte

Respostas:

139

Isto é para Colora Brush....

você não pode convertê-lo, você tem que fazer um novo pincel ....

SolidColorBrush brush = new SolidColorBrush( myColor );

agora, se você precisar dele em XAML, PODE fazer um conversor de valor personalizado e usá-lo em uma associação

Muad'Dib
fonte
8
Para compatibilidade com versões anteriores, seria melhor usar SolidBrush( System.Drawing), que está disponível desde o .NET Framework 1.1, em vez de SolidColorBrush( System.Windows.Media), disponível a partir do .NET Framework 3.0.
BillyJoe
35
Brush brush = new SolidColorBrush(color);

O contrário:

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

Ou algo assim.

A questão é que nem todos os pincéis são cores, mas você pode transformar todas as cores em um pincel (SolidColor).

HB
fonte
Cor para escovar!
raiserle de
@raiserle: Para sua informação, o conteúdo da pergunta costumava ser, I want to convert from Brush to Color in c#enquanto o título era o contrário.
HB
25
SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )
TruthOf42
fonte
18

você pode usar isto:

new SolidBrush(color)

onde a cor é algo assim:

Color.Red

ou

Color.FromArgb(36,97,121))

ou ...

Omid-RH
fonte
2
Para compatibilidade com versões anteriores, essa resposta é melhor, porque SolidBrush( System.Drawing) está disponível desde o .NET Framework 1.1, enquanto SolidColorBrush( System.Windows.Media) está disponível a partir do .NET Framework 3.0.
BillyJoe
2

Eu tive o mesmo problema antes, aqui está minha aula que resolveu conversões de cores Use e divirta-se:

Aqui está, use minha aula para conversão multicolorida

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);
        }
    }

}
Amin AmiriDarban
fonte
1

Se você estiver trabalhando com um aplicativo que possui uma combinação de Windows Forms e WPF, poderá ter a complicação adicional de tentar converter um System.Drawing.Color em um System.Windows.Media.Color. Não tenho certeza se existe uma maneira mais fácil de fazer isso, mas fiz desta forma:

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);
}

Então você pode usar uma das técnicas mencionadas anteriormente para converter para um pincel.

Jerry Pile
fonte
0

Geralmente, é suficiente usar o pincel do irmão ou dos pais para esse propósito, e isso está facilmente disponível no wpf por meio da recuperação de sua propriedade Foreground ou Background.

ref: Control.Background

Alexey Khoroshikh
fonte