2012-05-16 2 views
3

Q : Google지도의 확대/축소 같은 그림 상자의 현재 마우스 위치에 확대/축소를 구현하려면 어떻게해야합니까?현재 마우스 위치에서 그림 상자를 확대/축소 하시겠습니까?

나는 간단한 논문 /지도 엔진을 디자인하고있다. 이 응용 프로그램은지도가 sligtly modified tabcontrol의 탭에로드되는 방식으로 설계되었습니다.

지도는 표준 JPEG 또는 PNG 형식의 디지털 이미지이며 대부분 해상도가 매우 높습니다 (2000x2000px 이상).

이들은 탭 페이지의 하위 컨트롤로 추가 된 그림 상자에로드됩니다. 이미지/그림 상자의 중심만을 확대하는 버튼 클릭 이벤트로 간단한 확대/축소 방법을 구현했습니다.

내가 뭘하고 싶은지는 그림이 그림 상자 내부의 현재 마우스 위치에서 확대되는 것과 같은 방법으로 마우스 휠 이벤트에 확대/축소를 구현하는 것입니다.

현재 확대에 대한 코드는 다음과 같습니다

  timesZoomed += 1; 
      zoomRatio += 0.1f; 
      pbxMapa.Width = pbxMapa.Width * zoomRatio; 
      pbxMapa.Height = pbxMapa.Height * zoomRatio; 
      pbxMapa.Location = new Point((this.Width/2) - (pbxMapa.Width/2), this.Height/2) - (pbxMapa.Height/2)); 
  • 기본 "zoomRatio"값이 1이며,이 0.6f까지 증가되고있다.
  • 인수 "timesZoomed"의 기본값은 0이며 최대 6이됩니다.
  • "pbxMapa"는로드 된 이미지 이미지가있는 그림 상자입니다. 그림 상자의 "ImageSizeMode"보조는 "확대/축소"로 설정되어 있지만 그림 상자의 크기는로드 된지도 이미지의 전체 크기로 설정됩니다.

또한이 단순한 확대/축소 코드로 실험하고있었습니다. 계산이 다소 효과적이지만, 여전히 가지고 상당히 큰 비율로 승산/축소시 오프셋 :

   pbxMapa.Location = new Point(pbxMapa.Location.X + (int)((pbxMapa.Location.X * zoomRatio - mouseXPbx)/8), pbxMapa.Location.Y + (int)((pbxMapa.Location.Y * zoomRatio - mouseYPbx)/8)); 
  • "mouseXPbx"및 "mouseYPbx"변수 는 "pbxMapa"내부 현재 마우스 위치를 나타내는
      . 위치 조정시 오프셋을 최소화하기 위해 8으로 나눈 값입니다.

    미리 감사드립니다.

  • +0

    질문은 무엇에 PictureBox를 기지개? :/ – Reniuz

    +0

    마우스 위치에서 그림 상자를 확대/축소하려면 어떻게해야합니까? Google지도를 확대하는 것과 같은 것이 있습니까? –

    +0

    그리고 코드에 무슨 문제가 있습니까? 죄송하지만 문제는 어디 있지 않습니다. 기사를 읽으려고 했습니까? [여기에 하나의 흥미로운] (http://www.bobpowell.net/zoompicbox.htm) – Reniuz

    답변

    0

    이 코드 줄에서 위치 계산을 조정할 수있었습니다. 괜찮아요, 내가 원하는대로 확대하고 있습니다.

    pbxMapa.Location = new Point(pbxMapa.Location.X + (int)(((pbxMapa.Location.X - mouseXPbx)/10) * zoomRatio), pbxMapa.Location.Y + (int)(((pbxMapa.Location.Y - mouseYPbx)/10) * zoomRatio)); 
    
    4

    아래의 코드는 확대 현재 마우스 위치

    pictureBox1.Width = (int)(pictureBox1.Width * zoomratio); 
    pictureBox1.Height = (int)(pictureBox1.Height * zoomratio);     
    pictureBox1.Top = (int)(e.Y - zoomratio * (e.Y - pictureBox1.Top)); 
    pictureBox1.Left = (int)(e.X - zoomratio * (e.X - pictureBox1.Left)); 
    
    +0

    덕분에, 이것은 많은 도움이되었습니다. – J3soon

    관련 문제