首頁 >後端開發 >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