他のFill系関数Draw系関数も同じ動作をすると思いますが、
代表してRectangleを扱っています。
Graphics.DrawRectangleメソッドは矩形を引数で指定したPenを用いて描画する関数です。
Graphics.FillRectangleメソッドは「矩形の内側」を引数で指定したBrushを用いて塗りつぶす関数です。
「DrawRectangleメソッドで描画した内側」を塗りつぶす関数ではありません。
{x,y,width,height}={2,:2,:4,4}の矩形の内側ををFillRectangleで塗りつぶすと
次のように4*4の範囲が塗りつぶされます。
private void Form1_Paint(object sender, PaintEventArgs e) { Brush brush = new SolidBrush(Color.Blue); Rectangle rect = new Rectangle(2, 2, 4, 4); e.Graphics.FillRectangle(brush, rect ); }
DrawRectangleに2ピクセルのPenを渡し{x,y,width,height}={2,:2,:4,4}の矩形を描画すると
4*4の矩形の境界の周りに前後1ピクセルずつ、2ピクセルの太さの矩形が描画されまています。
private void Form1_Paint(object sender, PaintEventArgs e) { Pen pen = new Pen( ForeColor, 2.0f ); Rectangle rect = new Rectangle(2, 2, 4, 4); e.Graphics.DrawRectangle(pen, rect ); }
またDrawRectangleに1ピクセル(奇数ピクセル)のPenを渡した場合、
本来次のように4*4の矩形の境界の前後に0.5ピクセルずつの1ピクセルの太さの矩形が描画されるべきなのですが
0.5ピクセルを描画することは不可能なので四捨五入されて、
半ピクセルずつずれた状態で描画されます。
private void Form1_Paint(object sender, PaintEventArgs e) { Pen pen = new Pen( ForeColor, 1.0f ); Rectangle rect = new Rectangle(2, 2, 4, 4); e.Graphics.DrawRectangle( pen , rect ); }
DrawRectangleで描画された句形の内側を塗りつぶすには、
ペンのサイズを利用して、塗りつぶす句形の位置や大きさを調整する必要があります。
private void Form1_Paint(object sender, PaintEventArgs e) { float penSize = 2.0f; Pen pen = new Pen(ForeColor, penSize); Brush brush = new SolidBrush(Color.Blue); Rectangle rect = new Rectangle(2, 2, 4, 4); RectangleF fillRect = new RectangleF( rect.X + penSize / 2.0f, rect.Y + penSize / 2.0f, rect.Width - penSize, rect.Height - penSize ); e.Graphics.DrawRectangle(pen, rect); e.Graphics.FillRectangle(brush, fillRect); }