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

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

Susan Sarandon
풀어 주다: 2024-12-27 06:37:09
원래의
144명이 탐색했습니다.

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

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

이 문서에서는 Paint 이벤트의 변환을 사용하여 마우스 위치에서 이미지를 확대/축소하는 문제를 다룹니다. 비트맵 원점을 마우스 위치로 변환한 후 이미지 크기가 조정되고 원점이 다시 변환됩니다. 그러나 마우스 위치 변환 중에 이미지가 "점프"하고 재배치된 원점에서 크기가 조정되지 않습니다.

해결책:

이 문제를 해결하기 위해 다음 전략을 구현합니다.

  1. 분할과 정복: 그래픽 효과와 변형을 특정 작업을 수행하는 전문적인 방법으로 분해합니다. 필요할 때 원활하게 함께 작동하도록 이러한 방법을 설계하십시오.
  2. 간단하게 유지: Matrix 작업 내에서 여러 그래픽 변환을 누적하지 마십시오. 더 간단한 계산을 위해 Matrix.Multiply 및 Matrix.RotateAt를 사용하세요.
  3. 올바른 도구 사용: 패널 대신 PictureBox(또는 비시스템 플랫 라벨)를 "캔버스"로 사용하세요. . PictureBox는 기본적으로 이중 버퍼링을 제공하며 그리기용으로 설계되었습니다.

시각적 데모를 위해 샘플 코드는 사용자 정의 PictureBoxEx 컨트롤에 네 가지 확대/축소 모드를 구현합니다.

  • ImageLocation: 이미지의 크기가 조정되어 현재 위치를 유지합니다. canvas.
  • CenterCanvas: 크기를 조정하는 동안 이미지는 캔버스의 중앙 위치를 유지합니다.
  • CenterMouse: 이미지 크기가 조정되고 중앙 자체로 변환됩니다. 마우스 포인터의 현재 위치에 canvas.
  • MouseOffset: 이미지의 초기 마우스 포인터 위치에 따라 결정된 상대 위치를 유지하기 위해 이미지 크기가 조정되고 변환됩니다.

코드:

답변에 제공된 코드는 PictureBox에서 상속되고 사용자 정의된 기능을 포함하는 PictureBoxEx 사용자 정의 컨트롤을 소개합니다. 또한 초기화 중에 양식에 추가된 사용자 정의 컨트롤을 나타내는 캔버스 변수도 포함됩니다. ZoomMode 열거형은 다양한 확대/축소 모드를 정의하는 데 사용됩니다.

마우스 이벤트 및 트랙 바에 대한 이벤트 핸들러와 핵심 그리기 논리는 선택한 확대/축소 모드에 따라 확대/축소 및 회전 작업을 처리합니다.

실행하기 전에 imagePath 문자열을 이미지 파일의 실제 경로로 수정해야 합니다. code.

이점:

이 접근 방식은 마우스 위치에서 이미지를 확대/축소하고 변환하는 보다 효율적이고 안정적인 방법을 제공합니다. 복잡한 변환을 처리할 때 예상치 못한 시각적 아티팩트나 성능 문제가 발생할 가능성을 줄여줍니다.

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

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