سؤال
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 (Byte A ، Byte R ، Byte G ، Byte B). كيف يمكنني تحلل INT الذي تم إرجاعه بواسطة TOARGB () لاستخدامه مع 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
صف دراسي.
من هذه الصفحة:
الترتيب البايت لقيمة ARGB 32 بت هو 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);
}
و "تحلل INT الذي تم إرجاعه بواسطة TOARGB () لاستخدامه مع 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);
أتمنى أن يساعدك هذا.
مجرد ملاحظة قصيرة:
يبدو أن استرداد تمثيل عدد صحيح لكائن "اللون" أسرع 4 مرات بالنسبة لي عند استدعاء اللون. toargb () مباشرة بدلاً من استخدام عمليات bitshift في الإجابة المحددة. لذلك إذا كان لديك إمكانية الوصول إلى .toargb () ، استخدم ذلك دائمًا!
صرح منشئ الخيط بأنه لا يصل إليه ، لذلك بالطبع لا تزال الإجابة المحددة صحيحة ، لا تخلط الهزلة من "العمليات السريعة" التي تم المطالبة بها.
فقط ضع في اعتبارك: يتم حفظ لون مثيل اللون داخليًا بالفعل كقيمة int ، لذا فإن TOARGB () يعيده فقط ، مع الوصول إلى كل بايت واحد منه (بواسطة الخصائص .A ، .r. ،. .b) ثم إعادة توجيهها عن طريق bitshifting تتحرك نوعا ما في دائرة.