2009-03-08 7 views
5

La clase Winforms System.Windows.Forms.Control tiene un método de instancia "DrawToBitmap" que creo que es muy útil en una variedad de circunstancias. Me pregunto si existe una forma equivalente de obtener un System.Drawing.Bitmap desde una aplicación WPF.Obtener un mapa de bits desde una ventana de la aplicación WPF?

Me doy cuenta de que podría hacer algunas cosas de P/Invoke solo para obtener la ventana de la aplicación, sin embargo no me gusta porque no se adapta muy bien a la transición de 64 bits y no me permite representar subcontroles solo, como lo hace DrawToBitmap.

Gracias, Richard

Respuesta

9

Uso RenderTargetBitmap como en MSDN

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

TFD es el clavo. También podría usar el ejemplo de referencia menos elegante de 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) 
Cuestiones relacionadas