0

さまざまな種類の画像をデータベースに保存し、.ashx を使用して画像を取得し、サイトに表示するために応答出力ストリームに書き込みます。

これは、ビットマップを除くすべての画像タイプでうまく機能します。保存および表示しようとするビットマップに対して得られるのは、ビットマップのサイズのブラックボックスだけです。

ビットマップを取得してディスクに保存すると、うまく機能するため、ビットマップが DB に正しく保存されていることはわかっています。

問題のコードは次のとおりです。

                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 to a file は正常に動作します。

だから今、画像をresponse.OutputStreamに保存しているときに何かが起こっていると思っています。content-length を正しいサイズに設定しようとしましたが、役に立ちませんでした。

まだ解決策はありませんが、もう少し進んでいます...

4

1 に答える 1

0

「image/x-ms-bmp」が使用する正しい MIME タイプであるという参照がいくつか見られます (vs「image/bmp」)...試してみてください...

于 2012-05-29T20:42:36.073 に答える