我已经成功获得了Picturebox上Mousedown位置的图像坐标,无论是Picturebox的各种尺寸模式。但是在平移操作或缩放操作后难以找到中心点。 至于现在我只在Picturebox的Normal Sizemode工作,以达到以下目的。
我的主要目标::
1。绘制以Mousedown位置为中心的圆圈
2。接下来找到在Picturebox(而不是在图像上)上绘制的圆的半径(以像素为单位),即使在平移和缩放之后也应该相同。即使在缩放或平移之后,如果我绘制一个圆(或椭圆),它应该给出我的图像半径。我知道点到像素的转换。
我已经使用Mousedown实现了平移,向上移动事件并使用轨迹栏实现了缩放。 我现在需要以下部分的帮助:: 条件1: 我打开图像>>将其平移一定距离>>启用圆形工具>>用图像边界内的中心绘制它,然后绘制圆圈然后在那里 条件2: 我打开图像>>绘制圆圈,平移它,圆圈应该平移与图像平移相同的量。 这是我的MouseDown,MouseUp,MouseMove和Paint方法:
请告诉我你是否需要任何功能体或其他东西。因为它只是一个我正在处理的大杂乱的应用程序
告诉我你是否需要任何东西。打开符合我上面提到的主要目标的任何其他设计方法。
在TerryBozzio的回答后编辑::
Bitmap _bmp;
private bool _isMouseDown = false;
private Point _mouseDownLocation = Point.Empty;
int _xDifference, _yDifference;
public Form1()
{
InitializeComponent();
_bmp = RenderImageOfSpecifiedSize(@"C:\Users\Public\Pictures\Sample Pictures\2 duck.bmp");
_pictureBox.Image = _bmp;
}
private Bitmap RenderImageOfSpecifiedSize(string fileLocation)
{
//return new Bitmap(new Bitmap(fileLocation),new Size(300,300));
return new Bitmap(fileLocation);
}
private void _pictureBox_MouseDown(object sender, MouseEventArgs e)
{
_isMouseDown = true;
_mouseDownLocation = new Point(e.X, e.Y);
}
private void _pictureBox_MouseMove(object sender, MouseEventArgs e)
{
if (_isMouseDown)
{
_xDifference = _mouseDownLocation.X > e.X ? _mouseDownLocation.X - e.X : e.X - _mouseDownLocation.X;
_yDifference = _mouseDownLocation.Y > e.Y ? _mouseDownLocation.Y - e.Y : e.Y - _mouseDownLocation.Y;
_pictureBox.Invalidate();
}
}
private void _pictureBox_MouseUp(object sender, MouseEventArgs e)
{
_isMouseDown = false;
}
private void _pictureBox_Paint(object sender, PaintEventArgs e)
{
_txtCenter.Text= _xDifference.ToString() + " - " + _yDifference.ToString();
e.Graphics.DrawEllipse(Pens.Red, _mouseDownLocation.X - _xDifference, _mouseDownLocation.Y - _yDifference, _xDifference * 2, _yDifference * 2);
}
答案 0 :(得分:1)
如果我把你弄好了,这将绘制一个椭圆,其中心为mousedown捕获的点,而在鼠标移动事件中拖动鼠标以扩展或不扩展椭圆,它将在mousedown location捕获的点处居中。关于它将放在图片框中,在代码中(在mousemove事件中),我放置了两个变量Xdiff和Ydiff来完成工作,并且它在表单标题中显示它们的值(在移动时始终更新),以及它们值是x和y的基数,因为请注意您可能会绘制一个椭圆椭圆:
bool ismouseDown = false;
Point p;
int Xdiff, Ydiff;
Bitmap bmp;
public Form1()
{
InitializeComponent();
bmp = (Bitmap)Image.FromFile(@"C:\..\YourImage.jpg");
pictureBox1.Image = bmp;
}
private void pictureBox1_Paint(object sender, PaintEventArgs e)
{
this.Text = Xdiff.ToString() + " - " + Ydiff.ToString();
e.Graphics.DrawEllipse(Pens.Black, p.X - Xdiff, p.Y - Ydiff, Xdiff * 2, Ydiff * 2);
}
private void pictureBox1_MouseDown(object sender, MouseEventArgs e)
{
ismouseDown = true;
p = e.Location;
}
private void pictureBox1_MouseMove(object sender, MouseEventArgs e)
{
if (ismouseDown)
{
Xdiff = p.X > e.X ? p.X - e.X : e.X - p.X;
Ydiff = p.Y > e.Y ? p.Y - e.Y : e.Y - p.Y;
pictureBox1.Invalidate();
}
}
private void pictureBox1_MouseUp(object sender, MouseEventArgs e)
{
ismouseDown = false;
}