長方形を黒から白(透明)のグラデーションで塗りつぶす必要があります。ただし、GradientBrush
クラスを見つけることしかできず、見つけたすべての例はスムーズな遷移を示しており、鋭いバーが必要です。それだけが必要:
質問する
536 次
2 に答える
5
開始色と終了色の間の色を平均化する必要があります。ここにある平均化式を使用して、これらすべてを実行するルーチンを次に示します。C#でカラーグラデーションを生成する
private void PaintGradientBars(Graphics g, Rectangle r,
Color startColor, Color endColor, int numBars) {
int rMin = startColor.R;
int gMin = startColor.G;
int bMin = startColor.B;
int rMax = endColor.R;
int gMax = endColor.G;
int bMax = endColor.B;
int left = 0;
for (int i = 0; i < numBars; i++) {
int rAvg = rMin + (int)((rMax - rMin) * i / numBars);
int gAvg = gMin + (int)((gMax - gMin) * i / numBars);
int bAvg = bMin + (int)((bMax - bMin) * i / numBars);
Color useColor = Color.FromArgb(rAvg, gAvg, bAvg);
int width = (r.Width - left) / (numBars - i);
using (SolidBrush br = new SolidBrush(useColor)) {
g.FillRectangle(br, new Rectangle(left, 0, width, r.Height));
}
left += width;
}
}
次に、簡単な呼び出しを行います。
private void panel1_Paint(object sender, PaintEventArgs e) {
PaintGradientBars(e.Graphics, panel1.ClientRectangle,
Color.Blue, Color.Green, 5);
}
その結果:
于 2012-04-09T15:50:20.333 に答える
2
このコードでは、pictureboxを使用し、「k」と「i」で遊んでいます
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
int k = 20;
Color mycolor = new Color();
for (int i = 0; i < 10; i++)
{
mycolor = Color.FromArgb(i * k, i * k, i * k);
SolidBrush mybrash = new SolidBrush(mycolor);
e.Graphics.FillRectangle((Brush)mybrash, 0 + i * k, 0, k, k);
}
}
幸運を!
于 2012-04-09T14:26:29.983 に答える