En Silverlight, ¿cuál es la mejor manera de convertir entre un System.Drawing.Color y un System.Windows.Media.Color?

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

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy intentando convertir de un System.Drawing.Color a un Silverlight System.Windows.Media.Color. De hecho, estoy intentando pasar este color a través de un servicio.

El System.Drawing.Color, pasado el cable, no serializa el valor argb de forma independiente.

Puedo convertir el valor argb a un int de 32 bits

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

Pero no veo ningún método correspondiente en System.Windows.Media.Color para convertir eso de nuevo.

¿Cuál es la mejor manera de hacer esto?

No hay solución correcta

Otros consejos

La representación de 32 bits de System.Drawing.Color asume un orden de bytes establecido (por ejemplo, ARGB) y que cada canal está representado por 8 bits.

Silverlight no hace estas suposiciones. En su lugar, Media.Color se almacena como cuatro valores de punto flotante de 32 bits y el orden se basa en el perfil de color.

Para crear un valor de Media.Color desde un System.Drawing.Color, debe usar los métodos FromArgb / FromRgb y pasar los cuatro componentes separados.

Si es necesario, puede obtener estos componentes AND'ing los componentes del valor combinado de 32 bits. Usted sabe (o puede averiguar) el orden de los bytes en este valor de color, que es el conocimiento que Silverlight no tiene.

Gracias. Eso es más o menos lo que hice, aunque tuve que agregar el método .ToHtml para mostrarlo en notación 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{}   
}  

De modo que, por otro lado, podría usar el código tomado de aquí http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/04/29/colorconverter-in-silverlight-2.aspx para convertir el hex en un pincel sólido.

Funciona, pero es feo y parece bastante complicado, ya que lo que asumí, obviamente, sería un método único. Tal vez en la próxima versión.

Esto es lo que Microsoft dice hacer , pero no lo recomendaría.

 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;

Eso es completamente una locura si me preguntas, ¡pero eso es de los documentos de MS!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top