C#在PictureBox上绘制

时间:2015-08-28 11:03:18

标签: c# multithreading image

假设我有一个分配了图像的PictureBox,我只想在它上面绘制一个较小的位图。

这是我的代码:

 Bitmap a = Getimage();//just a small function generates a new image.
 Bitmap f = (Bitmap) pictureBox1.Image;//getting the picturebox image.
 Graphics g = Graphics.FromImage(f);
 g.DrawImage(a,150,200);//draws a on f at (150,200).
 PictureBox1.Image=f;

但是,在我的程序中,它在一个单独的线程中循环运行,所以我得到一个错误:

  

对象正在其他地方使用

有没有办法直接绘制到Picturebox本身?而不是得到它的位图和绘图,并再次分配?或者至少我如何解决上述异常?

感谢。

1 个答案:

答案 0 :(得分:0)

这会对你有所帮助

    public Form1()
    {
        InitializeComponent();
        new Thread(MyDraw).Start();
    }

    private void MyDraw()
    {
        while(true)
        {
            Invoke(new Action(DrawItem));
            Thread.Sleep(1000);
        }
    }

    private void DrawItem()
    {
        using (var graphics = Graphics.FromImage(pictureBox1.Image))
        {
            graphics.DrawString("Hello", new Font("Arial", 20), Brushes.Yellow, PointF.Empty);
        }
    }