WPF에서 이미지 패닝 및 확대/축소
WPF는 ViewBox
, ImageBrush
및 ScrollViewer
을 결합하여 이미지 이동, 확대/축소 및 오버레이 기능을 지원하는 이미지 뷰어를 만드는 쉬운 방법을 제공합니다. 방법은 다음과 같습니다.
1. ViewBox를 사용하여 이동 및 확대/축소:
ViewBox
컨테이너를 사용하면 컨테이너 내부의 하위 요소 크기를 조정하고 위치를 지정할 수 있습니다. 이미지를 ViewBox
안에 배치하고 Stretch
및 Offset
속성을 조정하여 이미지를 쉽게 이동 및 확대/축소할 수 있습니다.
2. ImageBrush를 사용하여 오버레이 만들기:
ImageBrush
특정 영역에 이미지를 그릴 수 있습니다. ImageBrush
을 생성하고 이를 기본 이미지 위에 배치된 모양이나 컨트롤의 채우기로 사용하여 오버레이를 생성할 수 있습니다.
3. ScrollViewer를 사용하여 전체 이미지를 표시합니다.
이미지 크기가 뷰어 크기를 초과하는 경우 ScrollViewer
를 기본 ViewBox
의 상위로 사용할 수 있습니다. 이를 통해 원본 이미지 전체를 스크롤할 수 있습니다.
4. 이동 및 확대/축소 구현:
다음 예에서는 ViewBox
, ImageBrush
및 ScrollViewer
을 사용하여 이동 및 확대/축소하는 방법을 보여줍니다.
MainWindow.xaml:
<code class="language-xml"><Window ...> <ScrollViewer> <Viewbox x:Name="PannableViewBox"> <Image Source="myImage.jpg"/> <ImageBrush Opacity="0.5" x:Name="OverlayImageBrush"/> </Viewbox> </ScrollViewer> </Window></code>
MainWindow.xaml.cs:
<code class="language-csharp">public partial class MainWindow : Window { private Point _start; private ScaleTransform _scaleTransform; private TranslateTransform _translateTransform; public MainWindow() { InitializeComponent(); _scaleTransform = new ScaleTransform(); _translateTransform = new TranslateTransform(); PannableViewBox.RenderTransform = new TransformGroup() { Children = { _scaleTransform, _translateTransform } }; } private void PannableViewBox_MouseWheel(object sender, MouseWheelEventArgs e) { if (Keyboard.IsKeyDown(Key.LeftCtrl)) { _scaleTransform.ScaleX += e.Delta > 0 ? 0.1 : -0.1; _scaleTransform.ScaleY += e.Delta > 0 ? 0.1 : -0.1; } } private void PannableViewBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { _start = e.GetPosition(PannableViewBox); PannableViewBox.CaptureMouse(); } private void PannableViewBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) { PannableViewBox.ReleaseMouseCapture(); } private void PannableViewBox_MouseMove(object sender, MouseEventArgs e) { if (PannableViewBox.IsMouseCaptured) { var point = e.GetPosition(PannableViewBox); _translateTransform.X -= point.X - _start.X; _translateTransform.Y -= point.Y - _start.Y; _start = point; } } }</code>
이 코드는 ViewBox
을 사용하여 패닝 가능한 영역을 생성하는 방법, 마우스 휠 이벤트에 따라 확대/축소하는 방법, 패닝을 위한 마우스 이벤트를 처리하는 방법을 보여줍니다. 이 솔루션을 추가로 사용자 정의하여 오버레이 및 기타 기능을 추가할 수 있습니다.
위 내용은 ViewBox, ImageBrush 및 ScrollViewer를 사용하여 WPF에서 오버레이로 이미지를 이동하고 확대/축소하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!