读书人

抠图的有关问题

发布时间: 2011-12-22 23:36:25 作者: rapoo

抠图的问题
各位,我用的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

根据颜色 进行盘大

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

读书人网 >C#

热点推荐