単純勾配が等しい部分に範囲の線形分割を行います。
たとえば、赤い部分だけを見て、0〜250(10進数)を5ステップで表示したい場合、各セクションは((250 - 0)/(5 - 1) )= 62.5。
0,62.5,125,187.5,250のようになります。
ここで行う必要があることは、各コンポーネントでこの線形除算を繰り返すことだけです。アルファチャンネルColor
データ構造は、あなたの0x666666の場合には反映されないアルファチャンネル値を含むことを
について注
。テンプレート0xRRGGBBの価値を考慮し、アルファチャンネルが0xFF(つまり完全に不透明)であると仮定すると、すべてが良好です。
グラデーションにアルファチャンネルを含める場合(ここのすべての例に示されているように)、テンプレート0xAARRGGBBの場合、アルファチャンネルは0になります。つまり、色は完全に透明(目に見えない)。
UINTからColor
Contructing
一つ迷惑な事はおよそColor.FromArgb()
ではなくuint
のint
値を受け入れることです。したがって、たとえば0xFF666666でそれを与えると、例外と例外がスローされます。
はこれを克服するために、我々は我々の手には、いくつかのビットシフトで汚いする必要があります。 private static Color GetColorFromArgb(uint colorValue)
{
Color color = Color.FromArgb(
(int)((colorValue & 0xFF000000) >> 24),
(int)((colorValue & 0x00FF0000) >> 16),
(int)((colorValue & 0x0000FF00) >> 8),
(int)((colorValue & 0x000000FF))
);
return color;
}
はEDIT:GetColorFromArgb
はあなたがRGBに進コードに変換する方法を疑問に」答えるために
について説明しました? "の場合、GetColorFromArgb
は既に16進数をR、G、Bに変換するだけでなく、アルファチャンネル情報も追加します。
GetColorFromArgb
の入力は32ビットの符号なし整数です。 16進表現を見ると、テンプレートは0xAARRBBGGです。
GetColorFromArgb
は、ビットマスクとビットシフトを使用してコンポーネントを順番に抽出し、次にColor.FromArgb(int a, int r, int g, int b)
を呼び出します。質問は、アルファチャンネルを無視する方法だった場合、あなたはアルファ情報を抽出しないGetColorFromRGB()
メソッドを作成することができます
private static Color GetColorFromArgb(uint colorValue)
{
int a = (int)((colorValue & 0xFF000000) >> 24);
int r = (int)((colorValue & 0x00FF0000) >> 16);
int g = (int)((colorValue & 0x0000FF00) >> 8);
int b = (int)(colorValue & 0x000000FF);
Color color = Color.FromArgb(a, r, g, b);
return color;
}
、代わりに渡します。ここでは
は
GetColorFromArgb
のより精巧なバージョンです固定値:あなたは0xRRGGBB形式の値を使用するので、あなたの代わりにの
int
を使用することができることを
が
private static Color GetColorFromRGB(int colorValue)
{
int a = 0xFF; // Fully opaque
int r = (int)((colorValue & 0x00FF0000) >> 16);
int g = (int)((colorValue & 0x0000FF00) >> 8);
int b = (int)(colorValue & 0x000000FF);
Color color = Color.FromArgb(a, r, g, b);
return color;
}
どのように16進コードをRGBに変換しますか? – SNpn
答えを更新しました。 – AVIDeveloper