我通过内存流将图表图像保存为元文件(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
'-------------------------------------------------------
'-------------------------------------------------------