У меня есть требование, чтобы у меня была возможность встраивать отсканированные изображения TIFF в некоторые отчеты SSRS.
Когда я разрабатываю отчет в VS2005 и добавляю элемент управления изображением, изображение в формате tiff отображается идеально, когда я его создаю. Получаю предупреждение:
Warning 2 [rsInvalidMIMEType] The value of the MIMEType property for the image ‘image1’ is “image/tiff”, which is not a valid MIMEType. c:\SSRSStuff\TestReport.rdl 0 0
и вместо изображения я получаю маленький красный крестик.
Кто-нибудь преодолел эту проблему?





Предполагая, что вы доставляете файл изображения через IIS, используйте страницу ASP.NET, чтобы изменить форматы изображений и тип MIME на то, что вы используете может.
Response.ContentType = "image/png";
Response.Clear();
using (Bitmap bmp = new Bitmap(tifFilepath))
bmp.Save(Response.OutputStream, ImageFormat.Png);
Response.End();
Это был всего лишь набросок, а не вырезка из реального кода. Могу я предложить вам использовать PNG, а не JPEG, если вы не обрабатываете фотографические изображения? Tiff - это формат без потерь; поэтому я выбрал другой формат без потерь.
В коде, из которого пришла идея, я составляю тайл заданного размера из меньших тайлов аэрофотоснимков. Затем я рисую на нем аннотации и доставляю готовое изображение. Код слишком сложен, чтобы ясно проиллюстрировать принцип.
У меня странная ошибка gdi с png. Для этой задачи подойдет Jpeg.
Ах да, я забыл об этом. Это ошибка при преобразовании в квантованную палитру, она не инициализируется правильно. Насколько я помню, вы можете избежать этого, преобразовав в BMP, а затем в PNG.
Спасибо, Питер, ваш код не компилировался, но идея была правильной.
Вот моя попытка, которая мне подходит.
protected void Page_Load(object sender, EventArgs e)
{
Response.ContentType = "image/jpeg";
Response.Clear();
Bitmap bmp = new Bitmap(tifFileLocation);
bmp.Save(Response.OutputStream, ImageFormat.Jpeg);
Response.End();
}
Я искал решения о том, как отображать изображение TIFF в отчете SSRS, но я не смог его найти, и, поскольку SSRS не поддерживает TIFF, я подумал, что преобразование TIFF в один из поддерживаемых форматов поможет. Так оно и было. Я не знаю, есть ли подобные реализации, но я просто публикую, чтобы другие тоже могли получить пользу. Обратите внимание, что это применимо только в том случае, если у вас есть изображение TIFF, сохраненное в базе данных.
Public Shared Function ToImage(ByVal imageBytes As Byte()) As Byte()
Dim ms As System.IO.MemoryStream = New System.IO.MemoryStream(imageBytes)
Dim os As System.IO.MemoryStream = New System.IO.MemoryStream()
Dim img As System.Drawing.Image = System.Drawing.Image.FromStream(ms)
img.Save(os, System.Drawing.Imaging.ImageFormat.Jpeg)
Return os.ToArray()
End Function
Вот как можно использовать код:
1. В свойствах отчета выберите «Ссылки», нажмите «Добавить» и просмотрите System.Drawing, Version = 2.0.0.0.
2. Выберите свойство «Код», скопируйте и вставьте указанную выше функцию.
3. Щелкните ОК.
4. Перетащите элемент управления изображением из панели инструментов.
4.1. Щелкните изображение правой кнопкой мыши и выберите Свойства изображения.
4.2. Установите источник изображения в базу данных
4.3. В поле "Использовать это" нажмите выражение и вставьте приведенный ниже код.
= Code.ToImage (Поля! FormImage.Value)
4.4. Установите соответствующий Mime на Jpeg
С уважением, Фульбер
Я знаю, что это устарело, но моя компания все еще использует отчеты SSRS 2005, и предыдущий разработчик создал зависимость от инфраструктуры .Net в SQL Server для преобразования наших изображений TIFF в растровые изображения для отображения в отчете. Мы изо всех сил пытались найти способ устранить эту зависимость, продвигаясь вперед с новой версией SQL Server. Ответ Фульберта отлично решил проблему !! Я не могу отблагодарить вас за то, что вы поделились этим !!
Не компилировалось для меня. Это происходит, хотя stackoverflow.com/questions/126584/… S