Renkten fırçaya dönüştür


110

Nasıl dönüştürmek yapmak Colora BrushC #?

Yanıtlar:


139

Bu içindir Colorüzere Brush....

dönüştüremezsin, yeni bir fırça yapmalısın ...

SolidColorBrush brush = new SolidColorBrush( myColor );

şimdi, buna XAML'de ihtiyacınız varsa, özel bir değer dönüştürücü yapabilir ve bunu bir bağlamada kullanabilirsiniz


8
Geriye dönük uyumluluk için, .NET Framework 3.0'dan itibaren kullanılabilen ( ) yerine .NET Framework 1.1'den beri mevcut olan SolidBrush( System.Drawing) kullanmak daha iyi olacaktır . SolidColorBrushSystem.Windows.Media
BillyJoe

35
Brush brush = new SolidColorBrush(color);

Diğer taraftan:

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

Ya da böyle bir şey.

Tüm fırçalar renk değildir, ancak tüm renkleri bir (SolidColor) Fırçaya dönüştürebilirsiniz.


Fırçalanacak Renk!
2018

@raiserle: Bilginize, soru içeriği I want to convert from Brush to Color in c#, başlık tam tersi durumdayken kullanılırdı .
HB

25
SolidColorBrush brush = new SolidColorBrush( Color.FromArgb(255,255,139,0) )

18

bunu kullanabilirsiniz:

new SolidBrush(color)

renk böyle bir şey olduğunda:

Color.Red

veya

Color.FromArgb(36,97,121))

veya ...


2
Geriye dönük uyumluluk için, bu yanıt daha iyidir, çünkü SolidBrush( System.Drawing), .NET Framework 1.1'den beri mevcutken SolidColorBrush( System.Windows.Media), .NET Framework 3.0'dan itibaren mevcuttur.
BillyJoe

2

Daha önce de aynı sorunu yaşadım, işte renk dönüşümlerini çözen sınıfım Kullanın ve keyfini çıkarın:

İşte Başlayın, Sınıfımı Çok Renkli Dönüştürmeye Kullanın

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 Forms ve WPF karışımına sahip bir uygulamayla çalışıyorsanız, bir System.Drawing.Color'u System.Windows.Media.Color'a dönüştürmeye çalışmak gibi ek bir zorluk yaşayabilirsiniz. Bunu yapmanın daha kolay bir yolu olup olmadığından emin değilim, ama şu şekilde yaptım:

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

Daha sonra, bir Brush'a dönüştürmek için daha önce bahsedilen tekniklerden birini kullanabilirsiniz.


0

Genellikle kardeşin veya ebeveynin fırçasını bu amaçla kullanmak yeterlidir ve bu, Ön Plan veya Arka Plan özelliklerini alarak wpf'de kolayca kullanılabilir.

ref: Control.Background

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.