我是编程初学者和第一个“更难”的项目,我选择制作一个工具来搜索我的图片集中的双打。
我的第一个想法是使用哈希,所以我提出了这个:
var files = Directory.GetFiles("T:Obrazki", "*.jpg");
foreach (var item in files)
{
var m = Image.FromFile(item);
Console.WriteLine(m.GetHashCode());
}
它启动得很好,然后给出System.OutOfMemoryException。
我尝试了很多东西,包括将循环分成2个for循环,但没有效果。接下来,我在网上找到了一条建议,将目标平台更改为x64,我做了什么,没有任何帮助。
我尝试的最后一件事是在循环的每次迭代中处理'm'并手动添加GC.Collect:
var files = Directory.GetFiles("T:Obrazki", "*.jpg");
foreach (var item in files)
{
var m = Image.FromFile(item);
Console.WriteLine(m.GetHashCode());
m.Dispose();
GC.Collect();
}
它也不起作用。 它在+/- 180张图像后崩溃。 你有什么想法怎么做?
答案 0 :(得分:0)
尝试从文件夹中的每个文件名创建System.Drawing.Bitmap
个对象的集合,然后使用GetPixel(int x, int y)
方法一次比较每两个对象,其中x和y是要检索的像素的坐标。这种方式可以帮助你找到双打。这篇小文章可能符合您的期望:
如果您正在处理多个图像文件,请考虑在使用后释放位图资源。