首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用.Net Framework4.5压缩图像

使用.Net Framework4.5压缩图像
EN

Stack Overflow用户
提问于 2017-04-17 20:36:47
回答 1查看 354关注 0票数 2

我有下一个代码:

代码语言:javascript
复制
class Program
{
    const string ImagePath = @"C:\mypath\36";
    private const int Quality = 50;

    static void Main()
    {
        Console.WriteLine("Inicio: " + DateTime.Now);    
        var images = Directory.GetFiles(ImagePath);

        foreach (var name in images)
        {
            var bitmap = new Bitmap(name);
            var tname = name.Split('\\')[5].Split('.')[0];
            VariousQuality(bitmap, tname);
        }
        Console.WriteLine("Finalizacion: " + DateTime.Now);
        Console.ReadLine();
    }

    static void VariousQuality(Image original, string name)
    {
        var codecs = ImageCodecInfo.GetImageEncoders();
        var jpgEncoder = codecs.FirstOrDefault(codec => codec.FormatID == ImageFormat.Jpeg.Guid);

        if (jpgEncoder == null) return;

        var encoder = Encoder.Quality;
        var encoderParameters = new EncoderParameters(1);

        var encoderParameter = new EncoderParameter(encoder, Quality);
        encoderParameters.Param[0] = encoderParameter;

        var fileOut = Path.Combine(ImagePath, "__" + name + ".jpg");
        var ms = new FileStream(fileOut, FileMode.Create, FileAccess.Write);
        original.Save(ms, jpgEncoder, encoderParameters);

        ms.Flush();
        ms.Close();

    }

    static void DefaultCompressionPng(Image original)
    {
        var ms = new MemoryStream();
        original.Save(ms, ImageFormat.Png);
        var compressed = new Bitmap(ms);
        ms.Close();

        var fileOutPng = Path.Combine(ImagePath, "default.png");
        compressed.Save(fileOutPng, ImageFormat.Png);
    }

    static void DefaultCompressionJpeg(Image original)
    {
        var ms = new MemoryStream();
        original.Save(ms, ImageFormat.Jpeg);
        var compressed = new Bitmap(ms);
        ms.Close();

        var fileOutPng = Path.Combine(ImagePath, "default.jpg");
        compressed.Save(fileOutPng, ImageFormat.Jpeg);
    }

}

该代码正在与.Net version 4.0一起工作,但现在我正在将代码更新到4.5版本,并得到下一个错误:

代码语言:javascript
复制
original.Save(ms, jpgEncoder, encoderParameters);

“System.ArgumentException”类型的未处理异常发生在System.Drawing.dll {System.Collections.ListDictionaryInternal}中,参数无效。System.Drawing.Image.Save(流,ImageCodecInfo编码器,EncoderParameters encoderParams) 2012\Projects\ImageCompression\ImageCompression\Program.cs:line (图片原件,字符串名称ImageCompression.Program.VariousQuality 44 )

关于如何修复这个错误的一些想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-17 21:46:06

Quality类型更改为long

代码语言:javascript
复制
private const long Quality = 50;

ps

MSDN Encoder.Quality示例:

代码语言:javascript
复制
 myEncoderParameter = new EncoderParameter(myEncoder, 50L);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43459185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档