我正在尝试导出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 票数: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。

这不能解决您的问题,但是希望可以减少它的神秘性。

  ask by Goz translate from so

未解决问题?本站智能推荐: