21

なぜこれが機能しないのか、または機能させるために何が必要なのか理解できません。

再現するには、単純なWPFアプリケーションを作成し、メインウィンドウのコンストラクターを次のように置き換えます。

    public MainWindow()
    {
        InitializeComponent();

        // simple visual definition
        var grid = new Grid { Width = 300, Height = 300 };
        var text = new TextBlock 
                       { 
                         Text = "Y DON'T I WORK???", 
                         FontSize = 100, 
                         FontWeight = 
                         FontWeights.Bold 
                       };
        grid.Children.Add(text);

        // update the layout so everything is awesome cool
        grid.Measure(grid.DesiredSize);
        grid.Arrange(new Rect(grid.DesiredSize));
        grid.UpdateLayout();

        // create a BitmapSource from the visual
        var rtb = new RenderTargetBitmap(
                                    (int)grid.Width,
                                    (int)grid.Height,
                                    96,
                                    96,
                                    PixelFormats.Pbgra32);
        rtb.Render(grid);

        // Slap it in the window
        this.Content = new Image { Source = rtb, Width = 300, Height = 300 };
    }

これにより、画像が空になります。RTBをPNGとしてディスクに保存すると、正しいサイズですが透明になります。

ただし、画面に表示されているビジュアルを使用してこれを行うと、正常に機能します。

画面外で作成したビジュアルをビットマップにレンダリングするにはどうすればよいですか?

4

1 に答える 1

27

あなたがそれらを測定するまで、要素は望ましいサイズを持っていないからです。グリッドに、0x0の使用可能なスペースでサイズを設定するように指示していました。コードを次のように変更します。

grid.Measure(new Size(grid.Width, grid.Height));
grid.Arrange(new Rect(new Size(grid.Width, grid.Height)));

(UpdateLayoutの呼び出しは不要です。)

于 2009-12-09T23:49:19.997 に答える