Picturebox의 Mousedown 위치에서 Picture 좌표를 성공적으로 가져 왔습니다. 그러나 패닝 조작이나 줌 조작 후 중심점을 찾는 데 어려움을 겪습니다. 현재로서는 Picturebox의 Normal Sizemode에서만 다음 작업을 수행하고 있습니다.이동 및 확대/축소와 상관없이 그림 상자에서 이미지 좌표 (점)를 얻는 방법
내 주요 목적 ::
1. 중앙
2. 다음 (화소 환산) 반경을 찾는 것처럼 이는 MouseDown 위치로 원을 그리는 PictureBox에 그려진 원 (이미지가 아님)은 패닝 및 확대/축소 후에도 동일해야합니다. 확대/축소 또는 팬 후에도 원 (또는 타원)을 그릴 경우 이미지의 측면에서 반지름을 가져야합니다. 점의 픽셀 변환을 알고 있습니다. I가 Mousedown을 사용하고 이벤트를 이동 패닝 구현 및 트랙 바을 사용하여 줌을 구현 한
. 지금 다음 부분에 도움이 필요합니다. : 조건 1 : 이미지 열기 >> 특정 거리로 이동 >> 원형 도구 사용 >> 이미지 경계 안쪽에 가운데를 그려서 원을 그립니다. 그릴 때 그곳에 그려야합니다. 조건 2 : 이미지를 엽니 다. >> 원 그리기, 팬합니다. 원이 이미지가 팬되는 것과 같은 양만큼 이동되어야합니다. 은 여기 내 MouseDown, 이는 MouseUp, MouseMove 이벤트 및 페인트 방법입니다 :
당신이 어떤 함수 본문이 필요하거나 내가
에서 일하고 있어요는 단지 하나의 큰 혼란 응용 프로그램을 something.Because 경우 알려주세요 당신이 무엇이든 필요하면 말해줘. 위에서 언급 한 나의 주된 목표를 따르는 다른 디자인 접근법을 열어 라.
편집 한 후에 내가 당신을 가지고있는 경우가 마우스 이동 이벤트에 마우스를 드래그하면서 바로이, mousedown 잡은 지점으로 중심으로 타원을 그릴 것입니다
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);
}
@ terryBozio, 답장을 보내 주셔서 감사합니다. 귀하의 답변에 위의 편집으로 내 코드를 포함 시켰습니다. RenderImageOfSpecifiedSize (문자열 fileLocation) 함수를 참조하십시오. 본문 안의 줄을 주석 처리하지 않고 이미지 크기가 상관없이 동일한 크기 여야합니다 (크기가 그림 상자보다 크거나 작음). 저는 원의 중심 역할을 할 마우스 위치에 대해 더 염려합니다. 이미지 크기에 영향을받지 않는이 센터를 어떻게 저장할 것입니까? 내 다른 목적은 반경도 표시하는 것입니다 (이미지의 패닝에도 영향을받지 않음). –
이렇게하면됩니다. _pictureBox.Image = Image.FromFile (@ "C : \ Users \ Public \ Pictures \ Sample \ 2 duck.bmp"샘플 이미지 \ 2 duck.bmp "); 나머지 코드는 잘 동작합니다. 왜냐하면 그래픽 객체가 picbox 표면에 그리기 때문에 좌표가 남아 있기 때문입니다. 같은 그림 크기 조정 후, 그냥 경우에 picbox의 sizemode를 변경하고 동일한 지점과 무서운 남아 버튼을 배치와 함께 시도. – terrybozzio