Чтение файлов изображений RAW как GDI + растровые изображения - PullRequest
9 голосов
/ 23 октября 2008

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

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

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

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

Ответы [ 4 ]

6 голосов
/ 23 октября 2008

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

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

3 голосов
/ 23 октября 2008

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

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

Edit:

Ссылка на плагин больше не работает, но вот код, который я использовал для извлечения изображений. Следующий код извлекает jpg-preview, сохраненный в необработанном файле. Если вы хотите получить полное изображение, вы должны удалить аргумент -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/

2 голосов
/ 23 ноября 2010

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

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

  1. Открыть свойства проекта и установить Тип вывода в Библиотека классов .
  2. Рекомпилированные.
  3. Добавьте ссылку на DLL в ваш собственный проект.
  4. Добавьте using dcraw; вверху.
  5. Объявите эти строки кода:

    DcRawState state = new DcRawState();
    state.inFilename = filename;
    state.ifp = new RawStream(filename);
    
    
    Identifier id = new Identifier(state);
    id.identify(state.ifp);
    

Теперь проверьте все вкусности в состоянии (при условии, что ваш файл RAW поддерживается и не вызывает исключений;)

0 голосов
/ 22 марта 2017

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

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

Надеюсь, это кому-нибудь поможет.

...