2012-04-09 2 views
1

Мне нужно заполнить прямоугольник черно-белым (прозрачным) градиентом. Тем не менее, я смог найти только класс GradientBrush, и все найденные мной примеры показали плавный переход, и я хочу резкие полосы. Вот что мне нужно:Как создать «острый» градиент в Windows Forms?

screenshot

ответ

2

в этом коде я использую PictureBox, играть с 'к' и 'я'

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

Удачи!

4

Вам необходимо усреднить цвета между цветом начала и цветом конца. Вот процедура, которая делает все, что, используя формулу усреднения здесь: Generate Color Gradient in 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); 
} 

Результирующее в:

enter image description here

Смежные вопросы