2012-12-09 15 views
3

我在我的WindowsForms應用程序中使用MS Chart,我想在圖表上顯示很多不同的標記。原則上,它是通過爲SeriesDataPoint指定MarkerImage來完成的。問題在於MarkerImage屬性是字符串類型,因此它的用法爲no documentation。根據MS Chart樣本,它是圖像文件的路徑。爲MS圖表控件改善自定義標記圖像性能

我設法通過將圖像放入項目/圖像文件夾中,指定「複製到輸出目錄」爲它們,然後在代碼中使用series.MarkerImage = "images/image.bmp";。它原則上工作,但在運行時,首先在圖表上顯示標記圖像時,應用程序會凍結一段時間。我認爲這是因爲加載新文件的磁盤訪問時間。每當新圖像首次出現在屏幕上時,就會發生這種情況,直到所有圖像都被緩存爲止,應用程序才真正無響應。

我在尋找的是一些解決方案來改善這一點。充其量,我更願意將所有圖像存儲爲嵌入式資源,這要比使用應用程序發送其他圖像文件夾要好得多。根據documentationLegendCell.Image(它們有相似的含義),字符串實際上是一個URL。我發現可以使用Page.ClientScript.GetWebResourceUrl獲取ASP.NET應用程序中的嵌入式資源的URL,但是我的應用程序(如果只是普通的WindowsForms)。是否有可能在Windows窗體中獲得某種嵌入式資源的URL?

我已經想實現我自己的系列數據點或子孫來處理資源引用,但似乎並沒有成爲一個正確的方式,因爲我什麼也看不到相關的系列實際的渲染,我可以覆蓋...

我想到的另一個解決方案是在應用程序啓動時自己預先加載所有圖像文件,但這似乎是一種破解。如果我想將標記與單獨的程序集(.dll)一起提供,會怎麼樣?

更新。我試過了:

  • 用File.ReadAllBytes預載圖像。不加速任何事情。
  • 使用Data URI。除文本外「失敗,不支持給定路徑的格式」。
+0

我仍在尋找解決方案。 –

回答

1

儘管對您而言可能已經太晚了,但這個答案可能會幫助像我這樣的人在沒有能力的情況下分享類似的問題。

MSChart控件提供了一個Images-Property,它是NamedImages的集合。這些圖像是一個唯一的標識符的組合和圖像,可以從您的資源加載:

  1. 如果還沒有完成 - 創建一個資源文件,並將其添加到您的項目
  2. 將圖像添加到該文件結合唯一標識符(例如MyImage)。確保將要嵌入的圖像的Persistence屬性設置爲「Embedded in .resx」
  3. 在您的代碼中定義添加到Chart.Images集合中的NamedImages。

    NamedImage namedImage1 = new NamedImage(「UniqueIdentifier」,Resources.MyImage); Chart.Images。加入(namedImage1);

在你的圖表,你現在可以使用唯一標識符,其中通常爲一個圖標的路徑的預期。

這可以防止從磁盤加載映像,並可能會加快您的應用程序,因爲圖像被緩存爲資源。

最好的問候

+0

謝謝你的答案,但我無法檢查它現在是否真的有效。我正在研究的這個項目太過時了。 – Mikhail

+0

我不明白你如何設置MarkerImage?如果我嘗試使用'seriesWind.Points [cnt] .MarkerImage =「UniqueIdentifier」'它說這個資源已經被定義。 –