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

抠图的问题
各位,我用的c#,我想把一张图片除了背景色给抠出来。运行这段代码后,cpu和内存飙升,这样肯定不行。等了半天,还发生一般gdi+错误。无语。麻烦知道的帮我解惑。现将代码贴出。就几句,^_^。  

 private void Form1_Paint(object sender, PaintEventArgs e)  
  {  
  Bitmap map = (Bitmap)Image.FromFile("temp.jpg");  

  Graphics gra = e.Graphics;  

   
  Color blackcr,cr;  
  blackcr = map.GetPixel(0, 0);  

   

  Region rgn,rgntemp,rgnlast;  
  rgn = new Region(new Rectangle(0, 0, map.Width, map.Height));  
  rgnlast = new Region(new Rectangle(0, 0, 1, 1));  
  Rectangle rec = new Rectangle(0, 0, 1, 1);  
  rgntemp = new Region(new Rectangle(0, 0, 1, 1));  

  for (int m = 0; m < map.Height; m++)  
  {  
  for (int n = 0; n < map.Width; n++)  
  {  
  if (map.GetPixel(n, m) != blackcr)  
  {  
  rec.X = n;  
  rec.Y = m;  
  rgnlast.Complement(rec);  
  break;  

  }  
  }  
  break;  
  }  


  for (int i = 0; i < map.Height ; i++)  
  for (int j = 0; j < map.Width ; j++)  
  {  
  if (map.GetPixel(j, i) != blackcr)  
  {  

  rec.X = j;  
  rec.Y = i;  
  rgntemp.Complement(rec);  
  rgnlast.Union(rgntemp);  

  }  

  }  




  gra.FillRegion(new SolidBrush(Color.White), rgnlast);  
  gra.Dispose();  
}  



那个temp.jpg随便找个图片代替下。

------解决方案--------------------
先根据你的图 获取图形的颜色
LockBits() 颜色

Marshal.Copy()到BYTE

根据颜色 进行盘大

然后复制到新的图形....