你好我在绘图箱中画画有问题。我试图画一个图片框。 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);
}
答案 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)
这里有两个选择。
Graphics.FromImage
从图像创建图形,然后将图像分配到图片框。Graphics.DrawImage
将图像绘制到新的Graphics
对象中。听起来后者可能更适合你,因为你实际上并没有改变内存中的图像。因此,每次清除Graphics
实例时,只需绘制Image
。