/// <summary> /// 合并图片 /// </summary> /// <param name="imgBack">背景图片</param> /// <param name="img">需要嵌套的图片</param> /// <param name="position">需要嵌套的图片的位置</param> /// <returns></returns> public static Image CombineImage(Image imgBack, Image img, ImgPosition position, Graphics g = null, float?x = null, float?y = null) { bool isNeedDispose = false; if (g == null) { g = Graphics.FromImage(imgBack); isNeedDispose = true; } //呈现质量 g.SmoothingMode = SmoothingMode.AntiAlias; //画需要嵌套的图片 PointF point = GetPosition(imgBack, img, position, x, y); g.DrawImage(img, point.X, point.Y); img.Dispose(); if (isNeedDispose) { g.Dispose(); } return(imgBack); }
/// <summary> /// 将二维码画在白色背景图上 /// </summary> /// <param name="img">二维码</param> /// <returns></returns> public static Image CreateWhiteBmp(Image bmp, Image img, ImgPosition imgPosition) { Graphics g = Graphics.FromImage(bmp); //呈现质量 g.SmoothingMode = SmoothingMode.AntiAlias; //定义画布颜色 g.Clear(Color.White); //再画需要嵌套的图片 PointF point = GetPosition(bmp, img, imgPosition); g.DrawImage(img, point.X, point.Y); img.Dispose(); g.Dispose(); return(bmp); }
/// <summary> /// 获取需要嵌套的图片的左上角的坐标 /// </summary> /// <param name="imgBack">背景图片</param> /// <param name="img">需要嵌套的图片</param> /// <param name="position">位置枚举</param> /// <returns></returns> private static PointF GetPosition(Image imgBack, Image img, ImgPosition position, float?x = null, float?y = null) { PointF point = new PointF { X = 0, Y = 0 }; switch (position) { case ImgPosition.居中: point.X = imgBack.Width / 2 - img.Width / 2; point.Y = imgBack.Height / 2 - img.Height / 2; break; case ImgPosition.左上角: break; case ImgPosition.右上角: point.X = imgBack.Width - img.Width; break; case ImgPosition.右下角: point.X = imgBack.Width - img.Width; point.Y = imgBack.Height - img.Height; break; case ImgPosition.左下角: point.Y = imgBack.Height - img.Height; break; case ImgPosition.自定义: point.X = (float)x; point.Y = (float)y; break; } return(point); }