Num*_*er8 10 c# silverlight colors argb
System.Drawing.Color有一个ToArgb()方法来返回颜色的Int表示.
在Silverlight中,我认为我们必须使用System.Windows.Media.Color.它有A,R,G,B成员,但没有返回单个值的方法.
我该如何实现ToArgb()?在System.Drawing.Color中,ToArgb()由
return (int) this.Value;
Run Code Online (Sandbox Code Playgroud)
System.Windows.Media.Color有一个FromArgb(字节A,字节R,字节G,字节B)方法.如何分解ToArgb()返回的Int以与FromArgb()一起使用?
谢谢你的任何指示......
Ren*_*lte 32
短而快 没有额外的方法调用,但具有快速操作.
// 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));
Run Code Online (Sandbox Code Playgroud)
听起来你在这里问两个问题,让我再次尝试一下.无论如何,你会想要使用这个BitConverter
类.
从这个页面:
32位ARGB值的字节顺序是AARRGGBB.
因此,要实现ToArgb()
,您可以编写一个类似于此的扩展方法:
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);
}
Run Code Online (Sandbox Code Playgroud)
要"分解由ToArgb()返回的Int以与FromArgb()一起使用",您可以这样做:
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);
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.