c# - 改进 MS 图表控件的自定义标记图像性能

标签 c# mschart microsoft-chart-controls

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

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

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

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

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

更新。我试过:

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

最佳答案

尽管对您来说可能为时已晚,但这个答案可能会帮助像我这样如今遇到类似问题的人。

MSChart 控件提供了一个 Images-Property,它是 NamedImages 的集合。这些图像是唯一标识符和可以从您的资源加载的图像的组合:

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

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

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

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

最好的问候

关于c# - 改进 MS 图表控件的自定义标记图像性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13785821/

相关文章:

c# - 如何在 xaml 中访问 Collection 中的基本数据上下文

java - 基于不同输入实现多种策略的设计模式

c# - Web 表单中的 ASP.Net 图表适用于本地系统,不适用于 Web 服务器

asp.net - 使用 Microsoft Chart 控件在图表上添加标签

ASP.NET图表: setting the fonts on X and Y axis

c# - 在 C# 中,是否可以在不创建新数组的情况下将字节数组转换为另一种类型?

c# 简单的 xml 阅读器跳过所有其他元素

c# - 如何有条件地将数据点添加到使用 MSChart 呈现的图表中

c# - 使用自定义颜色修改自定义属性