绘制图片框c#

时间:2014-07-16 05:14:44

标签: c# drawing picturebox

你好我在绘图箱中画画有问题。我试图画一个图片框。 picturebox包含一个图像。我使用drawline方法绘制一个正弦波。当波到达图片框宽度的末尾时,我使用

 g.Clear(pictureBox1.BackColor);

这清除了图片框上的波。但问题是它还清除了图片框的图像。我想在图像上画一个波,然后在它到达picturebox时清除它。宽度再次从初始位置开始。请帮忙!

Graphics g;
g = pictureBox1.CreateGraphics();

g.DrawLine(System.Drawing.Pens.Crimson, ti, old_gval1, ti + trackBar1.Value, gval1);

                usb.SpecifiedDevice.SendData(OUTBuffer);    

            old_gval1 = gval1;

            ti = ti + trackBar1.Value;
            if (ti > pictureBox1.Width) { 
                ti = 0;

                g.Clear(pictureBox1.BackColor);
                g.DrawLine(System.Drawing.Pens.Gray, 0, ((pictureBox1.Height - 1) - (gnd_val) * ((pictureBox1.Height - 10) / 1023f)), pictureBox1.Width, ((pictureBox1.Height - 1) - (gnd_val) * ((pictureBox1.Height - 10) / 1023f)));
                g.DrawLine(System.Drawing.Pens.Gray,  pictureBox1.Width / 2, 0,  pictureBox1.Width/ 2,pictureBox1.Height);

            }

2 个答案:

答案 0 :(得分:1)

您可以使用PictureBox的一项特殊功能:

不仅Image每个人都在使用,而且BackgroundImage通常被忽视。

您可以在Image上自由绘画,但仍然保持BackgroundImage不受影响。

显然你需要在透明的Bitmap上绘画。

以下是一些代码:

// load the background image:

this.pictureBox1.BackgroundImage = new Bitmap(yourImageFileName);

// prepare the image:

Bitmap bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
using (Graphics g  = Graphics.FromImage(bmp) )
{
    g.FillRectangle(Brushes.Transparent, new Rectangle(Point.Empty, bmp.Size) );
}
pictureBox1.Image = bmp;

现在画画:

Random R = new Random();

private void button1_Click(object sender, EventArgs e)
{
    Image bmp = pictureBox2.Image;
    using (Graphics g = Graphics.FromImage(bmp))
    {
        g.DrawEllipse(Pens.Blue, R.Next(33), R.Next(33), R.Next(500), R.Next(500));
        g.DrawEllipse(Pens.Red, R.Next(33), R.Next(33), R.Next(500), R.Next(500));
        g.DrawEllipse(Pens.White, R.Next(33), R.Next(33), R.Next(500), R.Next(500));
    }
    pictureBox2.Image = bmp;
}

当你的阴谋图已到达右边缘时,你可以使用FillRectangle(Brushes.Transparent,..来清除前景图像并重置你的x值。

听起来是解决问题最便宜的方法。

答案 1 :(得分:0)

这里有两个选择。

  1. 您可以使用Graphics.FromImage从图像创建图形,然后将图像分配到图片框。
  2. 使用Graphics.DrawImage将图像绘制到新的Graphics对象中。
  3. 听起来后者可能更适合你,因为你实际上并没有改变内存中的图像。因此,每次清除Graphics实例时,只需绘制Image