日期:2014-05-18  浏览次数:21096 次

在Picturebox中图片上绘制矩形
事先通过以下方法为picturebox1添加图片
C# code

  private void toolStripButton1_Click(object sender, EventArgs e)
        {
            OpenFileDialog open = new OpenFileDialog();
            open.Filter = "文本|*.jpg";
            open.InitialDirectory = Directory.GetCurrentDirectory();
            open.RestoreDirectory = true;
            if (open.ShowDialog()==DialogResult.OK)
            {
                backpicture = open.FileName;
                curimage = Image.FromFile(backpicture);
            }
            if (curimage != null)
            {
                pbitmap = new Bitmap(curimage);
                pictureBox1.Image = pbitmap;
                getbitmaparr(pbitmap);
            }            
        }



然后再通过在picturebox1上的单击事件绘制矩形这个矩形的绘制函数写在picturebox1的Paint事件中如程序
C# code

Graphics recte = e.Graphics;//pictureBox1.CreateGraphics();                
                ivisible = newf.iwires;
                itemp = iarrbitmapindex * ivisible;
                ilocationy = (itemp / curimage.Width) * ivisible;   //得到Y坐标
                ilocationx = itemp % curimage.Width;                 //得到X坐标
                Pen rectpen = new Pen(Color.Green, 2);
                Rectangle rect = new Rectangle(ilocationx, ilocationy, ivisible, ivisible);                
                recte.DrawRectangle(rectpen, rect);
                rectpen.Dispose();
                this.Invalidate(true);   


症状是:开始添加图片还很正常,cpu使用率都在一个正常水平,但当我点击图片时,图片上没有反应,这时我把窗口缩小一下(开始时最大化)该软件的CPU的使用率突然达到25%,而且绘制的矩形也出现了,再次点击窗口矩形也能正常画上去;
这是因为什么啊CPU怎么占用那么高,而且还必须改变一下窗口的大小才能显示

------解决方案--------------------
控件重绘时才触发Paint事件。所以当点击图片时,图片上没有反应是正常的。
------解决方案--------------------
CPU的使用率突然增大,也正常。因为CPU要处理窗口变化数据。想要开始就有反应那就把画矩形的代码放到toolStripButton1_Click事件中。使用Graphics recte = pictureBox1.CreateGraphics(); 定义变量.