Question

La classe Winforms System.Windows.Forms.Control a une méthode d'instance "quotToBitmap". que je pense est très utile dans une variété de circonstances. Je me demande s'il existe un moyen équivalent d'obtenir un System.Drawing.Bitmap à partir d'une application WPF?

Je me rends compte que je pourrais faire certaines choses P / Invoke pour obtenir simplement la fenêtre de l'application, mais je n'aime pas cela car il ne gère pas très bien la transition 64 bits et ne me permet pas de rendre uniquement les sous-contrôles. , comme DrawToBitmap le fait.

Merci, Richard

Était-ce utile?

La solution

Utilisez RenderTargetBitmap comme sur MSDN

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

Autres conseils

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)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top