using System; using System.Drawing; using System.Drawing.Drawing2D; using System.Windows.Forms; using Metis.ParameterSet; using PaintDotNet.Adjust.BaseImage; using PaintDotNet.Annotation; using PaintDotNet.Annotation.Enum; using PaintDotNet.Base.CommTool; using PaintDotNet.CustomControl; namespace PaintDotNet.GeneralAnalysis.Artwork { internal partial class ArtworkPointUserControl : ArtworkUserControl { private AppWorkspace m_appWorkspace; private DocumentWorkspaceWindow m_artWorkspace; private DocumentWorkspaceWindow m_targetWorkspace; private Bitmap m_selectedBitmap; private int m_selectedIndex; private int m_targetPoint1X; private int m_targetPoint1Y; private int m_targetPoint2X; private int m_targetPoint2Y; private ArtworkControlButtons m_artCommonControlButtons; private ArtworkControlButtons m_targetCommonControlButtons; private void InitializeLanguageText() { this.groupBox1.Text = PdnResources.GetString("Menu.Generalanalysis.Processmparison.Targetpicture.text"); this.label2.Text = PdnResources.GetString("Menu.transparency.text"); this.chkLine.Text = PdnResources.GetString("Menu.Generalanalysis.Processmparison.displayauxiliarylines.text"); this.chkGrids.Text = PdnResources.GetString("Menu.displaygrid.text"); this.groupBox4.Text = PdnResources.GetString("Menu.Setting.Text"); this.groupBox3.Text = PdnResources.GetString("Menu.Processdrawing.Text"); this.groupBox2.Text = PdnResources.GetString("Menu.fixedpointtoenlargethdisplayarea.Text"); this.groupBox5.Text = PdnResources.GetString("Menu.Generalanalysis.Processmparison.Targetgraphcontrol.text"); this.label1.Text = PdnResources.GetString("Menu.transparency.text"); } public ArtworkPointUserControl(AppWorkspace appWorkspace, int width, int height) { m_appWorkspace = appWorkspace; InitializeComponent(); InitializeLanguageText(); this.Width = width; this.Height = height; InitializeData(); InitializeArtBaseTool(); InitializeTargetBaseTool(); } private void InitializeData() { this.m_artWorkspace = new DocumentWorkspaceWindow(m_appWorkspace); this.m_artWorkspace.AppWorkspaceTop = m_appWorkspace; this.m_artWorkspace.Visible = true; this.m_artWorkspace.Dock = DockStyle.Fill; this.pnlArt.Controls.Add(this.m_artWorkspace); this.m_artWorkspace.GraphicsList.SelectChanged += ArtGraphicsList_SelectChanged; this.m_targetWorkspace = new DocumentWorkspaceWindow(m_appWorkspace); this.m_targetWorkspace.AppWorkspaceTop = m_appWorkspace; this.m_targetWorkspace.Visible = true; this.m_targetWorkspace.Dock = DockStyle.Fill; this.pnlTarget.Controls.Add(this.m_targetWorkspace); this.m_targetWorkspace.GraphicsList.SelectChanged += TargetGraphicsList_SelectChanged; Init(); } #region 初始化基础工具 /// /// 初始化基础工具 /// public void InitializeTargetBaseTool() { this.m_targetCommonControlButtons = new ArtworkControlButtons(); this.m_targetCommonControlButtons.Dock = DockStyle.Top; this.m_targetCommonControlButtons.Height = 30; this.pnlTargetTools.Controls.Add(m_targetCommonControlButtons); this.m_targetCommonControlButtons.zoomInButton.Click += new EventHandler(zoomInButtonTarget_Click); this.m_targetCommonControlButtons.zoomOutButton.Click += new EventHandler(zoomOutButtonTarget_Click); this.m_targetCommonControlButtons.zoomToWindowButton.Click += new EventHandler(zoomToWindowButtonTarget_Click); this.m_targetCommonControlButtons.actualSizeButton.Click += new EventHandler(actualSizeButtonTarget_Click); this.m_targetCommonControlButtons.pointerButton.Click += new EventHandler(pointerButtonTarget_Click); this.m_targetCommonControlButtons.mobileModeButton.Click += new EventHandler(mobileModeButtonTarget_Click); this.m_targetCommonControlButtons.moveUpButton.Click += new EventHandler(moveUpButtonTarget_Click); this.m_targetCommonControlButtons.moveDownButton.Click += new EventHandler(moveDownButtonTarget_Click); this.m_targetCommonControlButtons.moveLeftButton.Click += new EventHandler(moveLeftButtonTarget_Click); this.m_targetCommonControlButtons.moveRightButton.Click += new EventHandler(moveRightButtonTarget_Click); } private void moveUpButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_targetWorkspace.GraphicsList.Count; i++) { if (this.m_targetWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_targetWorkspace.GraphicsList[i].Rectangle; this.m_targetWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X, rectangleF.Y - 1, rectangleF.Width, rectangleF.Height); this.m_targetWorkspace.Refresh(); return; } } } } private void moveDownButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_targetWorkspace.GraphicsList.Count; i++) { if (this.m_targetWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_targetWorkspace.GraphicsList[i].Rectangle; this.m_targetWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X, rectangleF.Y + 1, rectangleF.Width, rectangleF.Height); this.m_targetWorkspace.Refresh(); return; } } } } private void moveLeftButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_targetWorkspace.GraphicsList.Count; i++) { if (this.m_targetWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_targetWorkspace.GraphicsList[i].Rectangle; this.m_targetWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X - 1, rectangleF.Y, rectangleF.Width, rectangleF.Height); this.m_targetWorkspace.Refresh(); return; } } } } private void moveRightButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_targetWorkspace.GraphicsList.Count; i++) { if (this.m_targetWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_targetWorkspace.GraphicsList[i].Rectangle; this.m_targetWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X + 1, rectangleF.Y, rectangleF.Width, rectangleF.Height); this.m_targetWorkspace.Refresh(); return; } } } } private void mobileModeButtonTarget_Click(object sender, EventArgs e) { this.m_targetWorkspace.ActiveTool = Annotation.Enum.DrawToolType.MoveMode; } private void pointerButtonTarget_Click(object sender, EventArgs e) { this.m_targetWorkspace.ActiveTool = Annotation.Enum.DrawToolType.Pointer; } private void zoomToWindowButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { this.m_targetWorkspace.ZoomToWindow(); } } private void actualSizeButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) { this.m_targetWorkspace.ZoomBasis = ZoomBasis.ScaleFactor; this.m_targetWorkspace.ScaleFactor = ScaleFactor.OneToOne; } } private void zoomOutButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) this.m_targetWorkspace.ZoomOut(); } private void zoomInButtonTarget_Click(object sender, EventArgs e) { if (this.m_targetWorkspace.CompositionSurface != null) this.m_targetWorkspace.ZoomIn(); } public void InitializeArtBaseTool() { this.m_artCommonControlButtons = new ArtworkControlButtons(); this.m_artCommonControlButtons.Dock = DockStyle.Top; this.m_artCommonControlButtons.Height = 30; this.pnlArtTools.Controls.Add(m_artCommonControlButtons); this.m_artCommonControlButtons.zoomInButton.Click += new EventHandler(zoomInButton_Click); this.m_artCommonControlButtons.zoomOutButton.Click += new EventHandler(zoomOutButton_Click); this.m_artCommonControlButtons.zoomToWindowButton.Click += new EventHandler(zoomToWindowButton_Click); this.m_artCommonControlButtons.actualSizeButton.Click += new EventHandler(actualSizeButton_Click); this.m_artCommonControlButtons.pointerButton.Click += new EventHandler(pointerButton_Click); this.m_artCommonControlButtons.mobileModeButton.Click += new EventHandler(mobileModeButton_Click); this.m_artCommonControlButtons.moveUpButton.Click += new EventHandler(moveUpButton_Click); this.m_artCommonControlButtons.moveDownButton.Click += new EventHandler(moveDownButton_Click); this.m_artCommonControlButtons.moveLeftButton.Click += new EventHandler(moveLeftButton_Click); this.m_artCommonControlButtons.moveRightButton.Click += new EventHandler(moveRightButton_Click); } private void moveUpButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_artWorkspace.GraphicsList.Count; i++) { if (this.m_artWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_artWorkspace.GraphicsList[i].Rectangle; this.m_artWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X, rectangleF.Y - 1, rectangleF.Width, rectangleF.Height); this.m_artWorkspace.Refresh(); return; } } } } private void moveDownButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_artWorkspace.GraphicsList.Count; i++) { if (this.m_artWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_artWorkspace.GraphicsList[i].Rectangle; this.m_artWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X, rectangleF.Y + 1, rectangleF.Width, rectangleF.Height); this.m_artWorkspace.Refresh(); return; } } } } private void moveLeftButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_artWorkspace.GraphicsList.Count; i++) { if (this.m_artWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_artWorkspace.GraphicsList[i].Rectangle; this.m_artWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X - 1, rectangleF.Y, rectangleF.Width, rectangleF.Height); this.m_artWorkspace.Refresh(); return; } } } } private void moveRightButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { for (int i = 0; i < this.m_artWorkspace.GraphicsList.Count; i++) { if (this.m_artWorkspace.GraphicsList[i].Selected) { RectangleF rectangleF = this.m_artWorkspace.GraphicsList[i].Rectangle; this.m_artWorkspace.GraphicsList[i].Rectangle = new RectangleF(rectangleF.X + 1, rectangleF.Y, rectangleF.Width, rectangleF.Height); this.m_artWorkspace.Refresh(); return; } } } } private void mobileModeButton_Click(object sender, EventArgs e) { this.m_artWorkspace.ActiveTool = Annotation.Enum.DrawToolType.MoveMode; } private void pointerButton_Click(object sender, EventArgs e) { this.m_artWorkspace.ActiveTool = Annotation.Enum.DrawToolType.Pointer; } private void zoomToWindowButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { this.m_artWorkspace.ZoomToWindow(); } } private void actualSizeButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) { this.m_artWorkspace.ZoomBasis = ZoomBasis.ScaleFactor; this.m_artWorkspace.ScaleFactor = ScaleFactor.OneToOne; } } private void zoomOutButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) this.m_artWorkspace.ZoomOut(); } private void zoomInButton_Click(object sender, EventArgs e) { if (this.m_artWorkspace.CompositionSurface != null) this.m_artWorkspace.ZoomIn(); } #endregion private Rectangle m_cropRectangle; public void getData(GeneralAnalysisModel.ArtworkComparativeModel artworkComparativeModel) { this.chkGrids.Checked = artworkComparativeModel.parameter2; this.chkLine.Checked = artworkComparativeModel.parameter3; this.trbArt.Value = artworkComparativeModel.parameter4; this.txtArtTrbValue.Text = artworkComparativeModel.parameter4.ToString(); this.trbTarget.Value = artworkComparativeModel.parameter6; this.txtTargetTrbValue.Text = artworkComparativeModel.parameter6.ToString(); } public GeneralAnalysisModel.ArtworkComparativeModel saveData() { var artworkComparativeModel = new GeneralAnalysisModel.ArtworkComparativeModel(); artworkComparativeModel.parameter2 = this.chkGrids.Checked; artworkComparativeModel.parameter3 = this.chkLine.Checked; artworkComparativeModel.parameter4 = this.trbArt.Value; artworkComparativeModel.parameter6 = this.trbTarget.Value; return artworkComparativeModel; } private void ArtGraphicsList_SelectChanged(object sender, EventArgs e) { GraphicsList graphicsList = (GraphicsList)sender; if (graphicsList.Count < 2) { return; } for (int i = 0; i < graphicsList.Count; i++) { RectangleF rectangle = graphicsList[i].GetBoundingBox(); if (((DrawObject)graphicsList[i]).ID == 1) { Artwork.point2X = (int)rectangle.X + Artwork.side / 2; Artwork.point2Y = (int)rectangle.Y + Artwork.side / 2; } else { Artwork.point1X = (int)rectangle.X + Artwork.side / 2; Artwork.point1Y = (int)rectangle.Y + Artwork.side / 2; } if (graphicsList[i].Selected) { m_selectedIndex = ((DrawObject)graphicsList[i]).ID; m_cropRectangle = Rectangle.Ceiling(rectangle); m_selectedBitmap = ImageTools.Crop(this.ArtBitmap, m_cropRectangle); picSelected.Image = m_selectedBitmap; if(this.m_targetWorkspace.GraphicsList.GetDrawClassList(DrawClass.Label).Count > m_selectedIndex) { rectangle = this.m_targetWorkspace.GraphicsList[i].GetBoundingBox(); this.m_targetWorkspace.SetSelectedBitmap(m_selectedBitmap, rectangle); } } } } private void TargetGraphicsList_SelectChanged(object sender, EventArgs e) { GraphicsList graphicsList = (GraphicsList)sender; if (graphicsList.Count < 2) { return; } for (int i = 0; i < graphicsList.Count; i++) { RectangleF rectangle = graphicsList[i].GetBoundingBox(); if (((DrawObject)graphicsList[i]).ID == 1) { m_targetPoint2X = (int)rectangle.X + Artwork.side / 2; m_targetPoint2Y = (int)rectangle.Y + Artwork.side / 2; } else { m_targetPoint1X = (int)rectangle.X + Artwork.side / 2; m_targetPoint1Y = (int)rectangle.Y + Artwork.side / 2; } if (graphicsList[i].Selected) { if (m_selectedIndex == ((DrawObject)graphicsList[i]).ID) { this.m_targetWorkspace.SetSelectedBitmap(m_selectedBitmap, rectangle); } } } } public override void Init() { if (this.ArtBitmap != null) { this.chkGrids.Checked = this.GridLineEnabled; this.chkLine.Checked = this.AuxiliaryLineEnabled; this.trbArt.Value = this.Transparency; Document document = Document.FromImage(this.ArtBitmap); this.m_artWorkspace.Document = document; //Artwork = Startup.instance.artworkModel.items[m_selectIndex]; if (Artwork != null) { if (this.m_artWorkspace.GraphicsList.Count != 2 || ArtChanged) { this.ArtChanged = false; this.m_artWorkspace.GraphicsList.Clear(); // 加载两点的方形 Pen pen1 = new Pen(ColorTranslator.FromHtml(Artwork.point1Color), Artwork.lineWidth); Rectangle rectangle1 = new Rectangle(Artwork.point1X - Artwork.side / 2, Artwork.point1Y - Artwork.side / 2, Artwork.side, Artwork.side); this.m_artWorkspace.ActiveTool = DrawToolType.DrawArtworkRectangle; this.m_artWorkspace.CreateArtworkRectangle(0, pen1, rectangle1); Pen pen2 = new Pen(ColorTranslator.FromHtml(Artwork.point2Color), Artwork.lineWidth); Rectangle rectangle2 = new Rectangle(Artwork.point2X - Artwork.side / 2, Artwork.point2Y - Artwork.side / 2, Artwork.side, Artwork.side); this.m_artWorkspace.ActiveTool = DrawToolType.DrawArtworkRectangle; this.m_artWorkspace.CreateArtworkRectangle(1, pen2, rectangle2); } } } if (this.TargetBitmap != null) { this.trbTarget.Value = this.TargetTransparency; Document document = Document.FromImage(this.TargetBitmap); this.m_targetWorkspace.Document = document; if (Artwork != null) // { if (this.m_targetWorkspace.GraphicsList.Count != 2 || ArtChanged) { this.m_targetWorkspace.GraphicsList.Clear(); // 加载两点的方形 Pen pen1 = new Pen(ColorTranslator.FromHtml(Artwork.point1Color), Artwork.lineWidth); Rectangle rectangle1 = new Rectangle(Artwork.point1X - Artwork.side / 2, Artwork.point1Y - Artwork.side / 2, Artwork.side, Artwork.side); this.m_targetWorkspace.ActiveTool = DrawToolType.DrawArtworkRectangle; this.m_targetWorkspace.CreateArtworkRectangle(0, pen1, rectangle1); Pen pen2 = new Pen(ColorTranslator.FromHtml(Artwork.point2Color), Artwork.lineWidth); Rectangle rectangle2 = new Rectangle(Artwork.point2X - Artwork.side / 2, Artwork.point2Y - Artwork.side / 2, Artwork.side, Artwork.side); this.m_targetWorkspace.ActiveTool = DrawToolType.DrawArtworkRectangle; this.m_targetWorkspace.CreateArtworkRectangle(1, pen2, rectangle2); } } } } private void ArtworkPointUserControl_Resize(object sender, EventArgs e) { int width = groupBox4.Location.X - groupBox3.Location.X - 6 - 6; groupBox3.Width = width / 2; groupBox3.Height = this.Height - 10; pnlArt.Width = groupBox3.Width - 12; pnlArt.Height = groupBox3.Height - 100; pnlArtTools.Width = groupBox3.Width - 12; pnlArtTools.Top = groupBox3.Height - 57; pnlArtTools.Left = pnlArt.Left; groupBox1.Location = new Point(groupBox3.Location.X + width / 2 + 6, groupBox3.Location.Y); groupBox1.Width = width / 2; groupBox1.Height = this.Height - 10; pnlTarget.Width = groupBox1.Width - 12; pnlTarget.Height = groupBox1.Height - 100; pnlTargetTools.Width = groupBox1.Width - 12; pnlTargetTools.Top = groupBox1.Height - 57; pnlTargetTools.Left = pnlTarget.Left; } private void chkGrids_CheckedChanged(object sender, EventArgs e) { if (this.m_artWorkspace != null) { this.m_artWorkspace.GridLineFullEnabled = !this.m_artWorkspace.GridLineFullEnabled; this.m_artWorkspace.Refresh(); } if (this.m_targetWorkspace != null) { this.m_targetWorkspace.GridLineFullEnabled = !this.m_targetWorkspace.GridLineFullEnabled; this.m_targetWorkspace.Refresh(); } this.GridLineEnabled = chkGrids.Checked; } private void chkLine_CheckedChanged(object sender, EventArgs e) { if (this.m_artWorkspace != null) { this.m_artWorkspace.AuxiliaryLineEnabled = !this.m_artWorkspace.AuxiliaryLineEnabled; this.m_artWorkspace.Refresh(); } if (this.m_targetWorkspace != null) { this.m_targetWorkspace.AuxiliaryLineEnabled = !this.m_targetWorkspace.AuxiliaryLineEnabled; this.m_targetWorkspace.Refresh(); } this.AuxiliaryLineEnabled = chkLine.Checked; } private void trbArt_ValueChanged(object sender, EventArgs e) { this.Transparency = trbArt.Value; if (this.ArtBitmap != null) { this.ArtBitmap = MakeTransparent(this.ArtBitmap, trbArt.Value); try { m_selectedBitmap = ImageTools.Crop(this.ArtBitmap, m_cropRectangle); } catch (Exception) { return; } picSelected.Image = m_selectedBitmap; if (this.m_targetWorkspace.GraphicsList.GetDrawClassList(DrawClass.Label).Count > m_selectedIndex) { RectangleF rectangle = this.m_targetWorkspace.GraphicsList[m_selectedIndex].GetBoundingBox(); this.m_targetWorkspace.SetSelectedBitmap(m_selectedBitmap, rectangle); } } txtArtTrbValue.Text = trbArt.Value.ToString(); } private void txtArtTrbValue_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { if (string.IsNullOrEmpty(txtArtTrbValue.Text.Trim())) { e.Handled = true; this.txtArtTrbValue.Text = "0"; return; } int val = Convert.ToInt32(this.txtArtTrbValue.Text); if (val < 0) { val = 0; this.txtArtTrbValue.Text = "0"; } else if (val > 255) { val = 255; this.txtArtTrbValue.Text = "255"; } trbArt.Value = val; } if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar)) { e.Handled = true; } } private void trbTarget_ValueChanged(object sender, EventArgs e) { this.TargetTransparency = trbTarget.Value; if (this.TargetBitmap != null) { this.TargetBitmap = MakeTransparent(this.TargetBitmap, trbTarget.Value); } txtTargetTrbValue.Text = trbTarget.Value.ToString(); } private void txtTargetTrbValue_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { if (string.IsNullOrEmpty(txtTargetTrbValue.Text.Trim())) { e.Handled = true; this.txtTargetTrbValue.Text = "0"; return; } int val = Convert.ToInt32(this.txtTargetTrbValue.Text); if (val < 0) { val = 0; this.txtTargetTrbValue.Text = "0"; } else if (val > 255) { val = 255; this.txtTargetTrbValue.Text = "255"; } trbTarget.Value = val; } if (e.KeyChar != 8 && !Char.IsDigit(e.KeyChar)) { e.Handled = true; } } private double TargetRotate() { double angleOfArt = Math.Atan2((Artwork.point2Y - Artwork.point1Y), (Artwork.point2X - Artwork.point1X)) * 180 / Math.PI; double angleOfTarget = Math.Atan2((m_targetPoint2Y - m_targetPoint1Y), (m_targetPoint2X - m_targetPoint1X)) * 180 / Math.PI; return angleOfTarget - angleOfArt; } /// /// 工艺图比照,定位插入,保存图片 /// public void Save() { float angle = (float)TargetRotate(); double distanceArt = ImageTools.CalcDistance(new Point(Artwork.point1X, Artwork.point1Y), new Point(Artwork.point2X, Artwork.point2Y)); double distanceTarget = ImageTools.CalcDistance(new Point(m_targetPoint1X, m_targetPoint1Y), new Point(m_targetPoint2X, m_targetPoint2Y)); //旋转图片 OpenCvSharp.Mat targetMat = PaintDotNet.Camera.Tools.ToMat(this.TargetBitmap); BaseTools.ImageRotate(targetMat, targetMat, -angle, OpenCvSharp.InterpolationFlags.Linear); //计算绘制的左上角的坐标点 //计算旋转后的点 Matrix matrix = new Matrix(); matrix.RotateAt((float)-angle, new Point(this.TargetBitmap.Width/2, this.TargetBitmap.Height / 2)); Point[] ff = new Point[2]; ff[0] = new Point(m_targetPoint1X, m_targetPoint1Y); ff[1] = new Point(m_targetPoint2X, m_targetPoint2Y); matrix.TransformPoints(ff); matrix.Dispose(); matrix = null; //缩放点 int xcha = (targetMat.Width - this.TargetBitmap.Width)/ 2; int ycha = (targetMat.Height - this.TargetBitmap.Height) / 2; OpenCvSharp.Point new1 = new OpenCvSharp.Point(ff[0].X + xcha, ff[0].Y + ycha); OpenCvSharp.Point new2 = new OpenCvSharp.Point(ff[1].X + xcha, ff[1].Y + ycha); /*OpenCvSharp.Cv2.Circle(targetMat, new1, 2, new OpenCvSharp.Scalar(0, 255, 0)); OpenCvSharp.Cv2.Circle(targetMat, new2, 2, new OpenCvSharp.Scalar(0, 0, 255)); OpenCvSharp.Cv2.ImShow("11", targetMat);*/ //缩放图片 double scale = distanceArt / distanceTarget; OpenCvSharp.Cv2.Resize(targetMat, targetMat, new OpenCvSharp.Size(targetMat.Width* scale, targetMat.Height*scale)); OpenCvSharp.Point new11 = new OpenCvSharp.Point(new1.X * scale, new1.Y * scale); OpenCvSharp.Point new22 = new OpenCvSharp.Point(new2.X * scale, new2.Y * scale); /*OpenCvSharp.Cv2.Circle(targetMat, new11, 2, new OpenCvSharp.Scalar(0, 255, 0)); OpenCvSharp.Cv2.Circle(targetMat, new22, 2, new OpenCvSharp.Scalar(0, 0, 255)); OpenCvSharp.Cv2.ImShow("22", targetMat);*/ //计算绘制位置位置 //获取相对两个点的左上角的点 Point targetleftTopTemp = new Point(new11.X < new22.X ? new11.X : new22.X, new11.Y < new22.Y ? new11.Y : new22.Y); Point artleftTopTemp = new Point(Artwork.point1X < Artwork.point2X ? Artwork.point1X : Artwork.point2X, Artwork.point1Y < Artwork.point2Y ? Artwork.point1Y : Artwork.point2Y); Point drawPoint = new Point(artleftTopTemp.X - targetleftTopTemp.X, artleftTopTemp.Y - targetleftTopTemp.Y); // 2020091 edit //Bitmap temp = (Bitmap)this.ArtBitmap.Clone(); Bitmap temp = new Bitmap(this.ArtBitmap.Width, this.ArtBitmap.Height); Graphics graphics = Graphics.FromImage(temp); graphics.DrawImage(OpenCvSharp.Extensions.BitmapConverter.ToBitmap(targetMat), drawPoint.X, drawPoint.Y, targetMat.Width, targetMat.Height); //OpenCvSharp.Cv2.ImShow("22", PaintDotNet.Camera.Tools.ToMat(temp)); this.TargetBitmap = temp; // end edit //DocumentWorkspace dw = m_appWorkspace.AddNewDocumentWorkspace(); //Document document = Document.FromImage(temp); //document.Dirty = true; //dw.Document = document; ////激活 //m_appWorkspace.ActiveDocumentWorkspace = dw; ////锁定扩缩 //if (m_appWorkspace.isLockZoom && m_appWorkspace.lockScaleRatio > 0) //{ // m_appWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.ScaleFactor; // m_appWorkspace.ActiveDocumentWorkspace.ScaleFactor = ScaleFactor.FromDouble(m_appWorkspace.lockScaleRatio); // m_appWorkspace.SetZoonTrackValue(m_appWorkspace.ActiveDocumentWorkspace.ScaleFactor); //} //else //{ // m_appWorkspace.ActiveDocumentWorkspace.ZoomBasis = ZoomBasis.FitToWindow; //} //m_appWorkspace.Refresh(); } } }