RenderTargetBitmap呈现整个屏幕,而不是仅呈现

时间:2018-10-23 21:45:35

标签: c# wpf

我想将圆圈另存为png。

这是使用的代码:

        RenderTargetBitmap renderTargetBitmap = new RenderTargetBitmap((int)Width, (int)Height, 96, 96, PixelFormats.Pbgra32);
        renderTargetBitmap.Render(kreis);

        PngBitmapEncoder pngImage = new PngBitmapEncoder();
        pngImage.Frames.Add(BitmapFrame.Create(renderTargetBitmap));

        if (File.Exists(dateipfad + textBox.Text + ".png"))
            File.Delete(dateipfad + textBox.Text + ".png");

        using (Stream fileStream = File.Create(dateipfad + textBox.Text + ".png"))
        {
            pngImage.Save(fileStream);
        }

但是,它始终会保存525x350 png文件(带有圆圈)。

我想要的是,png文件的大小与圆圈的大小相同。

但是当我将WidthHeight更改为Kreis.WidthKreis.Height

  

顺便说一句:“ Kreis”是德语的“圆圈”

然后图像具有正确的大小,但其中不包含圆圈,因为圆圈在应用程序的右侧。而且它只是从左侧制作一个屏幕。

是否不仅可以为RenderTargetBitmap设置Width和Height,还可以通过某种方式设置startX和startY?

编辑:

这是圈子的XAML:

       <Ellipse x:Name="kreis" Grid.Column="1" HorizontalAlignment="Center" Height="{Binding ElementName=slider, Path=Value}" Margin="0" Stroke="#FF8F8FF9" VerticalAlignment="Center" Width="{Binding ElementName=slider, Path=Value}" Fill="#FF5555D1" StrokeThickness="2"/>

这是我收到的图像:

(如果单击图像,您会看到它不仅包含圆圈。我需要的是图像仅包含圆圈,因此图像的宽度/高度是图像的宽度/高度。圈。

enter image description here

1 个答案:

答案 0 :(得分:0)

在以下问题中尝试ILIA BROUDNO的答案:Snapshot of an WPF Canvas Area using RenderTargetBitmap

您的XAML显示圆形包含在网格中,因为附加属性Grid.Column设置为1。这使我保证圆形的尺寸相对于网格甚至是窗口都绘制。 因此,从Kreis元素创建VisualBrush,然后在0,0位置显式绘制此VisualBrush可能会解决您的问题。