Frage

System.Drawing.Color hat eine ToArgb () -Methode der Int Darstellung der Farbe zurückzukehren.
In Silverlight, ich denke, wir System.Windows.Media.Color verwenden. Es hat A, R, G, B-Mitglieder, aber keine Methode, um einen einzelnen Wert zurück.
Wie kann ich ToArgb () implementieren? In System.Drawing.Color, ToArgb () besteht aus

return (int) this.Value;  

hat einen System.Windows.Media.Color FromArgb (Byte A, R Byte, Byte-G, B-Byte) -Methode. Wie zersetzen ich die Int von ToArgb () zurück zur Verwendung mit FromArgb ()?

Danke für alle Hinweise ...

War es hilfreich?

Lösung

Kurz und schnell. Ohne eine zusätzliche Methode aufrufen, aber mit schnellen Operationen.

// To integer
int iCol = (color.A << 24) | (color.R << 16) | (color.G << 8) | color.B;

// From integer
Color color = Color.FromArgb((byte)(iCol >> 24), 
                             (byte)(iCol >> 16), 
                             (byte)(iCol >> 8), 
                             (byte)(iCol));

Andere Tipps

Sounds wie Sie zwei Fragen hier, lassen Sie mich es einen weiteren Stich nehmen. Unabhängig davon, werden Sie die BitConverter Klasse.

diese Seite :

  

Die Byte-Reihenfolge der 32-Bit-ARGB   Wert ist aarrggbb.

So implementieren ToArgb(), könnten Sie eine Erweiterungsmethode , die so etwas wie dies funktioniert:

public static int ToArgb(this System.Windows.Media.Color color)
{
   byte[] bytes = new byte[] { color.A, color.R, color.G, color.B };
   return BitConverter.ToInt32(bytes, 0);
}

Und zu "zersetzen die Int zurück von ToArgb (), um die Verwendung mit FromArgb ()", könnte man dies tun:

byte[] bytes = BitConverter.GetBytes(myColor.ToArgb());
byte aVal = bytes[0];
byte rVal = bytes[1];
byte gVal = bytes[2];
byte bVal = bytes[3];  

Color myNewColor = Color.FromArgb(aVal, rVal, gVal, bVal);

Hope, das hilft.

Nur eine kurze Anmerkung:

Abrufen der ganzzahligen Darstellung eines „Farbe“ Objekt scheint für mich 4 mal schneller zu sein, wenn color.ToArgb () direkt anstatt die bitshift-Operationen in der markierten Antwort fordern. Also, wenn Sie den Zugriff auf .ToArgb () haben, immer das verwenden!

Der Threadersteller erklärte er keinen Zugriff darauf hat, so natürlich die markierte Antwort immer noch richtig ist, juse nicht durch die beanspruchten „schnelle Operationen“ in ihm verwirrt.

Nur im Kopf behalten. Die Farbe der Color-Instanz intern bereits als int-Wert gespeichert, so ToArgb () es gerade zurückkehrt, während jedes einzelnes Byte davon Zugriff (durch Eigenschaften .A, .R. G., .B) und dann wieder ensemble sie durch bitshifting ist irgendwie in einem Kreis bewegt.

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