convertir de la couleur au pinceau

110

Comment convertir un Coloren un Brushen C #?

kartal
la source

Réponses:

139

Ceci est pour Colorla Brush....

vous ne pouvez pas le convertir, vous devez créer un nouveau pinceau ...

SolidColorBrush brush = new SolidColorBrush( myColor );

maintenant, si vous en avez besoin en XAML, vous POUVEZ créer un convertisseur de valeur personnalisé et l'utiliser dans une liaison

Muad'Dib
la source
8
Pour une compatibilité descendante, il serait préférable d'utiliser SolidBrush( System.Drawing), disponible depuis .NET Framework 1.1, au lieu de SolidColorBrush( System.Windows.Media), disponible à partir de .NET Framework 3.0.
BillyJoe
35
Brush brush = new SolidColorBrush(color);

L'inverse:

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

Ou quelque chose comme ça.

Le point étant que tous les pinceaux ne sont pas des couleurs, mais vous pouvez transformer toutes les couleurs en un pinceau (SolidColor).

HB
la source
Couleur à brosser!
Raiserle
@raiserle: Pour votre information, le contenu de la question était autrefois I want to convert from Brush to Color in c#alors que le titre était l'inverse.
HB
25
SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )
TruthOf42
la source
18

vous pouvez utiliser ceci:

new SolidBrush(color)

où la couleur est quelque chose comme ça:

Color.Red

ou

Color.FromArgb(36,97,121))

ou ...

Omid-RH
la source
2
Pour la compatibilité descendante, cette réponse est meilleure, car SolidBrush( System.Drawing) est disponible depuis .NET Framework 1.1, tandis que SolidColorBrush( System.Windows.Media) est disponible à partir de .NET Framework 3.0.
BillyJoe
2

J'ai eu le même problème avant, voici ma classe qui a résolu les conversions de couleurs Utilisez-le et profitez-en:

Here U go, Use my Class to Multi Color Conversion

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
la source
1

Si vous travaillez avec une application qui a un mélange de Windows Forms et WPF, vous pourriez avoir la complication supplémentaire d'essayer de convertir un System.Drawing.Color en System.Windows.Media.Color. Je ne sais pas s'il existe un moyen plus simple de le faire, mais je l'ai fait de cette façon:

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

Ensuite, vous pouvez utiliser l'une des techniques mentionnées précédemment pour convertir en pinceau.

Jerry Pile
la source
0

Il est souvent suffisant d'utiliser le pinceau du frère ou du parent à cette fin, et c'est facilement disponible dans wpf via la récupération de leur propriété Foreground ou Background.

réf: Control.Background

Alexey Khoroshikh
la source