【问题标题】:Improving custom marker images perfomance for MS chart controls改进 MS 图表控件的自定义标记图像性能
【发布时间】:2012-12-09 08:26:26
【问题描述】:

我在我的 WindowsForms 应用程序中使用 MS Chart,我希望在图表上显示许多不同的标记。原则上,它是通过为SeriesDataPoint 指定MarkerImage 来完成的。问题是MarkerImage 属性是字符串类型,no documentation 用于它的用法。根据 MS Chart 示例,它是图像文件的路径。

我设法通过将图像放入项目/图像文件夹,为它们指定“复制到输出目录”,然后在代码中使用series.MarkerImage = "images/image.bmp"; 来使其工作。它原则上可以工作,但在运行时,当第一次在图表上显示标记图像时,应用程序会冻结一段时间。我认为这是因为加载新文件的磁盘访问时间。每次新图像首次出现在屏幕上时都会发生这种情况,这使得应用程序在所有图像都被缓存之前真的没有响应。

我正在寻找一些解决方案来改善这一点。充其量我宁愿将所有图像存储为嵌入式资源,这比使用应用程序发送额外的图像文件夹要好得多。根据documentationLegendCell.Image(具有类似含义),该字符串实际上是一个URL。我发现可以使用Page.ClientScript.GetWebResourceUrl 获取 ASP.NET 应用程序中嵌入资源的 URL,但我的应用程序如果只是普通的 WindowsForms。是否可以在 windows 窗体中获取嵌入资源的某种 URL?

我已经在考虑实现我自己的 Series 或 DataPoint 后代来处理资源引用,但似乎不是正确的方法,因为我看不到与我可以覆盖的 Series 的实际渲染相关的任何内容...

我想到的另一个解决方案是自己在应用程序启动时预加载所有图像文件,但这似乎是一个 hack。如果我想将标记与单独的程序集 (.dll) 一起提供怎么办?

更新。我试过了:

  • 使用 File.ReadAllBytes 预加载图像。不会加速任何事情。
  • 使用Data URI。失败并出现异常文本“不支持给定路径的格式。”

【问题讨论】:

  • 我仍在寻找解决方案。

标签: c# mschart microsoft-chart-controls


【解决方案1】:

尽管对你来说可能为时已晚,但这个答案可能会帮助像我这样现在有类似问题的人。

MSChart 控件提供了一个图像属性,它是命名图像的集合。这些图像是唯一标识符和可以从您的资源中加载的图像的组合:

  1. 如果尚未完成 - 创建资源文件并将其添加到您的项目中
  2. 将图像与唯一标识符(例如 MyImage)一起添加到该文件。确保将要嵌入的图像的 Persistence-property 设置为“嵌入 .resx”
  3. 在您的代码中定义您添加到 Chart.Images-collection 的 NamedImages。

    NamedImage namedImage1 = new NamedImage("UniqueIdentifier", Resources.MyImage); Chart.Images.Add(namedImage1);

您现在可以在图表中使用 UniqueIdentifier,通常需要指向图标的路径。

这可以防止从磁盘加载图像,并且由于图像被缓存为资源,因此可能会加速您的应用程序。

最好的问候

【讨论】:

  • 感谢您的回答,但我无法检查它现在是否真的有效。我正在做的项目太过时了。
  • 不明白 MarkerImage 是怎么设置的?如果我尝试使用seriesWind.Points[cnt].MarkerImage = "UniqueIdentifier",它表示该资源已被定义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-22
  • 1970-01-01
相关资源
最近更新 更多