我已经成功地从 Picturebox 上的 Mousedown 位置获得了图像坐标,无论是 Picturebox 的各种尺寸模式。但在平移操作或缩放操作后难以找到中心点。至于现在我只在 Picturebox 的 Normal Sizemode 下工作以获得以下效果。
我的主要目标::
1.以Mousedown位置为中心画一个圆
2.接下来找到在Picturebox(不是在图像上)上绘制的圆的半径(以像素为单位),即使在平移和缩放之后也应该始终相同。即使在缩放或平移之后,如果我画一个圆(或椭圆),它应该给我图像的半径。我知道点到像素的转换。
我已经使用 Mousedown、up 和 move 事件实现了平移,并使用 trackbar 实现了缩放。我现在需要以下部分的帮助::条件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);
}