我将各种类型的图像存储在数据库中,并使用 .ashx 检索图像并将其写入响应输出流,以便在我的站点上显示它。
这适用于除位图以外的任何图像类型。对于我尝试存储和显示的任何位图,我得到的只是一个位图大小的黑盒。
我知道位图正确存储在我的数据库中,因为如果我检索它并将其存储到磁盘,它会很好用。
这是有问题的代码:
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 时发生了一些事情,导致它被截断。我尝试将内容长度设置为正确的大小,但这没有帮助。
仍然没有解决方案,但我走得更远了......