Silverlight에서는 System.Drawing.Color와 System.Windows.Media.Color를 변환하는 가장 좋은 방법은 무엇입니까?
-
03-07-2019 - |
문제
System.Drawing.Color에서 Silverlight System.windows.media.color로 변환하려고합니다. 나는 실제로 서비스를 통해이 색상을 전달하려고 노력하고 있습니다.
System.Drawing.Color는 와이어를 통과하여 ARGB 값을 독립적으로 직렬화하지 않습니다.
ArgB 값을 32 비트 int로 변환 할 수 있습니다.
[DataMember]
public int MyColor { get { return Color.Red.ToArgb(); } set {} }
그러나 System.windows.media.color에 해당 메소드가 표시되지 않습니다.
이것을하는 가장 좋은 방법은 무엇입니까?
올바른 솔루션이 없습니다
다른 팁
System.Drawing.Color의 32 비트 표현은 설정된 바이트 주문 (예 : ARGB)을 가정하고 각 채널은 8 비트로 표시됩니다.
Silverlight는 이러한 가정을하지 않습니다. 대신 Media.Color는 4 개의 32 비트 플로팅 포인트 값으로 저장되며 순서는 색상 프로파일을 기반으로합니다.
system.drawing.color에서 media.color 값을 만들려면 FromArgb / fromrgb 메소드를 사용하고 4 개의 별도 구성 요소를 전달해야합니다.
필요한 경우 결합 된 32 비트 값에서 구성 요소를 사용하여 이러한 구성 요소를 얻을 수 있습니다. 당신은이 색상 값의 바이트 순서를 알고 있습니다.
감사. 육각 표기로 출력하기 위해 .tohtml 메소드를 추가해야했지만 그게 내가 한 일입니다.
[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 육각을 단단한 브러시로 변환합니다.
그것은 작동하지만 추악하고 내가 가정했던 것에 대해 다소 복잡해 보인다. 아마도 다음 릴리스에서.
이것이 무엇입니다 Microsoft는 말한다 -하지만 나는 그것을 추천하지 않을 것입니다.
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 문서에서 나온 것입니다!