> 백엔드 개발 > C++ > C#의 마우스 위치에서 이미지를 올바르게 확대/축소하고 이동하는 방법은 무엇입니까?

C#의 마우스 위치에서 이미지를 올바르게 확대/축소하고 이동하는 방법은 무엇입니까?

DDD
풀어 주다: 2024-12-30 20:18:12
원래의
586명이 탐색했습니다.

How to Correctly Zoom and Pan an Image from the Mouse Location in C#?

마우스 위치에서 이미지 확대/축소 및 이동

문제 설명

마우스 위치에서 이미지를 확대/축소하려고 하면 이미지가 점프하고 재배치된 원점에서 크기 조정에 실패합니다. 마우스 위치로 변환하지 않고도 회전, 크기 조정 및 팬 기능이 올바르게 작동합니다.

구현

마우스 위치에서 이미지를 확대/축소하고 변환하기 위해 다음 전략을 사용합니다.

  • TranslateTransform: 비트맵을 마우스로 변환합니다. 위치.
  • ScaleTransform: 확대/축소 비율에 따라 이미지의 크기를 조정합니다.
  • TranslateTransform: 이미지를 원래 위치로 다시 변환합니다.
  • TranslateTransform: 팬을 기준으로 이미지를 번역합니다. 위치.

코드

private void pnl1_Paint(object sender, PaintEventArgs e)
{
    // Apply rotation angle @ center of bitmap
    e.Graphics.TranslateTransform(img.Width / 2, img.Height / 2);
    e.Graphics.RotateTransform(ang);
    e.Graphics.TranslateTransform(-img.Width / 2, -img.Height / 2);

    // Apply scaling factor - focused @ mouse location
    e.Graphics.TranslateTransform(mouse.X, mouse.Y, MatrixOrder.Append);
    e.Graphics.ScaleTransform(zoom, zoom, MatrixOrder.Append);
    e.Graphics.TranslateTransform(-mouse.X, -mouse.Y, MatrixOrder.Append);

    // Apply drag (pan) location
    e.Graphics.TranslateTransform(imgX, imgY, MatrixOrder.Append);

    // Draw "bmp" @ location
    e.Graphics.DrawImage(img, 0, 0);
}
로그인 후 복사

제안

  • 변환을 특수한 방법으로 나누고 정복하세요.
  • 사용자 정의 PictureBox 사용 이중 버퍼링 사용(예: PictureBoxEx).
  • 효율적인 변환을 위해 Matrix.RotateAt 및 Matrix.Multiply를 활용하세요.

위 내용은 C#의 마우스 위치에서 이미지를 올바르게 확대/축소하고 이동하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿