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