代码之家  ›  专栏  ›  技术社区  ›  ZeroBugBounce

从WPF应用程序窗口获取位图?

  •  5
  • ZeroBugBounce  · 技术社区  · 16 年前

    Winforms System.Windows.Forms.Control类有一个实例方法“DrawToBitmap”,我认为它在各种情况下都非常有用。我想知道是否有从WPF应用程序获取System.Drawing.Bitmap的等效方法?

    我意识到我可以做一些P/Invoke的工作来获取应用程序窗口,但是我不喜欢这样,因为它不能很好地适应64位转换,并且不能像DrawToBitmap那样只渲染子控件。

    理查德

    2 回复  |  直到 16 年前
        1
  •  10
  •   TFD    16 年前

    使用MSDN上的RenderTargetBitmap

    RenderTargetBitmap bitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(this.YourVisualControlNameGoesHere); 
    
        2
  •  2
  •   Mark    16 年前

    TFD非常合适。

    Dim width As Integer = 128
    Dim height As Integer = width
    Dim stride As Integer = CType(width / 8, Integer)
    Dim pixels(height * stride) As Byte
    
    ' Try creating a new image with a custom palette.
    Dim colors As New List(Of System.Windows.Media.Color)()
    colors.Add(System.Windows.Media.Colors.Red)
    colors.Add(System.Windows.Media.Colors.Blue)
    colors.Add(System.Windows.Media.Colors.Green)
    Dim myPalette As New BitmapPalette(Colors)
    
    ' Creates a new empty image with the pre-defined palette
    Dim image As BitmapSource = System.Windows.Media.Imaging.BitmapSource.Create(width, height, 96, 96, PixelFormats.Indexed1, myPalette, pixels, stride)
    Dim stream As New FileStream("new.bmp", FileMode.Create)
    Dim encoder As New BmpBitmapEncoder()
    Dim myTextBlock As New TextBlock()
    myTextBlock.Text = "Codec Author is: " + encoder.CodecInfo.Author.ToString()
    encoder.Frames.Add(BitmapFrame.Create(image))
    encoder.Save(stream)
    
    推荐文章