显示存储在数据库中的位图

时间:2012-05-29 20:13:56

标签: .net bitmap ashx

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

仍然没有解决方案,但我会更进一步......

1 个答案:

答案 0 :(得分:0)

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