C# 4.0 使用C语言调整图像大小#

C# 4.0 使用C语言调整图像大小#,c#-4.0,png,jpeg,gif,tiff,C# 4.0,Png,Jpeg,Gif,Tiff,数码相机中新拍摄的图像通常超过2-3MB的大小,这使得它很难通过电子邮件和其他方式传输。 这需要调整图像的大小(根据文件大小,而不是高度或宽度)。与MS Paint非常相似,它提供图像大小调整功能。 我没有受过良好的图像文件理论教育。如果有人能告诉我以下信息来源,我将不胜感激: 图像理论(各种图像格式如何工作jpeg、png、tiff等) 调整大小时,图像的清晰度如何降低?有一些吗 是否有任何免费的.Net(我使用的是4.0)库可用于此操作?如果没有,我可以使用任何使用com互操作性的库吗

数码相机中新拍摄的图像通常超过2-3MB的大小,这使得它很难通过电子邮件和其他方式传输。 这需要调整图像的大小(根据文件大小,而不是高度或宽度)。与MS Paint非常相似,它提供图像大小调整功能。 我没有受过良好的图像文件理论教育。如果有人能告诉我以下信息来源,我将不胜感激:

  • 图像理论(各种图像格式如何工作jpeg、png、tiff等)

  • 调整大小时,图像的清晰度如何降低?有一些吗

  • 是否有任何免费的.Net(我使用的是4.0)库可用于此操作?如果没有,我可以使用任何使用com互操作性的库吗


非常感谢,

图像大小调整功能直接内置在.NET框架中。有两种不同的方法:

  • GDI+
  • WIC
  • WPF
这里有一个很好的例子来说明它们之间的差异

下面是一个使用GDI+的示例:

public void Resize(string imageFile, string outputFile, double scaleFactor)
{
    using (var srcImage = Image.FromFile(imageFile))
    {
        var newWidth = (int)(srcImage.Width * scaleFactor);
        var newHeight = (int)(srcImage.Height * scaleFactor);
        using (var newImage = new Bitmap(newWidth, newHeight))
        using (var graphics = Graphics.FromImage(newImage))
        {
            graphics.SmoothingMode = SmoothingMode.AntiAlias;
            graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
            graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
            graphics.DrawImage(srcImage, new Rectangle(0, 0, newWidth, newHeight));
            newImage.Save(outputFile);
        }
    }
}
Imageresizer工作正常。
我使用了Darin Dimitrov提供的示例, 映像已膨胀到并占用了大量磁盘空间(从1.5MB到17MB左右)

这是由于最后一行代码中的一个小错误造成的

下面的函数将图像保存为位图(大图像大小)

正确的功能应该是:

newImage.Save(outputFile, ImageFormat.Jpeg);

谢谢你,达林。我不想在数字上提及宽度和高度。相反,它们将以百分比表示。要使用此功能,我必须(可能)计算现有图像的高度和宽度。是的,您可以在加载
srcImage
后执行此操作。在第一个和第二个
之间使用
语句。您可以使用srcImage.Width和srcImage.Height来计算传递给位图构造函数的newWidth和newHeight。阅读“颜色量化”位图(图像、宽度、高度)构造函数的工作非常可靠,没有太多麻烦。
newImage.Save(outputFile, ImageFormat.Jpeg);