2009-03-08 6 views
5

La classe Winforms System.Windows.Forms.Control possède une méthode d'instance "DrawToBitmap" qui, selon moi, est très utile dans diverses circonstances. Je me demande s'il existe une façon équivalente d'obtenir un System.Drawing.Bitmap à partir d'une application WPF?Obtenir un bitmap à partir d'une fenêtre d'application WPF?

Je réalise que je pourrais faire quelques trucs P/Invoke pour obtenir simplement la fenêtre de l'application, mais je n'aime pas ça parce qu'elle ne supporte pas très bien la transition 64 bits, et ne me laisse pas afficher les sous-contrôles seulement, comme le fait DrawToBitmap.

Merci, Richard

Répondre

9

Utilisez RenderTargetBitmap comme sur MSDN

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

TFD est sur place. Vous pouvez également utiliser l'exemple de référence moins élégant 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) 
Questions connexes