【问题标题】:Get a Bitmap from a WPF application window?从 WPF 应用程序窗口获取位图?
【发布时间】:2010-10-12 02:12:11
【问题描述】:

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

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

谢谢, 理查德

【问题讨论】:

    标签: wpf winforms bitmap system.drawing


    【解决方案1】:

    使用 MSDN 上的 RenderTargetBitmap

    RenderTargetBitmap bitmap = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Pbgra32);
    bitmap.Render(this.YourVisualControlNameGoesHere); 
    

    【讨论】:

      【解决方案2】:

      TFD 恰到好处。 您还可以使用 MSDN 中不太优雅的参考示例:

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-10-04
        • 2012-05-04
        • 2010-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多