Как сохранить набор инструментов диаграммы WPF как изображение в буфере обмена? - PullRequest
1 голос
/ 08 мая 2019

Я уже использовал диаграмму формы Windows и смог сохранить элемент управления диаграммы в буфере обмена со следующими кодами:

    Dim stream As New System.IO.MemoryStream()
    SummaryChart.SaveImage(stream, System.Drawing.Imaging.ImageFormat.Bmp)
    Dim bmp As New System.Drawing.Bitmap(stream)
    Clipboard.SetDataObject(bmp)

Но поскольку требования изменились, мне пришлось создать диаграмму впросмотр с использованием набора инструментов WPF Chart:

xmlns:dv="clr-namespace:System.Windows.Controls.DataVisualization;assembly=System.Windows.Controls.DataVisualization.Toolkit"

SummaryChart.SaveImage больше не работает.Как лучше всего делать то, что я делал раньше?

Я прочитал эту статью: Получил растровое изображение из контрольного представления и попробовал следующие коды:

 Dim rtb = New RenderTargetBitmap(CInt(SummariesChart.ActualWidth), 
 CInt(SummariesChart.ActualHeight), 96, 96, PixelFormats.Pbgra32)
 rtb.Render(SummariesChart)
 Dim png  = New PngBitmapEncoder()
 png.Frames.Add(BitmapFrame.Create(rtb))
 Dim stream  = New MemoryStream()
 png.Save(stream)
 Clipboard.SetImage(rtb)

Но, тем не менее, это не работает.Кто-нибудь может мне помочь?

Спасибо.

1 Ответ

0 голосов
/ 08 мая 2019

Чтобы сохранить изображение набора инструментов WPF Chart, как показано ниже.Добавьте BitMapFrame в Encoder.Frames, а затем сохраните изображение.

Public Shared Sub SaveAsImage(ByVal element As FrameworkElement, ByVal filepath As String, ByVal width As Integer, ByVal height As Integer)
element.Width = width
element.Height = height
element.Measure(New Size(width, height))
element.Arrange(New Rect(0, 0, width, height))
element.UpdateLayout()
Dim target = New RenderTargetBitmap(width, height, 96, 96, System.Windows.Media.PixelFormats.Pbgra32)
target.Render(element)
Dim encoder = New PngBitmapEncoder()
Dim outputFrame = BitmapFrame.Create(target)
encoder.Frames.Add(outputFrame)

Using file = File.OpenWrite(filepath)
    encoder.Save(file)
End Using End Sub
...