代码之家  ›  专栏  ›  技术社区  ›  Dänu

在ASP.NET中生成wpfuielement的位图

  •  2
  • Dänu  · 技术社区  · 15 年前

    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");
        }
    

    结果是非常糟糕的,正如我所说的那样,这个东西返回的图像具有正确的宽度和高度,但是它是空的,所以我想我不会用线程位来搞乱这个东西。

    1 回复  |  直到 12 年前
        1
  •  4
  •   Dave Clemmer manu    12 年前

    在后面添加 border.ApplyTemplate :

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

    推荐文章