WindowsForms アプリで MS Chart を使用しており、グラフにさまざまなマーカーを表示したいと考えています。原則MarkerImage
として forSeries
またはを指定して行いDataPoint
ます。問題は、MarkerImage
プロパティが文字列型であり、その使用法に関するドキュメントがないことです。MS Chart サンプルによると、これは画像ファイルへのパスです。
series.MarkerImage = "images/image.bmp";
画像を project/images フォルダーに配置し、「出力ディレクトリにコピー」を指定して、コードで使用することで、なんとか機能させることができました。原則としては機能しますが、実行時に最初にチャートにマーカー画像を表示するときに、アプリケーションがしばらくフリーズします。新しいファイルをロードするためのディスクアクセス時間が原因だと思います。また、新しい画像が最初に画面に表示されるたびに発生するため、すべての画像がキャッシュされるまでアプリケーションが応答しなくなります。
私が探しているのは、これを改善するための解決策です。せいぜい、すべての画像を埋め込みリソースとして保存することをお勧めします。これは、アプリで追加の画像フォルダーを出荷するよりもはるかに優れています。(同様の意味を持つ) のドキュメントによると、文字列は実際には URL です。LegendCell.Image
を使用して ASP.NET アプリケーションに埋め込まれたリソースの URL を取得できることがわかりましたPage.ClientScript.GetWebResourceUrl
が、私のアプリケーションは単純な WindowsForms. Windows フォームに埋め込まれたリソースの URL を取得することはできますか?
リソース参照を処理するために独自の Series または DataPoint の子孫を実装することを既に考えていますが、オーバーライドできる Series の実際のレンダリングに関連するものは何もないため、正しい方法ではないようです...
私が考える別の解決策は、アプリケーションの開始時にすべての画像ファイルを自分でプリロードすることですが、これはハックのようです。また、別のアセンブリ (.dll) と一緒にマーカーを提供したい場合はどうすればよいでしょうか?
アップデート。私は試した:
- File.ReadAllBytes による画像のプリロード。何もスピードアップしません。
- データ URIの使用。「指定されたパスの形式はサポートされていません」というテキストの例外で失敗します。