2011-12-12 26 views
0

我试图导出MSChart的图像。从基于MSChart的应用程序导出引发矢量格式的例外

我发现了精彩的功能

[System.Windows.Forms.DataVisualization.Charting.Chart.SaveImage][1] 

但是我遇到的的imageformat参数的几个问题。具体而言,我希望用户能够以任何格式保存图像,其格式为WIC编码器。为此,我得到了图像编解码器的列表,并将它们全部提供给用户。

因此,当用户选择他们的文件时,我抓住扩展名并在列表中找到与扩展名匹配的编解码器。然后,我创建相关的imageformat如下:

ImageFormat imgFmt = new ImageFormat(codec.FormatID); 

我然后调用下面的图表导出:

exportChart.SaveImage(mSaveFileDialog.FileName, imgFmt); 

然而,这会抛出一个异常,如果我选择的EMF或WMF,如下所示:

A first chance exception of type 'System.ArgumentNullException' occurred in System.Drawing.dll 
An unhandled exception of type 'System.ArgumentNullException' occurred in System.Drawing.dll 

Additional information: Value cannot be null. 

最奇怪的事情是,如果我创造我的图片格式如下:

ImageFormat imgFmt = ImageFormat.Emf; 

然后它写一个EMF没有问题。此外,如果我这样做(与原始imgFmt):

imgFmt.Equals(ImageFormat.Emf) 

然后它返回true,但仍然引发异常。

有没有人知道为什么会发生这种情况并解决我的问题?

回答

1

我认为内部图表控件使用您提供的ImageFormat来选择ImageCodecInfo。由于无法找到所述编解码器信息而引发此异常。

ImageFormat fmt = ImageFormat.Emf; 
ImageFormat fmt2 = new ImageFormat(ImageFormat.Emf.Guid); 
Console.WriteLine(fmt.ToString()); // gives: Emf 
Console.WriteLine(fmt2.ToString()); // gives: [ImageFormat: b96b3cac-0728-11d3-9d7b-0000f81ef32e] 

如果您致电两种格式的ToString(),你会看到,他们不回同样的事情。选择编码器的代码很可能不会预期从GUID构建的ImageFormat,只是查找已知格式名称的列表。

纵观mschart样本,此函数的首选参数类型是枚举ChartImageFormat,而不是Imageformat。

这并不能解决您的问题,但希望使它不那么神秘。

+0

错误。我希望能够导出到SVG ...看起来我需要一个EMF到SVG转换器... – Goz

相关问题