4

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の使用。「指定されたパスの形式はサポートされていません」というテキストの例外で失敗します。
4

1 に答える 1

1

手遅れかもしれませんが、この回答は、私のように最近同様の問題を共有している人々の助けになるかもしれません.

MSChart コントロールは、NamedImages のコレクションである Images-Property を提供します。これらのイメージは、一意の識別子と、リソースから読み込むことができるイメージの組み合わせです。

  1. まだ行っていない場合 - Resources ファイルを作成し、プロジェクトに追加します
  2. 一意の識別子 (MyImage など) と組み合わせて、そのファイルに画像を追加します。埋め込みたい画像の Persistence-property を「Embedded in .resx」に設定していることを確認してください
  3. コードで、Chart.Images コレクションに追加する NamedImages を定義します。

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

チャートで、通常はアイコンへのパスが期待されるUniqueIdentifierを使用できるようになりました。

これにより、イメージがディスクからロードされなくなり、イメージがリソースとしてキャッシュされるため、アプリケーションが高速化される可能性があります。

よろしくお願いします

于 2015-02-23T14:58:26.860 に答える