في Silverlight ، ما هي أفضل طريقة للتحويل بين system.drawing.color و system.windows.media.color؟

StackOverflow https://stackoverflow.com/questions/404002

  •  03-07-2019
  •  | 
  •  

سؤال

أحاول التحويل من system.drawing.color إلى silverlight system.windows.media.color. أحاول بالفعل تمرير هذا اللون من خلال الخدمة.

System.drawing.color ، الذي تم تمريره فوق السلك ، لا يقوم بتسلسل قيمة ARGB بشكل مستقل.

يمكنني تحويل قيمة ARGB إلى int 32 بت

[DataMember]  
public int MyColor { get { return Color.Red.ToArgb(); } set {} }  

لكنني لا أرى أي طريقة مقابلة في system.windows.media.color لتحويل ذلك مرة أخرى.

ما هي أفضل طريقة للقيام بذلك؟

لا يوجد حل صحيح

نصائح أخرى

تمثل التمثيل 32 بت من system.drawing.color ترتيب بايت محدد (EG ARGB) وأن كل قناة ممثلة بـ 8 بتات.

Silverlight لا تجعل هذه الافتراضات. بدلاً من ذلك ، يتم تخزين media.color كأربعة قيم عائمة 32 بت وتستند الطلب إلى ملف تعريف اللون.

لإنشاء قيمة media.color من system.drawing.color ، يجب عليك استخدام أساليب FromARGB / FromRGB والتمرير في المكونات الأربعة المنفصلة.

إذا لزم الأمر ، يمكنك الحصول على هذه المكونات من خلال وإنشاء المكونات من القيمة 32 بتات. أنت تعرف (أو يمكنك معرفة ذلك) ترتيب البايتات في قيمة اللون هذه ، وهو معرفة أن Silverlight لا تملكها.

شكرًا. هذا ما فعلته إلى حد كبير ، على الرغم من أنني اضطررت إلى إضافة طريقة .THTML من أجل إخراجها في تدوين السداسي:

[DataMember]
public string MyColor { 
    get { 
        return ColorTranslator.ToHtml(  
                   Color.FromArgb(  
                       Color.Red.A, 
                       Color.Red.R, 
                       Color.Red.G, 
                       Color.Red.B  
            )); 
     } 
     private set{}   
}  

بحيث على الجانب الآخر ، يمكنني استخدام الكود المستعارة من هنا http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/04/29/ColorConverter-in-silverlight-2.aspx لتحويل السداسية إلى فرشاة صلبة.

إنه يعمل ولكنه قبيح ويبدو أنه معقد إلى حد ما لما افترضته ، من الواضح أنه سيكون طريقة واحدة. ربما في الإصدار التالي.

هذا هو ما تقول مايكروسوفت للقيام بها - لكنني لا أوصي به.

 String xamlString = "<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" Background=\"MistyRose\"/>";
  Canvas c = (Canvas) System.Windows.Markup.XamlReader.Load(xamlString);
  SolidColorBrush mistyRoseBrush = (SolidColorBrush) c.Background;
  Color mistyRose = mistyRoseBrush.Color;

هذا مجنون تمامًا إذا سألتني - ولكن هذا من مستندات MS!

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