Положение изображения смещается после экспорта в png в wpf - PullRequest
0 голосов
/ 04 апреля 2020

Я сейчас работаю с wpf. Я создаю кнопку для экспорта изображения в файл PNG. Код как показано ниже: xaml

<Window x:Class="ImageDownload.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ImageDownload"
        mc:Ignorable="d"
        Title="ImageDemo" Height="450" Width="800">
    <StackPanel>
        <Button x:Name="DownloadButton_1" Margin="10" Click="DownloadButton_Click">Download as Image</Button>
        <Image x:Name="canvas" Source="Googlelogo.png" Stretch="Uniform" />
    </StackPanel>
</Window>

код позади

private void DownloadButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                SaveFileDialog saveDialog = new SaveFileDialog();
                saveDialog.Filter = "Png Image(*.PNG)|*.png";

                if (saveDialog.ShowDialog().Value == true)
                {
                    // Save current canvas transform
                    Transform transform = canvas.LayoutTransform;
                    // reset current transform (in case it is scaled or rotated)
                    canvas.LayoutTransform = null;

                    // Get the size of canvas
                    Size size = new Size(canvas.ActualWidth, canvas.ActualHeight);
                    // Measure and arrange the surface
                    // VERY IMPORTANT
                    canvas.Measure(size);
                    canvas.Arrange(new Rect(size));

                    // Create a render bitmap and push the surface to it
                    RenderTargetBitmap renderBitmap =
                      new RenderTargetBitmap(
                        (int)size.Width,
                        (int)size.Height,
                        96d,
                        96d,
                        PixelFormats.Default);
                    renderBitmap.Render(canvas);
                    BitmapEncoder encoder = new BmpBitmapEncoder();
                    string extension = saveDialog.FileName.Substring(saveDialog.FileName.LastIndexOf('.'));
                    encoder = new PngBitmapEncoder();
                    // push the rendered bitmap to it
                    encoder.Frames.Add(BitmapFrame.Create(renderBitmap));
                    // Create a file stream for saving image
                    using (FileStream fs = File.Open(saveDialog.FileName, FileMode.OpenOrCreate))
                    {
                        encoder.Save(fs);
                    }
                    // Restore previously saved layout
                    canvas.LayoutTransform = transform;
                }

            }
            catch (Exception)
            {

                throw;
            }
        }

Когда я отлаживаю, окно выглядит следующим образом: enter image description here

Однако, когда я нажимаю кнопку загрузки и успешно экспортирую изображение в файл png, положение изображения смещается следующим образом: enter image description here

После некоторого устранения неполадок я обнаружил, что эта строка вызывает проблему:

canvas.Arrange(new Rect(size));

Но если я удалю эту строку, мой png-файл будет обрезан внизу, как показано ниже: enter image description here

Может кто-нибудь посоветовать мне, как решить эту проблему?

Заранее спасибо

...