2

WPF 境界からビットマップを生成しようとしています。全体は、.net 4.0 を実行する asp.net アプリ (もちろんサーバー側) にあります。

問題は、生成された画像が空であることです。誰かが理由を知っていますか?

これがコードです。

public static byte[] Draw(int width, int height)
    {
        MemoryStream memoryStream
            = new MemoryStream();
        Thread t = new Thread(delegate()
            {
                System.Windows.Controls.Border border = new System.Windows.Controls.Border()
                {
                    Background = Brushes.Red,
                    BorderBrush = Brushes.Green,
                    CornerRadius = new System.Windows.CornerRadius(5),
                    Width = width,
                    Height = height
                };

                border.ApplyTemplate();

                RenderTargetBitmap renderTargetBitmap = 
                    new RenderTargetBitmap(width, height, 90, 90, PixelFormats.Pbgra32);

                renderTargetBitmap.Render(border);

                BitmapEncoder bitmapEncoder = 
                    new PngBitmapEncoder();

                bitmapEncoder.Frames.Add(BitmapFrame.Create(renderTargetBitmap));
                bitmapEncoder.Save(memoryStream);
            });
        t.SetApartmentState(ApartmentState.STA);
        t.Start();
        bool success = t.Join(5000);

        if (success)
            return memoryStream.ToArray();
        else
            throw new Exception("Fail");
    }

正しい幅と高さの画像が返されると言ったように、結果はかなり悪いですが、空なので、スレッドビットで台無しにしないと思います。

4

1 に答える 1

4

の直後に追加border.ApplyTemplate:

border.Measure(new Size(width, height));
border.Arrange(new Rect(0, 0, width, height));
border.UpdateLayout();

保存する前に境界線が更新されませんでした。

于 2010-08-01T11:36:19.363 に答える