سؤال

والطبقة WinForms عناصر System.Windows.Forms.Control ديها أسلوب مثيل "DrawToBitmap" التي أعتقد أنها مفيدة للغاية في مجموعة متنوعة من الظروف. أنا أتساءل عما اذا كان هناك طريقة ما يعادل الحصول على System.Drawing.Bitmap من تطبيق WPF؟

وأنا أدرك أنني يمكن أن تفعل بعض P / استدعاء الأشياء لمجرد الحصول على نافذة التطبيق، ولكن أنا لا أحب هذا لأنه لا استيعاب التحول 64BIT بشكل جيد للغاية، ولا اسمحوا لي أن تجعل الضوابط الفرعية فقط ، كما يفعل DrawToBitmap.

وشكرا، ريتشارد

هل كانت مفيدة؟

المحلول

استخدم RenderTargetBitmap كما في MSDN

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

نصائح أخرى

و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)
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top