我用C#做图像处理时,cpu老是占100%啊,然后在处理的时候就不能移动窗口。
就是普通的处理,比如把图片所有像素都取反操作。。处理时候太卡了,原来CPU占100%,有没有办法使CPU占用少一点。。我使用循环取点的  for (i = 0; i < bmp1.Width; i++)
   for (j = 0; j < bmp1.Height; j++)
          bmp1.getPixel..
           bmp1.setPixel..

解决方案 »

  1.   

    补充一下啊我从avi视频中提取图片,然后立即在picturebox中显示,所以每次都要更新一下图片即,picturebox.Reflesh()...这样图片是会动态显示,但是也很卡,不能移动那个窗口。有什么好方法可以使他不卡卡的时候就是,鼠标变成那样的状态,就是无法响应那样的状态
      

  2.   

    就是让picturebox动态显示图片的时候,会卡啊。。不能移动窗口,一移动就无法响应
      

  3.   

    是不是可以单独线程处理,backgroundWorker
      

  4.   

    需要缓存了 先在内存中进行图像的处理 然后在赋给控件 此外网上有二级缓存的代码 你可以找找 自己继承写个控件 效果会好点 希望帮到你
    GOOD LUCK!!!
      

  5.   

    到我的资源库,里面有一个文件,提供图像与数组的快速转换(非指针方式),比getPixel和setPixel快得多
      

  6.   

    首先你使用了主线程,处理时肯定UI没响应。
    另外你使用GetPixel、SetPixel这效率极低的方式进行循环操作,效率方面实在太低,考虑用BitmapData吧。
    最后做视频不是这种做法,即使用绘制PictureBox的方式也要考虑直接绘制啊。
      

  7.   

    使用 LockBits代替 
    GetPixel  SetPixel
      

  8.   

    数据加密解密处理单独进行,解出数据后整体绘制到屏幕,你看看Graphics、BufferedGraphicsContext、BufferedGraphics,应该对你有用。
      

  9.   

    懂了我用了unsafe的LOCKBITS 果然是在图像处理这里快了很多。。
    但是在程序运行的时候,我拖拽窗口还是不行啊。会变白色,甚至无法响应
      

  10.   

    第一.用线程来做(单独处理)
    第二.你的bmp1是不是太大了,太大也会引起这样.
    第三.Over
      

  11.   

    呵呵解决这个问题了。我在下面加了一个  doevents   pictureBox1.Refresh();
       Application.DoEvents();我这样拖动窗口,果然没有出现无法响应了。。程序也可以继续运行
    感谢这个:http://topic.csdn.net/t/20040825/02/3306325.html
    但是CPU还是占用很大。100%不是我机器差啊。。我机器挺好的。
      

  12.   

    拖动的时候,CPU占用会降下来。