1

我正在尝试将位图文件保存为我的服务器上的 jpg,但无法这样做。我能够将它保存到流中并显示它。但是,一旦我尝试将其保存到文件中,它就什么也做不了。下面是我的代码,有人可以告诉我为什么它不保存到文件中:

   protected void Page_Load(object sender, EventArgs e)
    {
        if (IsPostBack)
        {
            string jsonStr = Request.Form["output"];

            var sigToImg = new SignatureToImage();
            var signatureImage = sigToImg.SigJsonToImage(jsonStr);

            Bitmap bm2 = signatureImage as Bitmap;
            Bitmap bm3 = new Bitmap(bm2);

            Response.ContentType = "image/jpeg";
            //bm3.Save(Response.OutputStream, ImageFormat.Jpeg); If i use this it displays the image fine

            System.IO.FileStream fs = System.IO.File.Open(Server.MapPath("~/Images") + "MyImage.jpg", FileMode.Create);
            bm3.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
            bm2.Dispose();
            bm3.Dispose();
            Response.End();
        }
    }
4

2 回答 2

0

我建议将 save 方法放在 try/catch 块中:

try
{
   bm3.Save(fs, System.Drawing.Imaging.ImageFormat.Jpeg);
}
catch(Exception e)
{
   // Check for errors here
}

Save 可以抛出两种类型的异常:

ArgumentNullException文件名或格式为空。

ExternalException图像以错误的图像格式保存

我怀疑第一个正在发生。

于 2013-10-14T19:12:00.443 回答
0

确保除了处理位图实例之外,还关闭正在写入的文件流(在调用之后bm3.Save()):

fs.Close();

这会将流刷新到磁盘并确保图像实际包含在文件中。

- -编辑 - -

正如评论中所显示的,这是由于Server.MapPath解析到了一个 Brad 没有预料到的目录。

于 2013-10-14T19:13:11.130 回答