Question

System.Drawing.Color a une méthode ToArgb () pour renvoyer la représentation de la couleur Int.
Dans Silverlight, je pense que nous devons utiliser System.Windows.Media.Color. Il a A, R, G, B membres, mais pas de méthode pour retourner une valeur unique.
Comment puis-je mettre en œuvre ToArgb ()? Dans System.Drawing.Color, ToArgb () consiste en

return (int) this.Value;  

System.Windows.Media.Color a une méthode FromArgb (octet A, R octet, l'octet G, octet B). Comment puis-je décomposer le Int retourné par ToArgb () à utiliser avec FromArgb ()?

Merci pour tous les pointeurs ...

Était-ce utile?

La solution

court et rapide. Sans un appel de méthode supplémentaire, mais avec des opérations rapides.

// To integer
int iCol = (color.A << 24) | (color.R << 16) | (color.G << 8) | color.B;

// From integer
Color color = Color.FromArgb((byte)(iCol >> 24), 
                             (byte)(iCol >> 16), 
                             (byte)(iCol >> 8), 
                             (byte)(iCol));

Autres conseils

On dirait que vous vous posez deux questions ici, permettez-moi de prendre un autre coup à lui. Peu importe, vous aurez envie de regarder dans la BitConverter classe.

De cette page :

  

L'ordre des octets du ARVB 32 bits   La valeur est AARRGGBB.

Alors, pour mettre en œuvre ToArgb(), vous pouvez écrire un méthode d'extension qui fait quelque chose comme ceci:

public static int ToArgb(this System.Windows.Media.Color color)
{
   byte[] bytes = new byte[] { color.A, color.R, color.G, color.B };
   return BitConverter.ToInt32(bytes, 0);
}

Et pour "décomposer le Int retourné par ToArgb () à utiliser avec FromArgb ()", vous pouvez faire ceci:

byte[] bytes = BitConverter.GetBytes(myColor.ToArgb());
byte aVal = bytes[0];
byte rVal = bytes[1];
byte gVal = bytes[2];
byte bVal = bytes[3];  

Color myNewColor = Color.FromArgb(aVal, rVal, gVal, bVal);

Hope this helps.

Juste une petite note:

Récupération de la représentation entière d'un objet « Couleur » semble être 4 fois plus rapide pour moi lorsque vous appelez color.ToArgb () au lieu d'utiliser les opérations de BitShift dans la réponse marquée. Donc, si vous avez accès à .ToArgb (), utilisez toujours!

Le créateur de fil a déclaré qu'il n'a pas accès, donc bien sûr la réponse marquée est toujours correcte, Juse ne pas confondre les « opérations revendiquées rapide » en elle.

Il suffit de garder à l'esprit. La couleur de l'instance couleur est interne déjà enregistrée en tant que valeur int, alors ToArgb () est juste de retour, tout en accédant à chaque octet unique à (par des propriétés .A .R,. G., .B), puis les ré-ensemble se déplace par un peu opérateurs de bits dans un cercle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top