0

我将各种类型的图像存储在数据库中,并使用 .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 时发生了一些事情,导致它被截断。我尝试将内容长度设置为正确的大小,但这没有帮助。

仍然没有解决方案,但我走得更远了......

4

1 回答 1

0

我看到一些对“image/x-ms-bmp”的引用是要使用的正确 mime 类型(与“image/bmp”相比)...试试看...

于 2012-05-29T20:42:36.073 回答