/// <summary> /// 将图像放大或缩小 /// </summary> /// <param name="图像">源图像</param> /// <param name="指定宽度">指定的宽度,为0则保持原始值</param> /// <param name="指定高度">指定的高度,为0则保持原始值</param> /// <param name="缩放方式">缩放时采用的处理方式</param> /// <returns>缩放后的图像</returns> public static BitmapSource 缩放图像(this BitmapSource 图像, int 指定宽度, int 指定高度, 缩放方式 缩放方式) { var s = Drawing处理函数.计算缩放尺寸(缩放方式, 图像.PixelWidth, 图像.PixelHeight, 指定宽度, 指定高度); var img = 缩放图像(图像, s.Width, s.Height); if (缩放方式 == 缩放方式.强制裁剪) { var tw = 指定宽度 == 0 ? 图像.PixelWidth : 指定宽度; var th = 指定高度 == 0 ? 图像.PixelHeight : 指定高度; return(剪裁图像(img, img.PixelWidth / 2 - tw / 2, img.PixelHeight / 2 - th / 2, tw, th)); } return(img); }
/// <summary> /// 将图像放大或缩小 /// </summary> /// <param name="图像">源图像</param> /// <param name="指定宽度">指定的宽度,为0则保持原始值</param> /// <param name="指定高度">指定的高度,为0则保持原始值</param> /// <param name="缩放方式">缩放时采用的处理方式</param> /// <param name="插值算法">插值算法</param> /// <param name="平滑模式">平滑模式</param> /// <param name="合成质量">合成质量</param> /// <returns>缩放后的图像</returns> public static Bitmap 缩放图像(this Image 图像, int 指定宽度, int 指定高度, 缩放方式 缩放方式, InterpolationMode 插值算法, SmoothingMode 平滑模式, CompositingQuality 合成质量) { var s = 计算缩放尺寸(缩放方式, 图像.Width, 图像.Height, 指定宽度, 指定高度); var img = 缩放图像(图像, s, 插值算法, 平滑模式, 合成质量); if (缩放方式 == 缩放方式.强制裁剪) { var tw = 指定宽度 == 0 ? 图像.Width : 指定宽度; var th = 指定高度 == 0 ? 图像.Height : 指定高度; img = 剪裁图像(img, new Point(img.Width / 2 - tw / 2, img.Height / 2 - th / 2), new Size(tw, th)); } return(img); }
public void 缩放图像Test1() { Image 图像 = Bitmap.FromFile(@"E:\下载\6db1a742jw1dhybtayuajj.jpg"); int 指定宽度 = 300; // TODO: 初始化为适当的值 int 指定高度 = 300; // TODO: 初始化为适当的值 缩放方式 缩放方式 = Core.Drawing.缩放方式.强制裁剪; Bitmap expected = null; // TODO: 初始化为适当的值 Bitmap actual; actual = Drawing处理函数.缩放图像(图像, 指定宽度, 指定高度, 缩放方式); //Assert.AreEqual(expected, actual); actual.Save("i:\\test.jpg", ImageFormat.Jpeg); //Assert.Inconclusive("验证此测试方法的正确性。"); }
public void 缩放图像Test() { Image 图像 = null; // TODO: 初始化为适当的值 int 指定宽度 = 0; // TODO: 初始化为适当的值 int 指定高度 = 0; // TODO: 初始化为适当的值 缩放方式 缩放方式 = new 缩放方式(); // TODO: 初始化为适当的值 InterpolationMode 插值算法 = new InterpolationMode(); // TODO: 初始化为适当的值 SmoothingMode 平滑模式 = new SmoothingMode(); // TODO: 初始化为适当的值 CompositingQuality 合成质量 = new CompositingQuality(); // TODO: 初始化为适当的值 Bitmap expected = null; // TODO: 初始化为适当的值 Bitmap actual; actual = Drawing处理函数.缩放图像(图像, 指定宽度, 指定高度, 缩放方式, 插值算法, 平滑模式, 合成质量); Assert.AreEqual(expected, actual); Assert.Inconclusive("验证此测试方法的正确性。"); }
/// <summary> /// 计算应产生的图像缩放尺寸 /// </summary> /// <param name="缩放方式">缩放时采用的处理方式</param> /// <param name="原始宽度">源图像宽度</param> /// <param name="原始高度">源图像高度</param> /// <param name="指定宽度">指定的宽度,为0则保持原始值</param> /// <param name="指定高度">指定的高度,为0则保持原始值</param> /// <returns>缩放后的尺寸</returns> public static Size 计算缩放尺寸(缩放方式 缩放方式, int 原始宽度, int 原始高度, int 指定宽度, int 指定高度) { var w = 原始宽度; var h = 原始高度; var tw = 指定宽度 == 0 ? w : 指定宽度; var th = 指定高度 == 0 ? h : 指定高度; switch (缩放方式) { case 缩放方式.保持长宽比: if (tw * 1.00 / w < th * 1.00 / h) { h = (int)(tw * 1.00 / w * h); w = tw; } else { w = (int)(th * 1.00 / h * w); h = th; } break; case 缩放方式.强制拉伸: w = tw; h = th; break; case 缩放方式.强制裁剪: if (tw * 1.00 / w > th * 1.00 / h) { h = (int)(tw * 1.00 / w * h); w = tw; } else { w = (int)(th * 1.00 / h * w); h = th; } break; default: break; } return(new Size(w, h)); }
/// <summary> /// 将图像放大或缩小,默认采用高质量缩放 /// </summary> /// <param name="图像">源图像</param> /// <param name="指定宽度">指定的宽度,为0则不约束</param> /// <param name="指定高度">指定的高度,为0则不约束</param> /// <param name="缩放方式">缩放时采用的处理方式</param> /// <returns>缩放后的图像</returns> public static Bitmap 缩放图像(this Image 图像, int 指定宽度, int 指定高度, 缩放方式 缩放方式) { return(缩放图像(图像, 指定宽度, 指定高度, 缩放方式, InterpolationMode.HighQualityBicubic, SmoothingMode.HighQuality, CompositingQuality.HighQuality)); }
/// <summary> /// 将图像放大或缩小 /// </summary> /// <param name="图像">源图像</param> /// <param name="指定宽度">指定的宽度,为0则保持原始值</param> /// <param name="指定高度">指定的高度,为0则保持原始值</param> /// <param name="缩放方式">缩放时采用的处理方式</param> /// <returns>缩放后的图像</returns> public static BitmapSource 缩放图像(this BitmapSource 图像, int 指定宽度, int 指定高度, 缩放方式 缩放方式) { var s = Drawing处理函数.计算缩放尺寸(缩放方式, 图像.PixelWidth, 图像.PixelHeight, 指定宽度, 指定高度); var img = 缩放图像(图像, s.Width, s.Height); if (缩放方式 == 缩放方式.强制裁剪) { var tw = 指定宽度 == 0 ? 图像.PixelWidth : 指定宽度; var th = 指定高度 == 0 ? 图像.PixelHeight : 指定高度; return 剪裁图像(img, img.PixelWidth / 2 - tw / 2, img.PixelHeight / 2 - th / 2, tw, th); } return img; }