簡體   English   中英

將XAML窗口轉換為位圖

[英]Convert XAML Window to Bitmap

我有一個簡單的XAML像這樣:

<UserControl x:Class="blabla.MyView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         Name="myUserControl">
 <Grid Name="myGrid" Background="White">
    <TextBlock Name="myTextBlock"/>
 </Grid>
</UserControl>

現在,我想使用此xaml在后台創建一個新視圖。 之后,我想更改控件(或自己添加一些控件),將其保存到位圖,然后將其分配給剪貼板(僅查看輸出)。 我會這樣嘗試的:

MyView view = new MyView();
view.myTextBlock.Text = "TEST";

Rect bounds = VisualTreeHelper.GetDescendantBounds(view);
DrawingVisual dv = new DrawingVisual();
using (DrawingContext ctx = dv.RenderOpen())
{
    VisualBrush vb = new VisualBrush(view);
    ctx.DrawRectangle(vb, null, new Rect(new System.Windows.Point(), bounds.Size));
}
RenderTargetBitmap bmp = new RenderTargetBitmap((int)view.ActualWidth, (int)view.ActualHeight, 96, 96, PixelFormats.Pbgra32);

bmp.Render(dv);

PngBitmapEncoder pngImage = new PngBitmapEncoder();
pngImage.Frames.Add(BitmapFrame.Create(bmp));
System.Windows.Clipboard.SetImage(pngImage.Frames[0]);

不幸的是, view的大小沒有改變。 嘗試通過設置硬編碼的寬度/高度來生成黑色圖像/位圖。

如何使用XAML創建簡單的位圖?

對官方回答發表評論。 但是,我看到這種解決方案不是最優雅的解決方案。 一般的事情是,窗戶,分別。 視圖,渲染時會導致黑色區域,而無論如何也無法顯示/自身變黑。

工作環境將是顯示此視圖(如您所寫,但在Window中)。 做這個小主意,請將窗口移出可見屏幕,以避免閃爍。 例:

        var v = new MainWindow();
        v.Top = -10000; // far away
        v.Left = -10000; // far away
        v.Show();
        // .. do rendering
        v.Close();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM