高手帮我看看这个类,报死循环异常啊,不知道怎么改.5555

zlcp520 2010-09-30 10:37:43

class NotCohereSeparate
{
public NotCohereSeparate() { }
public NotCohereSeparate(Bitmap b)
{
Bmp = new Bitmap(b); //转换为Format32bppRgb
}

Bitmap bmp;
Bitmap bmpNew;
public Bitmap Bmp
{
set
{
bmp = value;
bmpNew = new Bitmap(bmp.Width * 2, bmp.Height);
}
get { return bmpNew; }
}

int iLeft = 0;
int iRight1 = 0;
int iRight2 = 0;
int iAdd = 0;

public void Separate()
{
for (int w = 0; w < bmp.Width; w++)
{
for (int h = 0; h < bmp.Height; h++)
{
if (bmp.GetPixel(w, h).R == 0)
{
iLeft = w;
iRight2 = w;

Copy(w, h, EGetOrCopy.Get);
if (iRight1 > iLeft) { iAdd += iRight1 - iLeft + 1; }

Copy(w, h, EGetOrCopy.Copy);

w = iRight2 + 1;
iRight1 = iRight2;
break;
}
}
}
}
enum EGetOrCopy { Get, Copy }
void Check(int w,int h,EGetOrCopy goc)
{
if (w < 0 || w > bmp.Width || h < 0 || h > bmp.Height) return;

if (goc.Equals(EGetOrCopy.Copy))
{
if (bmp.GetPixel(w, h).R == 0)
{
bmp.SetPixel(w, h, Color.FromArgb(255, 255, 255));
bmpNew.SetPixel(w + iAdd, h, Color.FromArgb(0, 0, 0));
}
}
else
{
if (bmp.GetPixel(w, h).R == 0 && bmp.GetPixel(w, h).G == 0)
{
if (iLeft > w) iLeft = w;
if (iRight2 < w) iRight2 = w;
bmp.SetPixel(w, h, Color.FromArgb(0, 255, 0));
}
}
Copy(w, h, goc);
}
void Copy(int w, int h, EGetOrCopy goc)
{
Check(w - 1, h - 1, goc);
Check(w - 1, h, goc);
Check(w - 1, h + 1, goc);
Check(w, h - 1, goc);
Check(w, h + 1, goc);
Check(w + 1, h - 1, goc);
Check(w + 1, h, goc);
Check(w + 1, h + 1, goc);
}
}

...全文
179 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
q664906965 2010-09-30
  • 打赏
  • 举报
回复
应该加个条件 来控制循环 这就像递归一样的
q664906965 2010-09-30
  • 打赏
  • 举报
回复
应该加个条件 来控制循环 这就像递归一样的
zlcp520 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wuyazhe 的回复:]
异常信息是什么
[/Quote]

未处理 System.StackOverflowException
安静写代码 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ling3wei 的回复:]
Copy 调用了Check,Check里调用了Copy ,无限循环啊
[/Quote]
+2
鸭梨山大帝 2010-09-30
  • 打赏
  • 举报
回复
两个函数之间循环调用,这代码实在不想看
zitiankuanglong 2010-09-30
  • 打赏
  • 举报
回复
建议声明个变量 判断是否复制成功 然后根据变量来判断。。偶也是菜鸟
兔子-顾问 2010-09-30
  • 打赏
  • 举报
回复
异常信息是什么
zlcp520 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cloudhsu 的回复:]
C# code
void Check(int w,int h,int x,int y,EGetOrCopy goc)
{
w += x;
y += y;
if (w < 0 || w > bmp.Width || h < 0 || h > bmp.Height) return;

if (goc.Equals(EGetOrCopy.Copy))
……
[/Quote]

没用啊还是在if (goc.Equals(EGetOrCopy.Copy))这里报异常
zlcp520 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wuyazhe 的回复:]
void Check(int w,int h,EGetOrCopy goc)
修改为
void Check(int w,int h,EGetOrCopy goc,bool callbycopy)

然后在方法最后一行,写判断

C# code
if(!callbycopy)
{
Copy(w, h, goc);
}
[/Quote]

没用啊还是在if (goc.Equals(EGetOrCopy.Copy))这里报异常
兔子-顾问 2010-09-30
  • 打赏
  • 举报
回复
void Check(int w,int h,EGetOrCopy goc)
修改为
void Check(int w,int h,EGetOrCopy goc,bool callbycopy)

然后在方法最后一行,写判断
if(!callbycopy)
{
Copy(w, h, goc);
}
红红火火的风 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ling3wei 的回复:]
Copy 调用了Check,Check里调用了Copy ,无限循环啊
[/Quote]
+11
zlcp520 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ling3wei 的回复:]
引用 5 楼 zlcp520 的回复:
需要这个效果啊,应该怎么改啊
不知道你算法用意,不好改
[/Quote]

就是把一图片上的黑点图像复制到另一图片上
dafei198607 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ling3wei 的回复:]
s我要沙发,占了先
[/Quote]
顶一下
yinrongg 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zlcp520 的回复:]
需要这个效果啊,应该怎么改啊
[/Quote] 不知道你算法用意,不好改
云瑀 2010-09-30
  • 打赏
  • 举报
回复
void Check(int w,int h,int x,int y,EGetOrCopy goc)
{
w += x;
y += y;
if (w < 0 || w > bmp.Width || h < 0 || h > bmp.Height) return;

if (goc.Equals(EGetOrCopy.Copy))
{
if (bmp.GetPixel(w, h).R == 0)
{
bmp.SetPixel(w, h, Color.FromArgb(255, 255, 255));
bmpNew.SetPixel(w + iAdd, h, Color.FromArgb(0, 0, 0));
}
}
else
{
if (bmp.GetPixel(w, h).R == 0 && bmp.GetPixel(w, h).G == 0)
{
if (iLeft > w) iLeft = w;
if (iRight2 < w) iRight2 = w;
bmp.SetPixel(w, h, Color.FromArgb(0, 255, 0));
}
}
Copy(w, h, x, y, goc);
}
void Copy(int w, int h, EGetOrCopy goc)
{
Check(w, h, -1, -1, goc);
Check(w, h, -1, 0, goc);
Check(w, h, -1, 1, goc);
Check(w, h, 0, -1, goc);
Check(w, h, 0, 1, goc);
Check(w, h, 1, -1, goc);
Check(w, h, 1, 0, goc);
Check(w, h, 1, 1, goc);
}

这样改
wapdos 2010-09-30
  • 打赏
  • 举报
回复
不要copy,直调check不行吗?
zlcp520 2010-09-30
  • 打赏
  • 举报
回复
需要这个效果啊,应该怎么改啊
风在指间 2010-09-30
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ling3wei 的回复:]
Copy 调用了Check,Check里调用了Copy ,无限循环啊
[/Quote]
+1
wapdos 2010-09-30
  • 打赏
  • 举报
回复
恩,copy里面调check, check为啥还要调copy里? 调来调去, 不就死了!!
yinrongg 2010-09-30
  • 打赏
  • 举报
回复
Copy 调用了Check,Check里调用了Copy ,无限循环啊
加载更多回复(3)

111,129

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧