Récemment, je suis tombé sur un graphique de couleur .NET basé sur la valeur de leur teinte et de leur luminosité. Quel trait moi est le graphique de niveaux de gris. Par exemple, Darkgray est en fait plus léger puis gris? De plus, je ne peux voir aucune logique dans la gradation des valeurs RVB, il passe de 0 à 105 à 128?
public sealed class GrayScaleBrushes { private static SolidBrush pct05 = null; public static SolidBrush Pct05 { get { if (pct05 == null) { int rgbVal = GetRgbValFromPct( 5 ); pct05 = new SolidBrush(Color.FromArgb(rgbVal, rgbVal, rgbVal)); } return pct05; } } private static int GetRgbValFromPct(int pct) { return 255 - (int)(((float)pct / 100f) * 255f); } }
3 Réponses :
Les brosses code> Les classes CODE> sont statiques ne peuvent que fuir un petit nombre de ressources correspondant au nombre de couleurs définies afin que ces ressources soient nettoyées lors de la sortie de l'application. Nous vous préoccupez plutôt de veiller à ce que vos pinceaux ne soient pas réellement créés, à moins qu'ils ne soient référencés. Cela accélérera le démarrage et assurera que les couleurs inutilisées ne consomment pas de ressources. P>
Le Pour accomplir cela, vous pouvez réécrire votre fonction peut-être comme ceci: p> Cette solution créera les échelles de gris au besoin, mais par les coûts de la vérification du mais Je pense que dans ce cas, il suffit d'une question de goût, de caustes ni de la vitesse ni de la mémoire ne sera un vrai problème dans les deux cas. P> P> SafeNativemethods code> est dans ce cas simplement un cache simple qui contient une copie de la brosse. Donc, un deuxième appel à la propriété Getter ne créera pas une nouvelle instance. Au lieu de cela, il retournera toujours le même pinceau.
null code> chaque fois qu'il est appelé. Vous pouvez accomplir ce problème vitesse em> en le modifiant à nouveau un problème de mémoire en prenant une approche comme ceci: p>
Je recommanderais ce qui suit: p>
Créer une classe statique grisalcalebrushes p>
créer un dictionnaire statique avec le pourcentage d'intensité (int) comme clé, p>
Créer une seule propriété Static Indexé 'PCT' que vous utiliseriez comme grisscalebrushes.pct [10] qui retournerait l'entrée du dictionnaire. P>
Maintenant, vous pourriez soit faire comme Oliver a dit et crée les entrées de dictionnaire à la volée telle qu'elles sont appelées, ou vous pouvez utiliser un constructeur statique pour boucler les 20 entrées et les ajouter au dictionnaire. P>
Cette méthode WOUD vous permet de créer et de conserver les 20 propriétés impaires. Bravo. P>
Pour la raison
Darkgray> Grey Code>, voir Wikipedia: EN.Wikipedia .org / wiki / ...