ZedGraph
画像の信号を出力し、グラフにするときいつも
C画像処理ルーチンにファイル出力用の処理を組み込み、CSV出力->Excelで見る。
という作業を永遠と繰り返していた。これでは、ファイル出力用のコードがメインルーチンに入り汚いし、特定の場所(etc:(x=12,y=12)-(x=12,y=120))の信号をとらえるのがつらい。そして、何よりこの作業がめんどい。
なので、
1,特定の場所の画像の信号をExcelのように一覧表示。
2,x方向の方向の信号の波を表示。
3,画像のX,Yの方向の波を考慮した3Dモデルの表示。
を作ることにした。いつも、javaかC++をパラパラといじくっていたので、このどちらかにしようとしたのだが、、、どっちの言語でもグラフなんて書いたことねー。。。てか、GUIプログラム自体御久方ぶり。。。。
なので、C#で頑張ることにした。(C#自体初めて触りますが。。。。)
1はDataGridViewでとりあえず出来た。問題はグラフ、、、Graphicsを使ってもいいのだが、どうもね。。。。
なので、Google大先生で調べることに。。。調べること、3分、ZeddGraphというオープンソースライブラリを発見!!sampleを見ると良さげなので、
ZedGraphのサイトからdownloadをクリック->dell_only〜をダウンロード。
VisualStdioを開き、ソリューションエクスプローラのプロジェクトを右クリック->参照の追加->参照->先ほどダウンロードしたdellを選択。でプロジェクトに組み込む。
次に、ツールボックスで右クリック->アイテムの選択->参照->先ほどのdell。
とし、さっそく書き始めた。
Formの上に張り付けて、title,外見、データをつけたして、、、終わりーーー!!。
ヤバい、簡単すぎる。
出来あがったグラフは
ちなみに、このグラフは
の赤ラインでひかれている部分の信号です。
ちなみにコードは
//dataは指定されたlineの信号 private void InitializeGraph(int[] data) { GraphPane gp = graph.GraphPane; gp.Title.Text = "Graphics Data"; gp.XAxis.Title.Text = "Line"; gp.YAxis.Title.Text = "Ych val"; PointPairList list = new PointPairList(); for (int idx = 0 ; idx < data.Length; idx++) { list.Add(idx++,(double)data[idx]); } // Hide the legend gp.Legend.IsVisible = false; LineItem curve = gp.AddCurve("Alpha", list, Color.Red,SymbolType.Diamond); curve.Line.Width = 1.5F; curve.Symbol.Fill = new Fill(Color.White); curve.Symbol.Size = 5; gp.XAxis.Scale.Min = 0; gp.XAxis.Scale.Max = 255; gp.YAxis.Scale.Min = 0; gp.YAxis.Scale.Max = 255; // Make the XAxis start with the first label at 40 gp.XAxis.Scale.BaseTic = 40; gp.YAxis.Scale.BaseTic = 40; // Fill the axis background with a gradient gp.Chart.Fill = new Fill(Color.White, Color.SteelBlue, 45.0F); // Calculate the Axis Scale Ranges graph.AxisChange(); // Refresh to paint the graph components //graph.Refresh(); }
と、かなり少なめ。そりゃ、10分程度でできるよな。。。
何だか、グラフプログラムが面白くなってきた。ZedGraphお勧めです。