2009-03-08 4 views
5

Класс Winforms System.Windows.Forms.Control имеет метод экземпляра «DrawToBitmap», который, по моему мнению, очень полезен в самых разных обстоятельствах. Мне интересно, есть ли эквивалентный способ получения System.Drawing.Bitmap из приложения WPF?Получите растровое изображение из окна приложения WPF?

Я понимаю, что я мог бы сделать P/Invoke, чтобы просто получить окно приложения, однако мне это не нравится, потому что он не очень хорошо сочетает в себе 64-битный переход и не позволяет мне отображать суб-элементы управления только, как делает DrawToBitmap.

Спасибо, Richard

ответ

9

Использование RenderTargetBitmap, как на MSDN

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) 
Смежные вопросы