Win7:Image.FromFile上的Out of Memory异常

时间:2009-10-29 14:24:58

标签: c# windows-7

以下的源代码确实与Windows运行良好,直到vista。 使用Windows 7(和新的.net 3.5)时,当我尝试从我的尼康D90加载原始图像文件时,它总会产生内存不足的异常。
有些人可能会说“不支持加载nef”,但它确实运行得很好,直到vista,只有Windows 7打破它,所以我不同意。

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace QuickImageLoader
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }
    private void button1_Click(object sender, EventArgs e)
    {
      DialogResult res = openFileDialog1.ShowDialog();
      if (res == DialogResult.OK)
      {
        pictureBox1.Image = Image.FromFile(openFileDialog1.FileName); // crash happens
        pictureBox1.Refresh();
      }
    }
  }
}

Download a sample nef file to reproduce error.

这是Windows 7中的错误吗?在.net 3.5?或者它是否应该从未与XP / Vista一起使用?

[更新]由于一些人既不知道也不阅读上面的介绍:加载这样的nef确实可以在XP / Vista 上安装,而无需安装Nikon Raw Codec 。并且安装编解码器并不能解决问题(伙计们,它与编解码器叹息无关)。

3 个答案:

答案 0 :(得分:2)

我可以确认来自Nikon Coolpix P5000的JPEG照片的这种行为。

似乎文件的内部结构存在一些问题,这会混淆GDI + jpeg加载器。我使用外部图像查看器将图像重新编码为jpg,然后一切都恢复正常。我无法确认是否仅在Win7上找到此行为

所有人都找到了原因吗?或者这可能是GDI +中的一个错误?

答案 1 :(得分:0)

Image.FromFile本身不支持很多图像类型,但可以安装更多图像类型。

那么,你是否在Vista中安装了一些能让它工作的东西?像尼康编解码器包或者会增加支持的东西?

该错误消息表示以下两种情况之一:

  • 不支持图像文件(如上所述,可以通过安装适当的编解码器或其他方法来修复)
  • 确实支持图像文件,但文件内容已损坏,因此用于分配内存结构的内部值超出了界限(如图像表示宽度为217273373像素)

我从评论中看到,这里有一些讨论。我不知道微软是否明确地自行提取格式,或者被迫这样做,但我可以确认GDI +在我的Windows 7安装上不支持NEF,因此无论XP或Vista是否支持它,无论是为什么它不再支持的原因,Windows 7不支持开箱即用的GDI +中的NEF加载。

所以你需要安装一些东西。

答案 2 :(得分:0)

您安装了尼康原始编解码器吗? Windows本身(和.NET Framework)不知道处理Nikons Raw格式。