我将各种类型的图像存储在数据库中,并使用.ashx检索图像并将其写入响应输出流,以便在我的网站上显示。
这适用于任何图像类型EXCEPT位图。所有我得到的任何位图我尝试存储& display是位图大小的黑盒子。
我知道位图在我的数据库中存储正确,因为如果我将其检索并将其存储到磁盘上,它就会很好用。
以下是相关代码:
Image image = GetImage(out type);
context.Response.ContentType = type;
// Save the image to the OutputStream
ImageFormat i_format = null;
switch (type.ToLower())
{
case "image/jpg":
case "image/jpeg":
{
i_format = ImageFormat.Jpeg;
}
break;
case "image/png":
{
i_format = ImageFormat.Png;
}
break;
case "image/bmp":
{
i_format = ImageFormat.Bmp;
}
break;
case "image/gif":
{
i_format = ImageFormat.Gif;
}
break;
}
//this results in a black box if it's a bitmap.
//all other image types work fine
image.Save(context.Response.OutputStream, i_format);
//if I save the bitmap image to a file, it's fine - no black box
image.Save("c:\\temp\\test.bmp", i_format);
我必须认为这是显而易见的我做错了,但是如果我能弄明白发生了什么事情就会发生。
编辑:
我已将它追踪得更远了。如果我右键单击浏览器中显示的黑色图像并“另存为...”,则会截断生成的文件。例如,如果原始图像是126字节,则保存的图像是122字节。
问题不在于图像本身 - 正如我上面所说的,image.Save到文件工作正常。
所以现在我认为当我将图像保存到response.OutputStream时会发生一些事情,导致它被截断。我已经尝试将内容长度设置为正确的大小,这没有帮助。
仍然没有解决方案,但我会更进一步......
答案 0 :(得分:0)
我看到一些引用“image / x-ms-bmp”是正确使用的mime类型(vs“image / bmp”)...试试看......