|
分類:[C#]
pictureBoxにpictureBoxサイズに拡縮した画像を表示させ、
表示させた画像の上に、Rectangleを(x = 0, y = 0, width = 100, heigut = 100)、
原点位置は(pictureBox1.Width / 2, pictureBox1.Height / 2)で、
描画させたいと思い、下記の様にコーディングしました。
無事、画像サイズはpictureBoxサイズに拡縮されていたのですが、
しかし、私の意図と違い表示されたRectangleのxとyはpictureBox1の真ん中にありませんでしたし、
WidthとHeightは等しいはずなのに長方形になりました。
Rectangleのx,yをpictureBox1のど真ん中にして、
Rectangleを正方形で表示するためにはどうすればよいのでしょうか?
全然が分からず、参っています。どなたかお助けください。
どうかよろしくお願いします。
コード
namespace test
{
public partial class Form1 : Form
{
//表示する画像
private Bitmap img;
//画像を表示させる範囲
private Rectangle imgRect;
//表示させるレクタングルの表示範囲
private Rectangle rectangle;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
img = new Bitmap("表示させる画像のパス");
float ratioW = (float)pictureBox1.Width / img.Width;
float ratioH = (float)pictureBox1.Height / img.Height;
int nw = Convert.ToInt32(img.Width * ratioW);
int nh = Convert.ToInt32(img.Height * ratioH);
imgRect = new Rectangle(0, 0, nw, nh);
pictureBox1.Invalidate();
Graphics graph = Graphics.FromImage(img);
graph.TranslateTransform(pictureBox1.Width / 2, pictureBox1.Height / 2);
rectangle = new Rectangle(0, 0, 100, 100);
graph.DrawRectangle(Pens.Red, rectangle);
graph.Dispose();
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
if (img != null)
{
e.Graphics.DrawImage(img, imgRect);
}
}
}
}
|