Как скопировать изображение диаграммы в буфер обмена с помощью С# 2010?
Я изучаю С#, когда пишу программу, которая взаимодействует со спектрометром. Я выяснил, как получить спектр из спектрометра и построить его на графике MS.
Как скопировать изображение диаграммы в буфер обмена так, чтобы его можно было вставить в другие программы?
Я использую Visual Studio С# 2010.
Я нашел метод chart.SaveImage, но лучше скопировать изображение в буфер обмена, а не сохранять его на диск. Я не нашел метод chart.CopyPicture.
Я также выяснил, как скопировать необработанные данные в буфер обмена в виде строки, которая затем может быть вставлена в рабочий лист Excel и построена на графике, но я бы скорее просто скопировал сам образ.
Дополнительные данные:
Я могу скопировать изображение в буфер обмена, используя следующий код:
spectrumChart2.SaveImage("Image.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
Image img = Image.FromFile("Image.jpg");
System.Windows.Forms.Clipboard.SetImage(img);
Конечно, есть способ получить изображение непосредственно в буфер обмена без сохранения и извлечения его из файла диска. Пожалуйста, дайте мне знать, как это делается (до того, как один из моих коллег найдет этот kludge)!
Ответы
Ответ 1
Чтобы получить изображение из управления диаграммой, сохраните его в потоке памяти, создайте растровое изображение и затем отправьте его в буфер обмена:
using (MemoryStream ms = new MemoryStream())
{
chart1.SaveImage(ms, ChartImageFormat.Bmp);
Bitmap bm = new Bitmap(ms);
Clipboard.SetImage(bm);
}
Ответ 2
Использовать статический метод...
Clipboard.SetImage(....);
Ответ 3
Я сохраняю изображения диаграммы как метафайл (EMF) через поток памяти. Я хочу сохранить исходное разрешение изображения и сохранить возможность разгруппировать векторные изображения и редактировать их в PowerPoint. Недавно я обновился до ноутбука с очень высоким разрешением, и я обнаружил, что на графическом изображении было много свободного места. Если я вставляю изображение в PowerPoint или Word, вставленное изображение будет очень маленьким. Обрезание и изменение размера вручную не являются удовлетворительными, и я не хочу, чтобы понизить разрешение экрана, чтобы увеличить изображение. Вот решение, которое я нашел (ниже).
Я использую VB.Net 2008, поэтому метод Chart.Clone недоступен. Я должен был реализовать отдельную функцию для клонирования диаграммы, но если у вас есть более новая версия Visual Studio, вы можете раскомментировать приведенную ниже строку и удалить функцию CloneMSChart и строку, ссылающуюся на нее. Вот ссылки на соответствующие сайты, которые я использовал для поиска решения:
Как клонировать диаграмму
Экспорт изображения с высоким разрешением
и вот составное решение:
'---------------------------------------------- ---------------
Public Sub CopyChartImageToClipBoard(ByVal ChartToSave As Chart)
Dim originalSize As Size = ChartToSave.Size
Dim screenWidth As Integer = Screen.PrimaryScreen.Bounds.Width
Dim screenHeight As Integer = Screen.PrimaryScreen.Bounds.Height
Dim cloneChart As New Chart
Using ms As New IO.MemoryStream()
Try
'cloneChart = CType(ChartToSave.Clone, Chart)
cloneChart = CloneMSChart(ChartToSave)
cloneChart.Size = New Size(screenWidth, screenHeight) ' copy a high resolution image
cloneChart.SaveImage(ms, System.Drawing.Imaging.ImageFormat.Png)
ms.Seek(0, SeekOrigin.Begin)
Using mf As New Bitmap(ms)
Clipboard.SetImage(mf)
End Using
Finally
ms.Close()
cloneChart.Dispose()
End Try
End Using
End Sub
'---------------------------------------------- --------------
Public Function CloneMSChart(ByVal chart1 As Chart) As Chart
Dim myStream As New System.IO.MemoryStream
Dim chart2 As Chart = New Chart
chart1.Serializer.Save(myStream)
chart2.Serializer.Load(myStream)
Return chart2
End Function
'---------------------------------------------- ---------