10

System.Drawing.Color には、色の Int 表現を返す ToArgb() メソッドがあります。
Silverlight では、System.Windows.Media.Color を使用する必要があると思います。A、R、G、B のメンバーがありますが、単一の値を返すメソッドはありません。
ToArgb() を実装するにはどうすればよいですか? System.Drawing.Color では、ToArgb() は

return (int) this.Value;  

System.Windows.Media.Color には FromArgb(byte A, byte R, byte G, byte B) メソッドがあります。ToArgb() によって返された Int を分解して FromArgb() で使用するにはどうすればよいですか?

ご指摘ありがとうございます...

4

3 に答える 3

34

短くて速い。余分なメソッド呼び出しはありませんが、操作は高速です。

// 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));
于 2010-04-22T17:21:37.687 に答える
5

ここで 2 つの質問をしているようですね。もう一度質問させてください。BitConverterとにかく、クラスの使用を検討する必要があります。

このページから:

32 ビット ARGB 値のバイト順は AARRGGBB です。

したがって、 を実装するには、次のような拡張メソッドToArgb()を作成できます。

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);
}

そして、「ToArgb() によって返された Int を分解して FromArgb() で使用する」には、次のようにします。

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);

お役に立てれば。

于 2010-04-22T15:52:28.517 に答える