Чтение файлов изображений RAW в виде растровых изображений GDI+

StackOverflow https://stackoverflow.com/questions/227604

  •  03-07-2019
  •  | 
  •  

Вопрос

Есть ли хороший способ достаточно быстрого чтения файлов изображений RAW (особенно файлов Canon CR2 и Adobe DNG) в виде растровых изображений GDI+?

Я нашел пример, работающий под WPF, который считывал изображение с помощью любого установленного кодека изображения, а затем отображал его в элементе управления изображением.И я изменил этот пример, чтобы создать растровое изображение GDI+, записав изображение WPF в MemoryStream и создав из него растровое изображение.Но этот процесс медленный!Ужасно медленно!Открытие простого изображения на моем компьютере занимает около 10 секунд.Это решение также требует ссылок на сборки WPF, и это неправильно, особенно потому, что я хотел бы запустить код в проекте ASP.NET.

Существуют программы, которые выполняют пакетное преобразование изображений, но я бы предпочел конвертировать изображения динамически по запросу.

Итак, есть предложения?

Это было полезно?

Решение

Отказ от ответственности: я работаю в Atalasoft.

Наш продукт DotImage Photo Pro может это сделать. Если вы хотите попробовать сделать это самостоятельно, посмотрите на оболочку DCRaw с открытым исходным кодом или посмотрите, как это делает Paint.NET (я думаю, что для этого есть плагин RAW)

Другие советы

Компонент DotImage Photo Pro работал хорошо, но у меня возникла проблема с извлечением изображения предварительного просмотра из необработанных файлов с его помощью.Это также выходит за рамки моего бюджета на этот проект.

Но я нашел код плагина RAW для Paint.NET. здесь и было довольно просто адаптироваться к моим потребностям.Плагин запускает исполняемый файл DCRaw. Process.Start и считывает его вывод из StandardOutput транслировать.Довольно просто и быстро!:-)

Редактировать:

Ссылка на плагин больше не работает, но вот код, который я использовал для извлечения изображений.Следующий код извлекает превью jpg, хранящееся в необработанном файле.Если вам нужно полное изображение, вам следует удалить аргумент -e.Но имейте в виду, что для некоторых камер вы получите изображение в формате ppm, которое GDI+ не сможет прочитать.

public Stream GetImageData(string inputFile, string dcRawExe)
{


    var startInfo = new ProcessStartInfo(dcRawExe)
    {
        Arguments = "-c -e \"" + inputFile + "\"",
        RedirectStandardOutput = true,
        UseShellExecute = false
    };

    var process = Process.Start(startInfo);

    var image = Image.FromStream(process.StandardOutput.BaseStream);

    var memoryStream = new MemoryStream();
    image.Save(memoryStream, ImageFormat.Png);

    return memoryStream;
}

Также вам понадобится копия DCRaw.Я использовал DcrawMS.exe с этого сайта: http://www.insflug.org/raw/Downloads/

Вот порт Cc dcraw, хотя и довольно старый (v8.88), который можно адаптировать для включения более новых моделей Canon:
https://sourceforge.net/projects/dcrawnet/

РЕДАКТИРОВАТЬ:
Я просто заставил его работать в моем собственном проекте для чтения EXIF-данных из файлов RAW:

<Ол>
  • Откройте свойства проекта и установите для Тип вывода значение Библиотека классов .
  • Рекомпилированные.
  • Добавьте ссылку на DLL в свой собственный проект.
  • Добавьте , используя dcraw; вверху.
  • Объявите эти строки кода:

    DcRawState state = new DcRawState();
    state.inFilename = filename;
    state.ifp = new RawStream(filename);
    
    
    Identifier id = new Identifier(state);
    id.identify(state.ifp);
    
  • Теперь проверьте все вкусности внутри состояния (при условии, что ваш файл RAW поддерживается и не вызывает исключений;)

    эй.Просто наткнулся на это для своего проекта .NET MVC.Может работать в формате RAW, а также во всем, о чем вы только можете мечтать.Включает код, примеры и множество различных языков программирования.Выглядит так хорошо, что мне хочется пожертвовать немного денег, прежде чем использовать его.

    Погуглите по "imagemagck", так как ссылку ставить не рекомендуется.Есть даже запись в Википедии.

    Я надеюсь, что это помогает кому-то.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top