繁体   English   中英

如何用相同的文件名但格式不同的控制台应用程序映像文件格式替换?

[英]How can i replace in console application image file format with the same file name but different format?

在这种情况下,原始格式为.jpg ,我想将文件替换为.gif 因此,如果例如原始文件是: test.jpg ,最终将只有test.gif在目录中。

这是我所做的:

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

namespace ConvertImagesFormats
{
    class Program
    {
        static void Main(string[] args)
        {
            FileInfo[] imagesToConvert;
            string sourceDirectory = @"C:\test";
            string targetDirectory = @"C:\test";
            DirectoryInfo di = new DirectoryInfo(sourceDirectory);
            imagesToConvert = di.GetFiles("*.jpg");
            Bitmap bmp;

            for (int i = imagesToConvert.Length - 1; i > 0; i--)
            {
                bmp = new Bitmap(imagesToConvert[i].FullName);
                bmp.Save(targetDirectory + "\\" + imagesToConvert[i].Name, 
                    System.Drawing.Imaging.ImageFormat.Gif);
            }
        }
    }
}

但是我在以下方面遇到异常:

bmp.Save(targetDirectory + "\\" + imagesToConvert[i].Name, 
    System.Drawing.Imaging.ImageFormat.Gif);

外部异常

GDI +中发生一般错误

未处理System.Runtime.InteropServices.ExternalException
HResult = -2147467259消息= GDI +中发生一般错误。
Source = System.Drawing ErrorCode = -2147467259 StackTrace:位于System.Drawing.Image.Save(字符串文件名,ImageCodecInfo编码器,EncoderParameters encoderParams)位于System.Drawing.Image.Save(字符串文件名,ImageFormat格式)在ConvertImagesFormats.Program.Main d:\\ C-Sharp \\ ConvertImagesFormats \\ ConvertImagesFormats \\ ConvertImagesFormats \\ Program.cs中的(String [] args):System.AppDomain._nExecuteAssembly(RuntimeAssembly Assembly,String [] args)在System.AppDomain.ExecuteAssembly(String assemblyFile) ,证据组装安全性,Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()处的System.Threading.ThreadHelper.ThreadStart_Context(Object state)处的System.Threading.ExecutionContext.RunInternal(ExecutionContext executeContext,ContextCallback回调,对象状态,位于System.Threading.ExecutionContext.Run(ExecutionContextexecutionContext,ContextCallback回调,对象状态,布尔值保持同步Ctx),位于System.Threading.Exe 在System.Threading.ThreadHelper.ThreadStart()处的cutionContext.Run(ExecutionContext executeContext,ContextCallback回调,对象状态)InnerException:

它行得通吗? 还添加了一些重构:

using System.Drawing.Imaging;
using System.IO;
using System.Drawing;

namespace ConvertImagesFormats
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceDirectory = @"C:\test";
            string targetDirectory = @"C:\test";
            ImageFormat imageFormat = ImageFormat.Gif;

            foreach(var image in Directory.GetFiles(sourceDirectory, "*.jpg"))
            {
                using (Bitmap bmp = new Bitmap(image))
                {
                    string targetName = Path.GetFileNameWithoutExtension(image) + "." + imageFormat;
                    bmp.Save(Path.Combine(targetDirectory, targetName), imageFormat);
                }
            }
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM