微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我在我的 WindowsForms应用程序中使用MS Chart,我想在图表上看到很多不同的标记.原则上,它是通过为Series或DataPoint指定MarkerImage来完成的.问题是MarkerImage属性是字符串类型,其使用情况为 no documentation.根据MS Chart样本,它是图像文件的路径.

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

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

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

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

更新.我试过了:

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

解决方法

虽然对你来说可能为时已晚,但这个答案可能会帮助像我这样的人,这些人在同一天会遇到类似的问题.

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

>如果尚未完成 – 创建一个Resources文件并将其添加到项目中
>将图像与唯一标识符(例如MyImage)一起添加到该文件中.确保将要嵌入的图像的Persistence属性设置为“Embedded in .resx”
>在您的代码中定义您添加到Chart.Images集合的NamedImages.

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

在您的图表中,您现在可以使用UniqueIdentifier,其中通常会指向图标的路径.

这可以防止从磁盘加载图像,并可能在图像缓存为资源时加快应用程序的速度.

最好的祝福

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐