Win7: Исключение из нехватки памяти на Image.FromFile - PullRequest
1 голос
/ 29 октября 2009

Следующий фрагмент исходного кода прекрасно работает с Windows до Vista. В Windows 7 (и новой версии .net 3.5) всегда возникает исключение нехватки памяти, когда я пытаюсь загрузить необработанный файл изображения с моего Nikon 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();
      }
    }
  }
}

Загрузите образец nef-файла для воспроизведения ошибки.

Это ошибка в Windows 7? В .net 3.5? Или это то, что никогда не должно было работать с XP / Vista?

[Обновление] Поскольку некоторые люди не знают и не читают мое введение выше: загрузка nef, как эта, работает на XP / Vista без установки кодека Nikon Raw . И установка кодека не решает проблему (ребята, это не имеет ничего общего с кодеком sigh ).

Ответы [ 3 ]

2 голосов
/ 24 декабря 2009

Я могу подтвердить это поведение для фотографий JPEG, поступающих с Nikon Coolpix P5000.

Кажется, что есть некоторая проблема с внутренней структурой файла, которая сбивает с толку загрузчик jpeg GDI +. Я использовал внешний просмотрщик изображений, чтобы просто перекодировать изображения как jpg, а затем все стало нормально. Я не могу подтвердить, если это поведение обнаружено только на Win7

Так кто-нибудь нашел причину этого? Или, может быть, это ошибка в GDI +?

0 голосов
/ 29 октября 2009

Вы установили кодек Nikon Raw? Сама Windows (и .NET Framework) не знает, как обрабатывать формат Nikons Raw.

0 голосов
/ 29 октября 2009

Сам по себе Image.FromFile не поддерживает множество типов изображений, но можно установить и другие.

Итак, вы установили что-то в Vista, чтобы это работало? Как пакет кодеков Nikon или что-то, что добавит такую ​​поддержку?

И это сообщение об ошибке означает одно из двух:

  • Файл изображения не поддерживается (который, как указано выше, можно исправить, установив соответствующие кодеки или еще много чего)
  • Файл изображения действительно поддерживается, но содержимое файла повреждено, поэтому некоторое значение внутри, которое используется для выделения структуры памяти, находится далеко за пределами (как изображение, которое говорит, что оно имеет ширину 217273373 пикселей)

Я вижу из комментариев, что здесь есть какое-то обсуждение. Я не знаю, был ли Microsoft явно извлекать формат самостоятельно или был вынужден это сделать, но я могу подтвердить, что GDI + не поддерживает NEF в моей установке Windows 7, поэтому независимо от того, поддерживал ли его XP или Vista, и независимо от того, Причина, по которой он больше не поддерживается, Windows 7 не поддерживает загрузку NEF в GDI + из коробки.

Так что вам нужно что-то установить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...