Em Silverlight, qual é a melhor maneira de converter entre um sistema.drawing.color e um sistema.windows.media.color?

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

  •  03-07-2019
  •  | 
  •  

Pergunta

Estou tentando converter de um sistema.drawing.color para um sistema Silverlight.windows.media.color. Na verdade, estou tentando passar essa cor através de um serviço.

O System.Drawing.Color, passou por cima do fio, não serializa o valor do ARGB de forma independente.

Eu posso converter o valor argb em um int 32 bits

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

Mas não vejo nenhum método correspondente no System.windows.media.color para converter isso de volta.

Qual é a melhor maneira de fazer isso?

Nenhuma solução correta

Outras dicas

A representação de 32 bits de System.Drawing.Color assume uma ordem de byte definida (por exemplo, argb) e que cada canal é representado por 8 bits.

Silverlight não faz essas suposições. Em vez disso, o Media.color é armazenado como quatro valores de ponto flutuante de 32 bits e a ordem é baseada no perfil de cores.

Para criar um valor mídia.color a partir de um system.drawing.color, você deve usar os métodos FromArgB / FromRGB e passar nos quatro componentes separados.

Se necessário, você pode obter esses componentes e eliminando os componentes do valor combinado de 32 bits. Você sabe (ou pode descobrir) a ordem dos bytes nesse valor de cor, o que é o conhecimento que o Silverlight não possui.

Obrigado. Foi isso que eu fiz, embora tivesse que adicionar o método .tohtml para produzi -lo na notação hexadecimal:

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

Para que, por outro lado, eu poderia usar o código emprestado daqui http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/04/29/colorconverter-in-silverlight-2.aspx Para converter o hexágono em um pincel sólido.

Funciona, mas é feio e parece bastante complicado pelo que eu havia assumido, obviamente, seria um único método. Talvez no próximo lançamento.

Isso é o que Microsoft diz para fazer - mas eu não recomendaria.

 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;

Isso é completamente insano se você me perguntar - mas isso é do MS Docs!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top