問題:
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 與物理大小無關,在減小圖像尺寸或打印時可提高質量。 以上是如何在C#中有效地調整圖像的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!