首頁 > 後端開發 > C++ > 如何在C#中調整圖像的大小?

如何在C#中調整圖像的大小?

DDD
發布: 2025-01-31 01:16:08
原創
322 人瀏覽過

How to Resize Images in C# for High Quality?

C#高質量圖像縮放方法

在C#中運行時調整圖像大小並非易事。雖然System.Drawing.Image具有SizeWidthHeight屬性,但設置這些屬性並不會調整圖像大小。

要調整圖像大小,需要使用新的尺寸創建一個新的Bitmap對象,並將原始圖像繪製到該對像上。可以使用以下代碼實現:

Bitmap objBitmap = new Bitmap(objImage, new Size(227, 171));
登入後複製

但是,此方法會導致圖像質量下降。要實現高質量的縮放,需要使用Graphics類。以下是如何操作的示例:

/// <summary>
/// 将图像调整为指定宽度和高度。
/// </summary>
/// <param name="image">要调整大小的图像。</param>
/// <param name="width">要调整到的宽度。</param>
/// <param name="height">要调整到的高度。</param>
/// <returns>调整大小后的图像。</returns>
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);

    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;
}
登入後複製

此函數通過以下方式提供高質量的縮放:

  • WrapMode設置為TileFlipXY,以防止圖像邊界周圍出現重影。
  • 設置目標圖像的Resolution以保持DPI。
  • 使用高質量的CompositingInterpolationSmoothingPixelOffset設置。

其他考慮因素包括保持圖像的縱橫比(留給讀者作為練習),以及了解保存圖像時圖像縮放的陷阱。

以上是如何在C#中調整圖像的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板