我正在开发一个应用程序来平分图像网格并居中图像(基于它们的相似性)。到目前为止,我可以设法修复小尺寸的图像网格,但每当我尝试更大的“精灵”尺寸(例如100x100)时,我都会遇到Stack Overflow错误。C# - 寻找一个图像的边界(不是大小)
是的我使用递归,但每当一个像素被选中时,我设置一个布尔值来取消激活它,将它复制到一个列表中,并继续检查其他(全方位),直到列表被填满来自网格的图像。我不确定这是否是每次调用后的最佳方式,我会调用相同的方法7次(假设有7个相邻像素尚未检查),直到没有剩余像素检查为止,并且我可以转到网格中的下一张图片。
我试图跟踪错误发生的位置,它是在检查了1600多个像素并将它们添加到List之后。 MyPixel是含有4个变量的类:X(INT),Y(INT),颜色(色),并检查(布尔)
public void processSprite(int i, int j)
{
//OOO
//OXO
//OOO
pixeltemp.Add(new MyPixel(imap.pixels[i, j].x, imap.pixels[i, j].y, imap.pixels[i, j].color));
imap.pixels[i, j].read = true;
//OOO
//OOX
//OOO
try
{
if (!imap.pixels[i + 1, j].read)
{
if (imap.pixels[i + 1, j].color.A == 0) //Found a Border
{
imap.pixels[i + 1, j].read = true;
}
else
{
processSprite(i + 1, j);
}
}
}
//... (code goes on)
}
- pixeltemp是像素的临时列表保持所述图像
(List<MyPixel>)
- IMAP包含整个图像
(List<MyPixel>)
我想这不是一个记忆的问题,因为我的应用程序只需要大约16MB的上衣。
我的问题是,为什么我有这个“堆栈溢出”的错误,如果它不是一个无限递归?有没有更简单的方法来做到这一点?我认为我的代码看起来很丑,我不知道如何让它变得更好。
在此先感谢!
我不完全按照你想要完成的。您是否尝试拍摄大图像并将其分割成多个大小相同的区块? – 2010-08-11 17:25:12
@Lucas我在一个图像中有不同图片的网格。例如,一个100x100 PNG图像,大小为10x10px。假设我有一个图像网格,但它们没有对齐,并且具有不同的大小:我试图使它们的大小相同,并根据它们的像素相似性对齐它们。“ – 2010-08-11 17:50:37