首页 >后端开发 >C++ >如何在C#中有效地调整图像的大小?

如何在C#中有效地调整图像的大小?

Susan Sarandon
Susan Sarandon原创
2025-01-31 00:56:08247浏览

高效调整C#图像大小的方法

问题:

System.Drawing.Image 类提供了 Size、Width 和 Height 的 Get() 属性。但是,如何在 C# 中运行时调整 Image 对象的大小?

解决方案:

使用带有 Size() 的重载创建新的 Image,如示例所示,将生成一个已调整大小的 Image 对象:

<code class="language-csharp">// objImage 是原始 Image
Bitmap objBitmap = new Bitmap(objImage, new Size(227, 171));</code>

但是,可以使用以下函数实现更高质量的调整大小:

<code class="language-csharp">public static Bitmap ResizeImage(Image image, int width, int height)
{
    // 设置目标矩形和图像
    var destRect = new Rectangle(0, 0, width, height);
    var destImage = new Bitmap(width, height);

    // 设置目标图像的分辨率
    destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);

    // 使用 Graphics 类绘制调整大小的图像
    using (var graphics = Graphics.FromImage(destImage))
    {
        graphics.CompositingMode = CompositingMode.SourceCopy;
        graphics.CompositingQuality = CompositingQuality.HighQuality;
        graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
        graphics.SmoothingMode = SmoothingMode.HighQuality;
        graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;

        // 设置环绕模式以防止图像边界周围出现重影
        using (var wrapMode = new ImageAttributes())
        {
            wrapMode.SetWrapMode(WrapMode.TileFlipXY);
            graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
        }
    }

    // 返回调整大小的图像
    return destImage;
}</code>

其他细节:

  • wrapMode.SetWrapMode(WrapMode.TileFlipXY) 可防止图像边界之外的透明像素影响调整大小的图像。
  • destImage.SetResolution 保持 DPI 与物理大小无关,在减小图像尺寸或打印时可提高质量。
  • 各种 Compositing、Interpolation、Smoothing 和 PixelOffsetMode 设置控制调整大小图像的渲染质量。
  • 此函数不处理保持纵横比,留给开发人员自行决定。

How to Resize Images Efficiently in C#?

以上是如何在C#中有效地调整图像的大小?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn