[英]Implementing ToArgb()
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,字節R,字節G,字節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-運算時,檢索“ Color”對象的整數表示似乎快4倍。 因此,如果您可以訪問.ToArgb(),請始終使用它!
線程創建者表示他無法訪問它,因此標記的答案當然仍然是正確的,請不要為其中的聲明的“快速操作”感到困惑。
請記住:Color實例的顏色已經在內部保存為int值,因此ToArgb()僅在返回它的同時返回它(通過屬性.A,.R。,。G。, .B),然后通過移位將它們重新組合在一起,這有點像繞圈了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.