سؤال

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 تتحرك نوعا ما في دائرة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top