Non, il n'existe pas de GreyColor dans .NET. Un GreyColor est juste un cas particulier d'une couleur, de la même manière que le vert citron est un cas particulier d'une couleur. Il n'y a pas besoin de compliquer le modèle.
Il sont certains pre-defined colors que vous pouvez utiliser si vous pouvez trouver la couleur que vous cherchez. Ceux-ci renvoient simplement un objet Color qui a une valeur ARGB correspondant à la couleur prédéfinie, donc ils ne font rien de différent de ce que fait votre code ci-dessus. Ils sont simplement là pour la commodité du programmeur qui ne peut pas ou ne veut pas se souvenir du modèle de couleur RVB pas si intuitif.
Vous semblez être préoccupé par le coût potentiel ou la redondance de la création d'un objet Color, mais il y a plusieurs raisons pour lesquelles cela ne devrait pas être un problème. Vous pouvez considérer la méthode FromArgb comme un constructeur surchargé pour l'objet Color
: c'est la manière dont vous créez une couleur autre que celles prédéfinies.Il crée simplement l'objet de couleur défini comme valeurs RVB que vous spécifiez. En fait, il n'y a vraiment aucun autre moyen de représenter une couleur (mis à part les modèles de couleurs alternatifs tels que HSV, mais même alors vous devez spécifier trois valeurs séparées: une teinte de 0, une saturation de 0 et une valeur de 39). Nous, humains, pouvons décrire les couleurs de manière beaucoup plus abstraite, mais un ordinateur ne comprend pas vraiment ces choses ou ne s'en soucie pas vraiment. Le documentation pour la structure de couleur elle-même explique qu'il ne représente que les valeurs RVB, avec la valeur alpha (transparence). C'est un très petit objet qui contient environ 4 valeurs d'octets. Et c'est exactement la façon dont la couleur à laquelle vous passez la couleur (Bitmap.SetPixel
) va dessiner la couleur, en fonction de ces valeurs rouges, vertes et bleues.
Il est également intéressant de souligner que Color
est une structure, qui est un type de valeur, plutôt qu'un type de référence. Cela signifie, among other things, qu'il vit en ligne, partout où votre variable est définie. Il ne pointe pas vers un autre objet, il vit localement sur la pile plutôt que sur le tas, et the stack is cheap. Cela en fait au moins un peu moins cher qu'un type de référence tel qu'une classe.
Enfin, je m'en voudrais de ne pas souligner que ce type de micro-optimisation va rarement faire une différence dans la performance de votre code.
En bref, non, il n'y a rien de tel, mais ce n'est pas un problème.
Quel type de "quelque chose"? Votre question est très vague. – Oded
Eh bien, mon «problème» est. Est-ce en utilisant cette méthode, j'ai un niveau de gris, je le convertis en une couleur ('Color.FromArgb()'), puis laissez le programme le convertir à nouveau en niveaux de gris. –
Je ne l'ai pas compris, que voulez-vous dire? –