private void BlendImageGdi(Bitmap srcImg1, Bitmap srcImg2, ImageSpliceSort eSort, out Bitmap destImg) { if (eSort == ImageSpliceSort.Vertical) { destImg = new Bitmap(srcImg1.Width, srcImg1.Height + srcImg2.Height, PixelFormat.Format32bppArgb); Graphics G = Graphics.FromImage(destImg); G.DrawImage(srcImg1, new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), GraphicsUnit.Pixel); G.DrawImage(srcImg2, new Rectangle(0, srcImg1.Height, srcImg2.Width, srcImg2.Height), new Rectangle(0, 0, srcImg2.Width, srcImg2.Height), GraphicsUnit.Pixel); G.Dispose(); } else if (eSort == ImageSpliceSort.Horizontal) { destImg = new Bitmap(srcImg1.Width + srcImg2.Width, srcImg1.Height, PixelFormat.Format32bppArgb); Graphics G = Graphics.FromImage(destImg); G.DrawImage(srcImg1, new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), GraphicsUnit.Pixel); G.DrawImage(srcImg2, new Rectangle(srcImg1.Width, 0, srcImg2.Width, srcImg2.Height), new Rectangle(0, 0, srcImg2.Width, srcImg2.Height), GraphicsUnit.Pixel); G.Dispose(); } else { destImg = new Bitmap(srcImg1.Width, srcImg1.Height, PixelFormat.Format32bppArgb); Graphics G = Graphics.FromImage(destImg); G.DrawImage(srcImg1, new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), new Rectangle(0, 0, srcImg1.Width, srcImg1.Height), GraphicsUnit.Pixel); G.DrawImage(srcImg2, new Rectangle(0, 0, srcImg2.Width, srcImg2.Height), new Rectangle(0, 0, srcImg2.Width, srcImg2.Height), GraphicsUnit.Pixel); G.Dispose(); } }
/// <summary> /// 图片数据叠加 /// </summary> public void CmdImage(Bitmap srcimg, Bitmap srcimg2, string outputpath) { ImageSpliceSort eSort = ImageSpliceSort.Vertical; Bitmap destImg = null; BlendImageGdi(srcimg, srcimg2, eSort, out destImg); if (destImg != null) { destImg.Save(outputpath, ImageFormat.Jpeg); destImg.Dispose(); } }
/// <summary> /// 图片数据叠加-文件加载 /// </summary> public void CmdImage(string srcimgPath, string descimgpath, string outputpath) { var srcimg1 = new Bitmap(srcimgPath); var srcimg2 = new Bitmap(descimgpath); ImageSpliceSort eSort = ImageSpliceSort.Vertical; Bitmap destImg = null; BlendImageGdi(srcimg1, srcimg2, eSort, out destImg); if (destImg != null) { destImg.Save(outputpath, ImageFormat.Jpeg); destImg.Dispose(); } srcimg1.Dispose(); srcimg2.Dispose(); }
/// <summary> /// 图片数据截取并叠加 /// </summary> private void TestBlendImageCode3() { string srcimgPath = AppDomain.CurrentDomain.BaseDirectory + "14140889701(1139,919,507,439).jpg"; var srcimg1 = new Bitmap(srcimgPath); Bitmap srcimg2 = null; Rectangle cropRect = new Rectangle(1139, 919, 507, 439); CropImage(srcimg1, cropRect, out srcimg2); ImageSpliceSort eSort = ImageSpliceSort.Vertical; Bitmap destImg = null; BlendImageGdi(srcimg1, srcimg2, eSort, out destImg); destImg.Save(AppDomain.CurrentDomain.BaseDirectory + "14140889701.jpg", ImageFormat.Jpeg); destImg.Dispose(); srcimg1.Dispose(); srcimg2.Dispose(); }
/// <summary> /// 图片数据叠加 /// </summary> private void TestBlendImageCode() { var srcimg1 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "2016-01-12-15h.png"); var srcimg2 = new Bitmap(AppDomain.CurrentDomain.BaseDirectory + "49.jpg"); ImageSpliceSort eSort = ImageSpliceSort.Vertical; Bitmap destImg = null; BlendImageGdi(srcimg1, srcimg2, eSort, out destImg); destImg.Save(AppDomain.CurrentDomain.BaseDirectory + "49_2.jpg", ImageFormat.Jpeg); destImg.Dispose(); eSort = ImageSpliceSort.Horizontal; Bitmap destImg2 = null; BlendImageGdi(srcimg1, srcimg2, eSort, out destImg2); destImg2.Save(AppDomain.CurrentDomain.BaseDirectory + "49_3.jpg", ImageFormat.Jpeg); destImg2.Dispose(); srcimg1.Dispose(); srcimg2.Dispose(); }
/// <summary> /// 图片数据叠加 /// </summary> public bool CmdImage(Bitmap srcimg, Rectangle cropRect, string outputpath, out string errorMsg, int iOver = 0) { try { errorMsg = null; if (srcimg.Width < cropRect.X + cropRect.Width) { errorMsg = "截图区域宽度不符合要求:" + srcimg.Width.ToString() + "-" + (cropRect.X + cropRect.Width).ToString(); return(false); } if (srcimg.Height < cropRect.Y + cropRect.Height) { errorMsg = "截图区域高度不符合要求:" + srcimg.Height.ToString() + "-" + (cropRect.Y + cropRect.Height).ToString(); return(false); } Bitmap srcimg2 = null; CropImage(srcimg, cropRect, out srcimg2); if ((srcimg2 == null) || (srcimg2.Width < 5) || (srcimg2.Height < 5)) { errorMsg = "截图区域小于5个像素"; if (srcimg2 != null) { srcimg2.Dispose(); } return(false); } // 放大或缩小 int zoom = 2; Rectangle zoomRect = new Rectangle(); zoomRect.X = cropRect.X - (int)(cropRect.Width * 1.0F / zoom); zoomRect.Y = cropRect.Y - (int)(cropRect.Height * 1.0F / zoom); if (zoomRect.X < 0) { zoomRect.X = 0; } if (zoomRect.Y < 0) { zoomRect.Y = 0; } var srcimg3 = new Bitmap(srcimg2, srcimg2.Width * zoom, srcimg2.Height * zoom); zoomRect.Width = cropRect.Width * 2; zoomRect.Height = cropRect.Height * 2; Bitmap destImg = null; if (iOver == 0) { Rectangle selRect = SelectRectangle(srcimg, cropRect, zoomRect); if ((selRect.Width > 0 && selRect.Height > 0)) { BlendImageGdi(srcimg, srcimg3, selRect, out destImg); } else { errorMsg = "截图区域无法叠加"; srcimg2.Dispose(); srcimg3.Dispose(); return(false); } } else { ImageSpliceSort eSort = ImageSpliceSort.Default; if (iOver == 1) { eSort = ImageSpliceSort.Vertical; BlendImageGdi(srcimg3, srcimg, eSort, out destImg); } else if (iOver == 3) { eSort = ImageSpliceSort.Vertical; BlendImageGdi(srcimg, srcimg3, eSort, out destImg); } else if (iOver == 2) { eSort = ImageSpliceSort.Horizontal; BlendImageGdi(srcimg3, srcimg, eSort, out destImg); } else { eSort = ImageSpliceSort.Horizontal; BlendImageGdi(srcimg, srcimg3, eSort, out destImg); } } if (destImg != null) { destImg.Save(outputpath, ImageFormat.Jpeg); destImg.Dispose(); srcimg2.Dispose(); srcimg3.Dispose(); return(true); } errorMsg = "截图对象为空"; srcimg2.Dispose(); srcimg3.Dispose(); return(false); } catch (Exception ex) { errorMsg = (ex.InnerException != null) ? ex.InnerException.Message : ex.Message; return(false); } }