System.ArgumentException当代码获取图像文件流 - ASPX时

时间:2012-09-24 17:11:46

标签: asp.net .net

我希望有人在这段代码中帮助我,我不知道这个问题在哪里,什么以及为什么会发生!!

我有这个代码负责从目录中获取图像,为每个图像创建一个简单的水印,但是当代码到达以读取图像为流时有一个例外..

请查看此代码:

DirectoryInfo[] dir = new DirectoryInfo[2];
dir[0] = new DirectoryInfo(Server.MapPath("Image/DB/Large/"));
dir[1] = new DirectoryInfo(Server.MapPath("Image/DB/Slide/"));

Image signature = Image.FromFile(Server.MapPath("Image/Design/signature.png"));

for (int i = 0; i < dir.Length; i++)
{
    FileInfo[] fs = dir[i].GetFiles("*.jpg");
    foreach (FileInfo s in fs)
    {
        FileStream strm = s.OpenRead();
        String name = s.Name;
        System.Drawing.Image img = System.Drawing.Image.FromStream(strm);

        Graphics g = Graphics.FromImage(img);
        g.SmoothingMode = SmoothingMode.HighQuality;
        g.DrawImage(signature, new Point(0, 0));
        g.Dispose();

        strm.Close();

        if (i == 0)
        {
            String v = Server.MapPath("Image/DB/Large/" + name);
            img.Save(v);
        }

        else if (i == 1)
        {
            String v = Server.MapPath("Image/DB/Slide/" + name);
            img.Save(v);
        }
    }
}  

感知详情:

[ArgumentException: .] System.Drawing.Image.FromStream(Stream stream, Boolean 
 useEmbeddedColorManagement, Boolean validateImageData) +1065883
 System.Drawing.Image.FromStream(Stream stream) +8 Developer.Page_Load(Object sender, 
 EventArgs e) in f:\.NET Programming\‫FaieqSahwish_V.2.0\Developer.aspx.cs:29
 System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t,
 EventArgs e) +14 System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender,
 EventArgs e) +35 System.Web.UI.Control.OnLoad(EventArgs e) +99 
 System.Web.UI.Control.LoadRecursive() +50 System.Web.UI.Page.ProcessRequestMain(Boolean
 includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

1 个答案:

答案 0 :(得分:0)

当异常发生时,Visual studio可能会调出一个调试器。我要做的是检查以确保您的图像是您认为的图像,然后我会逐步完成您的代码,并确保所有字段都是应有的。

如肯·亨德森所说,某事(如你的FileStream)可能是null

这是我自己整理的快速示例。它不会例外。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Drawing;
using System.IO;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            DirectoryInfo dir = new DirectoryInfo(@".");

            FileInfo[] fi = dir.GetFiles("*.jpg");

            FileStream fs = fi[0].OpenRead();

            //FileStream fs = new FileStream("New Bitmap Image.jpg", FileMode.Open);
            System.Drawing.Image.FromStream(fs);
        }
    }
}