visual studio 2015 community C#でpictureboxにbitmapでグラフ表示をさせています。
画像の拡大縮小のやり方をネットで調べて一度実装してみたのですが、拡大すると解像度がかわり画像が荒くなってしまうので再描画する方法に変更しました。
DrawLine()で指定するX座標の値を変更する事で、グラフの横幅をかえる事は出来たのですが、ピクチャサイズよりはみ出すような大きいサイズを描画した時に、スクロールバーを出して全体が見れるようにするやり方がわかりません。サンプルか参考サイトあれば知りたいです。よろしくお願いします。
まとめるとやりたい事は下記です。
1、拡大縮小が出来るようになりたい。
2、拡大した時だけスクロールバーを出して移動表示をさせたい
3、数種類のラジオボタンを用意して、時間単位表示の変更をしたい
4、X軸に目盛をつけたい。さらに拡大縮小した時に表示に合わせた目盛の表示をさせたい
以上の4つです。特にやりたいのは1の拡大縮小と2のスクロールバーの表示と操作です。
1と2が出来れば3はそんなに難しくないかなと思って居ます。4のX軸の目盛をつけて縮尺に合わせた表示は現時点ではイメージすら湧きません。
尚、チャートを使用してのグラフ表示アプリを作った際は、1~4は全て実装出来ました。部品自体にプロパティで設定が用意されていたので、コーディングと言うかマウスしか使いませんでしたが。
1の拡大縮小ですが、chartの時はカーソルを合わせてクリック&ドラッグで拡大させる事が出来ましたが、pictureboxの場合はおそらくそれは無理かなと思って居ます。そこも含めて教えて頂ければと思います。
現時点のグラフ表示のみ出来ているコードは下記です。
C#
1m_Bitmap = new Bitmap(pg.Size.Width, pg.Size.Height);//Width=横、Height=高さ 2 SizeHeight_hurf = pg.Size.Height / 2;//基準点を取得0になるところ 3 box_w = (double)pg.Size.Width / (double)graph_kasokudo_x.Count;//x軸の座標進行用 4 pg.Image = m_Bitmap; 5 6 Graphics g = Graphics.FromImage(pg.Image); 7 //----------------------------------- 8 // グラフを描画 9 //----------------------------------- 10 g.FillRectangle(Brushes.Black, 0, 0, pg.Size.Width, pg.Size.Height);//指定された内部を塗りつぶす。ピクチャボックスを取得したサイズ分黒で塗りつぶす 11 12 // 縦線 13 Int32 cy = pg.Size.Height / BoxSize; 14 for (Int32 y = 0; y <= cy; y++) 15 {//DrawLineは2つの点を直線で結ぶ 横右端から 16 g.DrawLine(Pens.Green, 0, pg.Size.Height - (y * BoxSize), pg.Size.Width, pg.Size.Height - (y * BoxSize)); 17 } 18 // 横線 19 Int32 cx = (pg.Size.Width + m_X) / BoxSize; 20 for (Int32 x = 0; x <= cx; x++) 21 { 22 g.DrawLine(Pens.Green, pg.Size.Width - (x * BoxSize) - m_X, 0, pg.Size.Width - (x * BoxSize) - m_X, pg.Size.Height); 23 } 24 25 //----------------------------------- 26 // データを描画 27 //----------------------------------- 28 double x1; 29 double x2; 30 double[] dblTemp00 = new double[Form1.Form1Instance.graph_kakusokudo_x.Count]; 31 32 dblTemp00[0] = SizeHeight_hurf + ((double)((double)graph_kasokudo_x[0] * (double)(SizeHeight_hurf - 1)) / zettaiti); 33 for (Int32 i = 1; i < Form1.Form1Instance.graph_kasokudo_x.Count; i++) 34 {//直線を引くために2点分用意 35 dblTemp00[i] = SizeHeight_hurf + ((double)(graph_kasokudo_x[i] * (double)(SizeHeight_hurf - 1)) / zettaiti); 36 //青の直線で折れ線グラフを引いていく 37 x1 = (i-1) * box_w; 38 x2 = x1 + box_w; 39 g.DrawLine(Pens.SkyBlue, (float)x1, (int)(pg.Size.Height - dblTemp00[i-1]), (float)x2, (int)(pg.Size.Height - dblTemp00[i])); 40 } 41if (++m_X >= BoxSize) m_X = 0; 42 43 pg.Refresh();

回答1件
あなたの回答
tips
プレビュー