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 값을 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 문서에서 나온 것입니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top