ZedGraph

画像の信号を出力し、グラフにするときいつも
C画像処理ルーチンにファイル出力用の処理を組み込み、CSV出力->Excelで見る。
という作業を永遠と繰り返していた。これでは、ファイル出力用のコードがメインルーチンに入り汚いし、特定の場所(etc:(x=12,y=12)-(x=12,y=120))の信号をとらえるのがつらい。そして、何よりこの作業がめんどい。

なので、
1,特定の場所の画像の信号をExcelのように一覧表示。
2,x方向の方向の信号の波を表示。
3,画像のX,Yの方向の波を考慮した3Dモデルの表示。

を作ることにした。いつも、javaC++をパラパラといじくっていたので、このどちらかにしようとしたのだが、、、どっちの言語でもグラフなんて書いたことねー。。。てか、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お勧めです。