【发布时间】:2014-06-15 10:25:32
【问题描述】:
改写问题:
我有大量的 .tif 文件,其中大部分(如果不是全部)具有以下定义:
- 位深:1
- 压缩:CCITT T.6(第 4 组)
有些是多页的,有些不是。
我使用以下方法加载它们:
private byte[] LoadArchivedFile()
{
FileStream file = File.Open(fileAddress, FileMode.Open, FileAccess.Read, FileShare.Read);
byte[] fileByteArray = ReadFully(file, 0);
return fileByteArray;
}
然后我将这些字节数组保存在 SQL Server 12 DB 的 varbinary 列中。
现在,我正在制作一个 MVC2 网页来查看这些 .tif 文件。那么这个过程应该是:
- 加载字节数组
- 将其转换为
Image - 在 .tif 中选择一个页面
- 将该页面转换为 Jpeg
- 将页面发送到浏览器
在开发环境中一切正常。在目标 IIS 上安装项目后(目前是 6,我已经打开了 7.5 的请求),该过程在以下行失败:
[... load byte array from DB]
byte[] imageBinary = (byte[])results.fileBinary;
using(MemoryStream ms = new MemoryStream(imageBinary))
{
Image image = Image.FromStream(ms); <---- FAILS HERE
[...]
}
堆栈跟踪:
System.ArgumentException: Parameter is not valid.
at System.Drawing.Image.FromStream(Stream stream, Boolean useEmbeddedColorManagement, Boolean validateImageData)
at System.Drawing.Image.FromStream(Stream stream)
at [MyCode]
现在,我收到的字节数组没有问题 - 它字面上是来自数据库的相同数据。我什至比较了几个字节,总长度......无论如何,它是相同的来源。这不是问题所在。
I found another question 有类似(尽管不完全相同)的问题。在那里,位深度、像素格式、压缩和编解码器的问题。 我目前不确定原始图像的像素格式是什么,尽管从字节数组转换回图像后它是 Format1bppIndexed。
我几乎不知所措...目标机器上缺少编解码器的问题是什么?在将图像二进制文件上传到数据库之前,我需要做些什么吗?
【问题讨论】:
标签: c# asp.net-mvc-2 iis-6 tiff image-conversion