In Silverlight, was ist die beste Art und Weise zwischen einem System.Drawing.Color und einem System.Windows.Media.Color zu konvertieren?

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

  •  03-07-2019
  •  | 
  •  

Frage

Ich versuche, von einem System.Drawing.Color zu einer Silverlight-System.Windows.Media.Color zu konvertieren. Ich versuche tatsächlich diese Farbe über einen Dienst zu übergeben.

Die System.Drawing.Color, über den Draht geführt, serialisiert nicht den ARGB-Wert unabhängig.

Ich kann den ARGB-Wert auf ein 32-Bit-int konvertieren

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

Aber ich habe keine entsprechenden Verfahren in System.Windows.Media.Color sehen das zurück zu konvertieren.

Was ist der beste Weg, dies zu tun?

Keine korrekte Lösung

Andere Tipps

Die 32-Bit-Darstellung von System.Drawing.Color nimmt einen Satz Byte-Reihenfolge (z.B. ARGB), und daß jeder Kanal durch 8-Bits dargestellt wird.

Silverlight nicht diese Annahmen getroffen werden. Stattdessen wird Media.Color als vier 32-Bit-Gleitkomma-Werte gespeichert und die Ordnung auf dem Farbprofil basiert.

Um einen Media.Color Wert aus einer System.Drawing.Color erstellen Sie die FromArgb / FromRgb Methoden verwenden sollten und in den vier getrennten Komponenten bestehen.

Bei Bedarf können Sie diese Komponenten erhalten, indem verUNDen Sie die Komponenten aus dem kombinierten 32-Bit-Wert. Sie wissen (oder darüber) die Reihenfolge des Bytes in diesem Farbwert, der bekannt ist, dass Silverlight nicht hat.

Danke. Das ist ziemlich viel, was ich tat, aber ich hatte die .ToHtml Methode, um die Ausgabe in Hex Schreibweise hinzuzufügen:

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

Damit auf der anderen Seite, konnte ich den Code verwenden, um von hier ausgeliehen http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2008/04/29/colorconverter-in-silverlight-2.aspx die hex an einen festen Bürste zu konvertieren.

Es funktioniert, aber es ist hässlich und scheint ziemlich kompliziert für das, was ich angenommen hatte, zu Unrecht offenbar, eine einzige Methode wäre. Vielleicht in der nächsten Version.

Dies ist, was Microsoft sagt zu tun -. aber ich würde es nicht empfehlen

 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;

Das ist völlig verrückt, wenn Sie mich fragen - aber das ist von der MS-Dokumentation

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top