public static RenderTargetBitmap GetImage(Canvas canvas, double scale = 1.0, bool avecFond = false) { DrawEntities.CalcMaxDimDoc(); DimMax dim = DrawEntities.dimDoc; Size size = new Size(dim.Width(), dim.Height()); //Size size = new Size(1000, 1000); //System.Windows.Point p0 = new System.Windows.Point(0,-200); System.Windows.Point p0 = new System.Windows.Point(dim.minX, dim.minY); if (size.IsEmpty) { return(null); } //RenderTargetBitmap result = new RenderTargetBitmap((int)size.Width*2, (int)size.Height*2, 96*2, 96*2, PixelFormats.Pbgra32); RenderTargetBitmap result = new RenderTargetBitmap((int)(size.Width * scale), (int)(size.Height * scale), 96 * scale, 96 * scale, PixelFormats.Default); DrawingVisual drawingvisual = new DrawingVisual(); using (DrawingContext context = drawingvisual.RenderOpen()) { if (avecFond) { context.DrawRectangle(Brushes.White, null, new Rect(p0, size)); } context.DrawRectangle(new VisualBrush(canvas), null, new Rect(p0, size)); context.Close(); } result.Render(drawingvisual); return(result); }
public void ZoomAuto(double gridHeight, double gridWidth, double WinHeight, double WinWidth) { if (_child != null) { double hauteurVu; double largeurVu; double hauteurUtil; double largeurUtil; double scaleY; double scaleX; double scale; DrawEntities.CalcMaxDimDoc(); if (DrawEntities.dimDoc.maxY == double.MinValue || DrawEntities.dimDoc.maxX == double.MinValue) { return; } hauteurVu = Math.Abs(DrawEntities.dimDoc.maxY - DrawEntities.dimDoc.minY); largeurVu = Math.Abs(DrawEntities.dimDoc.maxX - DrawEntities.dimDoc.minX); scaleY = (WinHeight) / (hauteurVu); scaleX = WinWidth / (largeurVu); scale = Math.Min(scaleY, scaleX); scale = Scale;// 修改比例 if (scale == 0) { scale = 1.0; hauteurVu = 462; } hauteurUtil = WinHeight - hauteurVu * scale; largeurUtil = WinWidth - largeurVu * scale; var tt = GetTranslateTransform(_child); tt.X = -gridWidth * scale / 2 - DrawEntities.dimDoc.minX * scale; tt.Y = -(gridHeight * scale) / 2 - 250 * scale + (WinHeight) + DrawEntities.dimDoc.minY * scale; var st = GetScaleTransform(_child); st.ScaleX = Math.Abs(scale); st.ScaleY = Math.Abs(scale); } }
public void Reset(double gridHeight, double gridWidth, bool init, double ViewHeight, double ViewWidth, double WinHeight, double WinWidth) { if (_child != null) { double hauteurVu; double largeurVu; double scaleY; double scaleX; double scale; DrawEntities.CalcMaxDimDoc(); if (init == true) { hauteurVu = ViewHeight; largeurVu = ViewWidth; if (hauteurVu == 0.0) { hauteurVu = 462; } if (largeurVu == 0.0) { largeurVu = 500; } } else { hauteurVu = DrawEntities.dimDoc.maxY - DrawEntities.dimDoc.minY; largeurVu = DrawEntities.dimDoc.maxX - DrawEntities.dimDoc.minX; } scaleY = ViewHeight / hauteurVu; scaleX = ViewWidth / largeurVu; scale = Math.Min(scaleY, scaleX); if (scale == 0) { scale = 1.0; } var st = GetScaleTransform(_child); st.ScaleX = scale; st.ScaleY = scale; var tt = GetTranslateTransform(_child); if (WinHeight == 0) { WinHeight = ViewHeight; } if (WinWidth == 0) { WinWidth = ViewWidth; } if (init == true) { tt.X = -gridWidth * scale / 2; tt.Y = -gridHeight * scale / 2; } else { tt.X = -gridWidth * scale / 2 - DrawEntities.dimDoc.minX * scale; tt.Y = -gridHeight * scale / 2 - (WinHeight * scale) / 2 + hauteurVu * scale + DrawEntities.dimDoc.minY * scale; } } }