1

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

我有这段代码负责从目录中获取图像,为每个图像制作一个简单的水印,但是当代码到达以将图像作为流读取时出现异常..

请看这段代码:

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
4

2 回答 2

0

根据FromStream文档,如果流不是有效的图像格式或流为空,则会引发 ArgumentException。

您是否验证了传入 FromStream 的流不满足这些条件?

于 2012-09-24T17:18:32.093 回答
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);
        }
    }
}
于 2012-09-24T17:28:45.477 回答