Существует ли хороший способ считать НЕОБРАБОТАННЫЕ файлы изображений (особенно Canon CR2 и файлы Adobe DNG) как GDI + битовые массивы, который довольно быстр?
Я нашел пример, работающий под WPF, который прочитает изображение с помощью любого установленного кодека изображения и затем отобразит его в управлении изображением. И я изменил этот пример для создания GDI + битовый массив путем записи изображения WPF в MemoryStream и создания Битового массива из этого. Но этот процесс является медленным! Ужасно замедлитесь! Открытие простого изображения занимает приблизительно 10 секунд на моем компьютере. Это решение также требует ссылок на блоки WPF, и это не чувствует себя хорошо, особенно не, так как я хотел бы выполнить код в проекте ASP.NET.
Существуют программы, которые сделают пакетные преобразования изображений, но я предпочел бы преобразовывать изображения динамично при необходимости.
Так, какие-либо предложения?
Отказ от ответственности: Я работаю в Atalasoft.
Наша фотография DotImage Pro продукт может сделать это. Если Вы хотите попытаться сделать это сами, изучить обертывание DCRaw с открытым исходным кодом или посмотреть на то, как Paint.NET делает это (я думаю, что существует НЕОБРАБОТАННЫЙ плагин для него),
Фотография DotImage Pro компонент работал хорошо, но у меня была проблема при извлечении изображения предварительного просмотра из необработанных файлов с помощью него. Это также вне моего бюджета для этого проекта.
Но, я нашел код для НЕОБРАБОТАННОГО плагина для 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/