System.Drawing.Color具有toargb()方法,可以返回颜色的int表示。
在Silverlight中,我认为我们必须使用system.windows.media.color。它具有A,R,G,B成员,但没有返回单个值的方法。
如何实现toargb()?在system.drawing.color中,toargb()由

return (int) this.Value;  

system.windows.media.color具有fromargb(字节a,byte r,byte g,byte b)方法。如何将toargb()返回的INT分解为与FromArgb()一起使用?

感谢您的任何指示...

有帮助吗?

解决方案

短而快。没有额外的方法调用,但可以通过快速操作。

// 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));

其他提示

听起来您在这里问两个问题,让我再次刺伤它。无论如何,您都需要考虑使用 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);
}

并“将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);

希望这可以帮助。

只是一个简短的说明:

当直接调用color.toargb()而不是在标记的答案中使用bitshift-oserations时,“颜色”对象的整数表示对我来说更快4倍。因此,如果您可以访问.toargb(),请务必使用它!

线程创建者表示他无法访问它,因此当然,标记的答案仍然正确,Juse不要对其中声称的“快速操作”感到困惑。

请记住:颜色实例的颜色内部已保存为int值,因此toargb()只是返回它,同时将其访问其每个字节的每个字节访问(通过properties .a,.r。,.g。,.g。,.g。,.g。 。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top