Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用NGif创建动画GIF后无法删除jpg文件_C#_Visual Studio 2012_File Io_.net Ngif - Fatal编程技术网

C# 使用NGif创建动画GIF后无法删除jpg文件

C# 使用NGif创建动画GIF后无法删除jpg文件,c#,visual-studio-2012,file-io,.net-ngif,C#,Visual Studio 2012,File Io,.net Ngif,我已经编写了使用NGif从一些jog文件创建动画GIF文件的程序。创建动画文件(仅自动幻灯片放映)时没有任何问题。GIF的源图像(我从中创建动画的jpg文件)位于“Temp2”文件夹中。我想删除那个文件夹,包括里面的文件,但程序无法处理,并给出消息:“……文件仍被另一个进程使用” 我创建的函数如下所示: public void Create\u Animated\u GIF() { 字符串输出文件路径=Environment.CurrentDirectory+“\\Animation.gif”;

我已经编写了使用NGif从一些jog文件创建动画GIF文件的程序。创建动画文件(仅自动幻灯片放映)时没有任何问题。GIF的源图像(我从中创建动画的jpg文件)位于“Temp2”文件夹中。我想删除那个文件夹,包括里面的文件,但程序无法处理,并给出消息:“……文件仍被另一个进程使用”

我创建的函数如下所示:
public void Create\u Animated\u GIF()
{
字符串输出文件路径=Environment.CurrentDirectory+“\\Animation.gif”;
AnimatedGifEncoder GEncoder=新的AnimatedGifEncoder();
GEncoder.Start(输出文件路径);
GEncoder.SetDelay(100);
GEncoder.SetRepeat(0);
对于(int i=0;i<2;i++)
{
GEncoder.AddFrame(System.Drawing.Image.FromFile(Image_url[i]);
}
/*
尝试
{
System.IO.Directory.Delete(Environment.CurrentDirectory+“\\Temp2”,true);
}
抓住
{
}
*/
GEncoder.Finish();
System.IO.Directory.Delete(Environment.CurrentDirectory+“\\Temp2”,true);
}

在这里,我试着接球;它不起作用

我在Temp2文件夹中使用的另一个函数如下:


public void裁剪图像()
{
如果(!System.IO.Directory.Exists(Environment.CurrentDirectory+“\\Temp2\\”)存在
System.IO.Directory.CreateDirectory(Environment.CurrentDirectory+“\\Temp2\\”;
对于(int i=0;i<2;i++)
{
System.Drawing.Image Source\u Image=System.Drawing.Image.FromFile(Environment.CurrentDirectory+“\\Temp\\”+i.ToString()+“.jpg”);
System.Drawing.Bitmap Source\u Image\u Btmp=新的System.Drawing.Bitmap(Source\u Image);
System.Drawing.Rectangle Destin_Rect=新的System.Drawing.Rectangle(13271330632491);
System.Drawing.Image Destin\u Image=源图像\u Btmp.Clone(Destin\u Rect,源图像\u Btmp.PixelFormat);
Image_url[i]=Environment.CurrentDirectory+“\\Temp2\\”+i.ToString()+“.jpg”;
Destin_Image.Save(Image_url[i]);
Source_Image.Dispose();
Source_Image_Btmp.Dispose();
Destin_Image.Dispose();
}
/*
尝试
{
System.IO.Directory.Delete(Environment.CurrentDirectory+“\\Temp”,true);
}
抓住
{
}
*/
System.IO.Directory.Delete(Environment.CurrentDirectory+“\\Temp”,true);
}

在此,临时文件夹已成功删除

在从main调用相关函数后,我尝试调用delete命令;但还是没用

有谁能帮助我如何将文件夹从我创建的进程中分离出来吗?

发布答案:

for (int i = 0; i < 2; i++)
            {
                using (var image = System.Drawing.Image.FromFile(Image_URLs[i]))
                {
                    GEncoder.AddFrame(image);

                }
            }
for(int i=0;i<2;i++)
{
使用(var image=System.Drawing.image.FromFile(image\u url[i]))
{
GEncoder.AddFrame(图像);
}
}

GEncode是一次性的吗?在尝试删除jpeg文件之前,您可能需要将其放入using块或进行处置,但jpeg文件可能仍被锁定。不,没有此类命令。我在代码中只找到了我在这里使用的Finish。我试着搜索“关闭”、“退出”、“处置”并浏览了完整的列表;但是我没有找到这样合适的方法!在变量中声明System.Drawing.Image.FromFile,然后进行处理,怎么样;我不明白你的意思!我应该如何在第一个函数中使用它?你能告诉我吗?对于(inti=0;i<2;i++){using(var image=System.Drawing.image.FromFile(image_url[i]){GEncoder.AddFrame(image);}
public void Crop_Images()
        {
            if (!System.IO.Directory.Exists(Environment.CurrentDirectory + "\\Temp2\\"))
                System.IO.Directory.CreateDirectory(Environment.CurrentDirectory + "\\Temp2\\");

            for (int i = 0; i < 2; i++)
            {
                System.Drawing.Image Source_Image = System.Drawing.Image.FromFile(Environment.CurrentDirectory + "\\Temp\\" + i.ToString() + ".jpg");

                System.Drawing.Bitmap Source_Image_Btmp = new System.Drawing.Bitmap(Source_Image);

                System.Drawing.Rectangle Destin_Rect = new System.Drawing.Rectangle(1327, 1330, 632, 491);

                System.Drawing.Image Destin_Image = Source_Image_Btmp.Clone(Destin_Rect, Source_Image_Btmp.PixelFormat);

                Image_URLs[i] = Environment.CurrentDirectory + "\\Temp2\\" + i.ToString() + ".jpg";

                Destin_Image.Save(Image_URLs[i]);

                Source_Image.Dispose();
                Source_Image_Btmp.Dispose();
                Destin_Image.Dispose();
            }

            /*
            try
            {
                System.IO.Directory.Delete(Environment.CurrentDirectory + "\\Temp", true);
            }
            catch
            {
            }
            */

            System.IO.Directory.Delete(Environment.CurrentDirectory + "\\Temp", true);
        }
for (int i = 0; i < 2; i++)
            {
                using (var image = System.Drawing.Image.FromFile(Image_URLs[i]))
                {
                    GEncoder.AddFrame(image);

                }
            }