Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用C#2010将图表图像复制到剪贴板?_C#_.net_Charts - Fatal编程技术网

如何使用C#2010将图表图像复制到剪贴板?

如何使用C#2010将图表图像复制到剪贴板?,c#,.net,charts,C#,.net,Charts,我正在学习C#,因为我编写了一个与分光计接口的程序。我已经想出了如何从光谱仪中获取光谱,并将其绘制在质谱图上 如何将图表图像复制到剪贴板中,以便粘贴到其他程序中 我正在使用Visual Studio C#2010 我找到了chart.SaveImage方法,但我更愿意将图像复制到剪贴板,而不必将其保存到磁盘。我没有找到chart.CopyPicture方法 我还研究了如何将原始数据作为字符串复制到剪贴板,然后将其粘贴到Excel工作表中并打印,但我更愿意复制图像本身 附加数据: 我可以使用以下

我正在学习C#,因为我编写了一个与分光计接口的程序。我已经想出了如何从光谱仪中获取光谱,并将其绘制在质谱图上

如何将图表图像复制到剪贴板中,以便粘贴到其他程序中

我正在使用Visual Studio C#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);

当然,有一种方法可以直接从剪贴板获取图像,而无需先从磁盘文件中保存和检索图像。请,请让我知道这是怎么做到的(在我的一个同事发现这一点之前)

使用静态方法

Clipboard.SetImage(....);

要从图表控件获取图像,请将其保存到内存流,创建位图,然后将其发送到剪贴板:

using (MemoryStream ms = new MemoryStream())
{
    chart1.SaveImage(ms, ChartImageFormat.Bmp);
    Bitmap bm = new Bitmap(ms);
    Clipboard.SetImage(bm);
}

我通过内存流将图表图像保存为图元文件(EMF)。我希望保留原始图像分辨率,并保留取消矢量图像分组并在PowerPoint中编辑它们的选项。最近,我升级到一台非常高分辨率的笔记本电脑,我发现图表图像中有很多空白。如果我将图像粘贴到PowerPoint或Word中,粘贴的图像将非常小。手动裁剪和调整大小并不令人满意,我也不想为了让图像粘贴得更大而降低屏幕分辨率。下面是我找到的解决方案

我使用的是VB.NET2008,因此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
"------------------------------------------------------------

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

“--------------------------------------------------------------

如何从图表控件获取图像?小问题:标签不会以这种方式显示。标签区域将被涂成纯黑色,看起来非常难看。我玩了一会儿,发现有点变化。编辑您的答案,请查看!以前不知道这种方式,upvoted.Oops..这会保存PNG,而不是图元文件。这解决了调整大小的问题,但不允许作为矢量文件进行解组和编辑。