开发者

Win7: Out of Memory exception on Image.FromFile

The following piece of source does run nicely with Windows up until vista. With Windows 7 (and the new .net 3.5) it always produces an out of memory exception, when I try to load a raw image file from my Nikon D90.

Some might say "loading nef's is not supported", but it did run nicely up until vista, only Windows 7 broke it, so I'd disagree.

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.

Is this a bug in Windows 7? In .net 3.5? Or is it something that should have never worked with XP/Vista?

[Update] Since a few people neither know nor read my introduction above: loading the nef like this does work on XP/Vista without installing the Nikon Raw Codec. And installing the codec does not solve the problem (folks, it got nothing to do with the codec sigh).


I can confirm this behavior for JPEG photos coming from a Nikon Coolpix P5000.

It seems that there is some problem with the internal structure of the file, which confuses the GDI+ jpeg loader.I used an external image viewer just to recode the images as jpg and then everything went to normal. I cannot confirm if this behavior is found only on Win7

So did anybody found the cause of this? Or perhaps it's a bug in GDI+?


Did you installed the Nikon Raw Codec? Windows itself (and .NET Framework) does not know to handle Nikons Raw format.


By itself, Image.FromFile does not support a lot of image types, but more can be installed.

So, did you install something into Vista that made this work? Like a Nikon Codec pack or something that would add that support?

And that error message means one of two:

  • The image file is not supported (which can, as pointed out above, be fixed by installing the appropriate codecs or whatnot)
  • The image file is indeed supported, but the file contents are corrupt, so some value inside that is used to allocate a memory struct is way beyond bounds (like an image that says it is 217273373 pixels wide)

I see from the comments that there is some discussion here. I do not know whether Microsoft explicitly pulled the format by themselves, or was forced to do so, but I can confirm that GDI+ does not support NEF on my Windows 7 installation, so regardless of whether XP or Vista supported it, and regardless of the reason for why it is no longer support, Windows 7 does not support NEF-loading in GDI+ out of the box.

So you need to install something.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜