Как сохранить холст как изображение, не удлиняя дочерний элемент холста.
Как я могу сохранить холст как изображение, включая дочерний элемент canvas?
Я попытался сохранить холст как изображение, но после сохранения холста. Это дочерний элемент, показанный как удлиненный или полосатый. Как я могу перестать растягивать дочерний элемент canvas?
Что я уже пробовал:
<Canvas x:Name="MainObjectImage" Background="White" ClipToBounds="True" SnapsToDevicePixels="True"> <Canvas x:Name="canvas_Draw" SnapsToDevicePixels="True"> <Image x:Name="imgSelectedImage" Canvas.Left="0" Canvas.Top="0" /> </Canvas> <Image x:Name="imgForeGroundImage" Stretch="UniformToFill" HorizontalAlignment="Stretch" /> </Canvas>
The following code I used for the save canvas as Image.
try { System.Windows.Size sizeOrignal = new System.Windows.Size(MainObjectImage.ActualWidth, MainObjectImage.ActualHeight); int sourceX = 0; int sourceY = 0; int destX = 0; int destY = 0; float nPercent = 0; float nPercentW = 0; float nPercentH = 0; double Width = 2160; double Height = 1440; if (MainObjectImage.Background != null) { ImageBrush Imbrush = (ImageBrush)MainObjectImage.Background; if (Imbrush.ImageSource != null) { // Actual Height and with of the Main object Image. Its used for the save image height and width. Width = Imbrush.ImageSource.Width; Height = Imbrush.ImageSource.Height; } } double sourceWidth = MainObjectImage.ActualWidth; double sourceHeight = MainObjectImage.ActualHeight;// image.Height; ///change code for image aspect ration nPercentW = ((float)Width / (float)sourceWidth); nPercentH = ((float)Height / (float)sourceHeight); int destWidth = (int)(sourceWidth * nPercentW); int destHeight = (int)(sourceHeight * nPercentH); FileStream fs = new FileStream(savedConvertedImage, FileMode.Create); System.Windows.Size sizeRender = new System.Windows.Size(destWidth, destHeight); RenderTargetBitmap rtb = new RenderTargetBitmap((int)(MainObjectImage.ActualWidth), (int)(MainObjectImage.ActualHeight), 96, 96, PixelFormats.Pbgra32); Rect bounds = VisualTreeHelper.GetDescendantBounds(MainObjectImage); DrawingVisual dv = new DrawingVisual(); using (DrawingContext ctx = dv.RenderOpen()) { VisualBrush vb = new VisualBrush(MainObjectImage); ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point(), sizeRender)); } rtb.Render(dv); MemoryStream stream = new MemoryStream(); PngBitmapEncoder encoder = new PngBitmapEncoder(); encoder.Frames.Add(BitmapFrame.Create(rtb)); encoder.Save(fs); fs.Close(); } catch (Exception ex) { MessageBox.Show(ex.Message); }