Быстрая конвертация изображений в формате TIFF для показа в веб-клиенте - PullRequest
3 голосов
/ 26 ноября 2010

Для предварительного просмотра отсканированного TIFF-документа в настоящее время я использую следующее:

Bitmap bmp = new Bitmap(@"document.tif");
var ms = new MemoryStream();

bmp.Save(ms, ImageFormat.Png);

var bmpBytes = ms.GetBuffer();
bmp.Dispose();
ms.Close();

return new FileStreamResult(new MemoryStream(bmpBytes), "image/png");

Есть ли способ ускорить конвертацию? Используете что-то кроме стандартного метода Image.Save ()?

Я нашел небезопасный класс, который блокирует и разблокирует bitmapData между пиксельными манипуляциями здесь , но я не уверен, что он подходит для моей задачи (потому что мне нужно только преобразовать из одного формата в другой) , Однако мой профилировщик показывает выигрыш около 30 мс (до 116 мс, после 83 мс)

Ответы [ 3 ]

1 голос
/ 26 ноября 2010

FreeImage - отличная библиотека для работы с изображениями, для этого есть обертки C #. Вы также можете найти документацию FreeImage .NET .

Вполне зрелый, поэтому некоторые его элементы высоко оптимизированы.

1 голос
/ 26 ноября 2010

Я думаю, что нашел это!:) Atalasoft dotImage (бесплатная версия), увеличение изображения до 35 мс ...

0 голосов
/ 26 ноября 2010

Я использую внешний инструмент для конвертации: http://www.imagemagick.org/script/index.php

Это намного быстрее.

Обновление

Сделайте что-то вроде этого:

var sourceFile = "C:\\yourscanned.tiff";
var destFile = Path.GetTempPath() + "\\yourpng.tmp";
var process = Process.Start("C:\path\to\imagick\convert.exe", sourceFile + " " + destFile);
process.WaitForExit();

FileStream myStream = new FileStream(destFile);
//woho, do what you want.

File.Delete(destFile);
...