|
分類:[C#]
環境はVisualStudio2010です。
「pictureBox_MouseClickイベントで元画像をクリックした位置を(x、y)として取り込み、 Rectangle srcRect = new Rectangle(x - 60, y - 30, x + 20, y + 10); で元画像の切り取り範囲を決定し、 Rectangle desRect = new Rectangle(0, 0, srcRect.Width, srcRect.Height); で描画する部分の範囲を決定する。」 と考えました。 3行目のsrcRect.WidthとsrcRect.Heightの値はそれぞれ80と40を期待したのですが、デバッグしてみるとx+80とy+60の値が格納されていました。 これは何か使い方が間違っているのでしょうか。
ソースは下記の通りです。◆のところです。
//button1のClickイベントハンドラです。 private void button1_Click(object sender, EventArgs e) { ( 省略 )
if (openFileDialog1.ShowDialog() == DialogResult.OK) { Bitmap img = new Bitmap(openFileDialog1.FileName); //画像ファイルのImageオブジェクトを作成します。
pictureBox1.Image = img; }
}
//pictureBox1のMouseClickイベントハンドラです。 private void pictureBox1_MouseClick(object sender, MouseEventArgs e) { int x = e.X; int y = e.Y;
Bitmap img = (Bitmap)pictureBox1.Image; //元画像のImageオブジェクトを作成する。 Bitmap canvas = new Bitmap(pictureBox1.Width, pictureBox1.Height); //描画先とするImageオブジェクトを作成。 Graphics g = Graphics.FromImage(canvas); //ImageオブジェクトのGraphicsオブジェクトを作成。
◆Rectangle srcRect = new Rectangle(x - 60, y - 30, x + 20, y + 10); //切り取る部分の範囲を決定する。 ◆Rectangle desRect = new Rectangle(0, 0, srcRect.Width, srcRect.Height); //描画する部分の範囲を決定する。ここでは、(0,0)の位置に描画する。
g.DrawImage(img, desRect, srcRect, GraphicsUnit.Pixel); //切り取った画像を描画する。
g.Dispose(); //Graphicsオブジェクトのリソースを開放する。
pictureBox2.Image = canvas; //pictureBox2に描画する。 }
|