87 votes

Définir les valeurs de couleur System.Drawing.Color

Bonjour comment définir les valeurs R G B dans System.Drawing.Color.G ?

ce qui ressemble à System.Drawing.Color.G=255; n'est pas autorisé car c'est en lecture seule

La propriété ou l'indexeur 'System.Drawing.Color.G' ne peut pas être assigné car c'est en lecture seule

Je dois juste créer un objet Color en assignant des valeurs personnalisées de R G B

1 votes

Notez pour les autres personnes qui consultent cette question, ce problème ne concerne que System.Drawing. Si vous utilisez WPF, vous devriez utiliser System.Windows.Media. Pour plus d'informations, consultez ce post : stackoverflow.com/questions/2428930/…

158voto

Darin Dimitrov Points 528142

Vous pouvez créer une couleur en utilisant la méthode statique FromArgb:

Color redColor = Color.FromArgb(255, 0, 0);

Vous pouvez également spécifier l'alpha en utilisant la surcharge suivante.

0 votes

Propre et simple.

13voto

Cody Gray Points 102261

La structure Color est immutable (comme toutes les structures devraient vraiment l'être), ce qui signifie que les valeurs de ses propriétés ne peuvent pas être modifiées une fois que cette instance particulière a été créée.

À la place, vous devez créer une nouvelle instance de la structure avec les valeurs de propriété que vous voulez. Puisque vous voulez créer une couleur en utilisant ses valeurs de composante RVB, vous devez utiliser la méthode FromArgb:

Color myColor = Color.FromArgb(100, 150, 75);

2 votes

-1 pour "comme toutes les structures devraient vraiment être". Bonne chance pour écrire du code C.

12 votes

@Dariusz Je ne vois pas de balise [c] sur cette question. J'écris du code C tout le temps, je ne le fais juste pas de la même façon que je le fais avec mon code C#.

10voto

Vous devez utiliser la méthode Color.FromArgb pour créer une nouvelle structure de couleur

var newColor = Color.FromArgb(0xCC,0xBB,0xAA);

5voto

Stecya Points 12073

Vous pouvez créer une extension pour changer juste un composant de couleur

static class ColorExtension
{
    public static Color ChangeG(Color this color,byte g) 
    {
        return Color.FromArgb(color.A,color.R,g,color.B);
    }
}

ensuite, vous pouvez utiliser ceci :

  yourColor = yourColor.ChangeG(100);

4 votes

Oui, mais ne fais pas ça. Cela cache le fait que vous créez en réalité une nouvelle instance de la structure, ce qui est très déroutant pour quelqu'un qui ne comprend pas déjà l'immuabilité. Et assez inutile pour quelqu'un qui le comprend.

1 votes

Tout d'abord, vous DEVEZ comprendre l'immutabilité. Le code devient plus moche si vous écrivez yourColor = Color.FromArgb(yourColor.A, yourColor.R, 100, yourColor.B); tout le temps. Il est donc utile.

1 votes

Difficile de comprendre ce que vous trouvez laid dans le code qui est explicite.

3voto

Abdul Muqtadir Points 3887

Vous pourriez faire :

Color c = Color.FromArgb(red, green, blue); //red, green et blue sont des variables entières contenant les composantes rouge, verte et bleue

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X