我正在通过内存流将图表图像保存为元文件 (EMF)。我想保留原始图像分辨率并保留取消组合矢量图像并在 PowerPoint 中编辑它们的选项。最近,我升级到一台非常高分辨率的笔记本电脑,我发现图表图像被框起来有很多空白空间。如果我将图像粘贴到 PowerPoint 或 Word 中,粘贴的图像会非常小。手动裁剪和调整大小并不令人满意,我不想降低屏幕分辨率以使图像粘贴得更大。这是我找到的解决方案(如下)。
我使用的是 VB.Net 2008,所以 Chart.Clone 方法不可用。我必须实现一个单独的函数来克隆图表,但如果您有更新版本的 Visual Studio,您可以取消注释下面的行并删除 CloneMSChart 函数和引用它的行。以下是我用来寻找解决方案的相关网站的参考:
How to clone a chart
Exporting a high-resolution image
这是复合解决方案:
'---------------------------------------------- ---------------
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
'---------------------------------------------- ---------