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のドキュメントによると、ストリームが有効な画像形式でない場合、またはストリームがnullの場合、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 に答える