(1)点が小さすぎる
今まで自分が提示してきた例では、実は2つの方法が
あった事を思い返してもらえると助かります。
a)Bitmapオブジェクトを生成して、そこに描画。
次にコントロール(orフォーム)のGraphicsオブジェクトを
取得し、それにBitmapオブジェクトに渡す。結果、
コントロール上(orフォーム上)に点が描画される方法
Bitmap bm = new Bitmap(this.Width, this.Height);
g.DrawImage(bm, new Point(0, 0));
……という形
b)コントロール(orフォーム)のGraphicsオブジェクトを
取得して、そのまま簡単に描画する方法
Graphics g = pic01.CreateGraphics();
g.FillEllipse……という形
なぜ2種類提示したかというと、Graphicsオブジェクトには
「1pixelだけ描画する」メソッドが見当たらなかったからです。
1pixelだけ描画するには、Bitmapオブジェクトの SetPixe を
使うのが手っ取り早いかな~って、それだけ(^^;
なので、b)の方が簡単です。Bitmapオブジェクトが不要なので。
点の描画には、
Graphicsオブジェクトの
FillRectangle(矩形描画) や
FillEllipse(円描画)
等が利用できます。描画サイズや色の指定も可能です。
(例)
SolidBrush brs = new SolidBrush(Color.FromArgb(0x00, 0xff, 0x00)); // 緑
Graphics g = pic01.CreateGraphics();
int ptSize = 4; // 点のサイズ
g.FillEllipse(brs, 0-(ptSize/2), 0-(ptSize/2), ptSize, ptSize);
これで、原点(0,0)を中心とした直径4ピクセルの円が描画されます。
半径ぶんをマイナスしないと中心点がズレる事にご注意を。
(2)PCの座標系は左上原点です。数学の左下原点とは勝手が違う
ように思えますが、実は大した問題ではありません。
例えば、高さが400のpictureBoxを想像して下さい。
数学座標(0, 0) → PC座標(0, 400)
数学座標(10, 100) → PC座標(10, 300)
つまり、y座標をチョコっと計算してやるだけです。
PC座標y = コントロールの高さ - 数学座標y
その他にも、この手の小細工的計算をする事で遊べます。
グラフの原点を決めたり、描画倍率を変えたりとか……。
x座標に10を加算すれば、グラフ描画位置が右に10移動します。
これって、原点の右移動ですよね。座標に2をかければ2倍の
サイズで描画できそうです。落ち着いて考えれば、それだけ
なのです(^^
・int型へのキャストについて
例ではintを使いましたが、それは必須ではないです。
「FillEllipse が受け取れる型」なら何でもOK!です。
各メソッドはオーバーロードされている場合がほとんどなので、
自分が使いやすい物を選ぶべきです。FillEllipse の場合は
FillEllipse(Brush brush, float x, float y, float width, float height);
FillEllipse(Brush brush, int x, int y, int width, int height);
等がありますので、floatの方を使うのもアリです。
ただ物理的には、モニタはpixelで構成されている事を意識して
下さい。例えば「0.7pixel」と指定した場合、実際はどこに
描画されるのか……それはC#任せ?となります。
・SetPixel について
まずBitmapオブジェクトですが、名前の通り「幅と高さがある
画像」をイメージして下さい。SetPixelは「Bitmapオブジェクト上」
の指定座標に対して1pixelを描画します。
次に g.DrawImage(bm, new Point(0, 0)); ですが、これは
Point pt = new Point(0, 0);
g.DrawImage(bm, pt);
と全く同じですね。つまり、
bm(Bitmapオブジェクト)に描い絵を、
g(Graphicsオブジェクト)の座標(0,0)を起点として描画してね
という事になります。
補足
補足説明有難うございます! 実行してみたところ薄い点が何個も現われました。。 このような感じで点の大きさをもっと大きくしたいと思います。 ですがついでにもうちょっと伺いたい事が・・ (1)クラスター分析を行っていまして、入力した座標をあのように点で表示できれば良いのですが、 座標入力ボタンを作って入力しているのでそのボタンを押したら点が現われるみたいな感じにしたいと思っております。その場合はどうすれば・・;; (2)さきほどのサンプルだとフォーム上?に点が現われましたが、あそこにはたくさんのボタンをつけているのであそこには表示したうないです; 他の場所に出すことは可能なのでしょうか? まだお聞きしたい事があったように思いますが、また思い出した時に聞かせて頂きたいです; 上記の点、宜しくお願い致します;;