2009-03-08 10 views
5

Die Winforms System.Windows.Forms.Control-Klasse verfügt über eine Instanzmethode "DrawToBitmap", die ich unter verschiedenen Umständen für sehr nützlich halte. Ich frage mich, ob es eine gleichwertige Möglichkeit gibt, eine System.Drawing.Bitmap von einer WPF-Anwendung zu erhalten?Erhalten Sie eine Bitmap aus einem WPF-Anwendungsfenster?

Ich weiß, ich könnte einige P/Invoke Zeug nur das Anwendungsfenster zu bekommen, aber ich mag das nicht, weil es nicht die 64-Bit-Übergang sehr gut unterzubringen, und lässt mich nicht Sub-Kontrollen nur, wie es DrawToBitmap macht.

Danke, Richard

Antwort

9

Verwendung als Rendertargetbitmap auf MSDN

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

TFD ist vor Ort. Sie könnten auch das weniger elegante Referenzbeispiel von MSDN verwenden:

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) 
Verwandte Themen