问题:
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中文网其他相关文章!