【发布时间】:2017-04-23 06:44:32
【问题描述】:
我在 Windows 7 上编写了一个程序,用于从文件夹中的图像读取 QR 码并且工作正常,但现在我在 Windows 10 上尝试它并崩溃。 我正在使用 Image.FromFile 来读取文件。第一次似乎工作正常,但第二次抛出内存不足异常。
代码如下:
private void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
string strFileExt = Path.GetExtension(e.FullPath);
if (Regex.IsMatch(strFileExt, @"\.jpg|\.png", RegexOptions.IgnoreCase))
{
try
{
using (var b = (Bitmap)Image.FromFile(e.FullPath))
{
var result = reader.Decode(b);
if (result != null)
{
if (result.ResultPoints[0].X < result.ResultPoints[2].X)
{
if (result.ResultPoints[0].Y < result.ResultPoints[2].Y)
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate270FlipNone);
}
}
else
{
if (result.ResultPoints[0].Y < result.ResultPoints[2].Y)
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate180FlipNone);
}
else
{
b.RotateFlip(System.Drawing.RotateFlipType.Rotate90FlipNone);
}
}
string fileName = result.Text + DateTime.Now.ToString("yyyyMMdd-HHmmss") + Path.GetExtension(e.FullPath);
b.Save(Path.Combine(ConfigurationManager.AppSettings["destinationFolder"], fileName));
client.SendData(result.Text + "|" + fileName, "qrListener");
Console.WriteLine("QR: " + result.Text + " File: " + fileName);
}
}
File.Delete(e.FullPath);
}
catch (Exception ex){
Console.WriteLine(ex.Message);
}
}
}
我已经删除了 using 中的所有内容,但仍然崩溃。
【问题讨论】:
-
您是否尝试将位图写入您从中读取它的同一文件中?这不应该奏效!使用流!
-
我什么时候写图像?你的意思是轮换还是保存?无论如何,我删除了 using 中的所有代码,仍然抛出异常。
-
嗯,是只有一张图片还是还有更多?你能告诉我们更多关于他们的信息吗?
-
这是其中一张图片。 imgur.com/a/LCt0e。它发生在 jpg 和 png 中。
-
好吧,图片是无辜的。以下是我的怀疑,但无法测试是否缺少时间: Filewatcher 的触发速度超过每秒一次,因此文件名并不总是不同,因此出现了覆盖正在使用的文件的老问题。可以吗?搜索有关覆盖文件的帖子,您会看到很多示例。一种方法是使用流进行 IO..
标签: c# image file windows-7 windows-10