>백엔드 개발 >C++ >ViewBox, ImageBrush 및 ScrollViewer를 사용하여 WPF에서 오버레이로 이미지를 이동하고 확대/축소하는 방법은 무엇입니까?

ViewBox, ImageBrush 및 ScrollViewer를 사용하여 WPF에서 오버레이로 이미지를 이동하고 확대/축소하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-18 13:22:10172검색

How to Pan and Zoom Images with Overlays in WPF using ViewBox, ImageBrush, and ScrollViewer?

WPF에서 이미지 패닝 및 확대/축소

WPF는 ViewBox, ImageBrushScrollViewer을 결합하여 이미지 이동, 확대/축소 및 오버레이 기능을 지원하는 이미지 뷰어를 만드는 쉬운 방법을 제공합니다. 방법은 다음과 같습니다.

1. ViewBox를 사용하여 이동 및 확대/축소:

ViewBox 컨테이너를 사용하면 컨테이너 내부의 하위 요소 크기를 조정하고 위치를 지정할 수 있습니다. 이미지를 ViewBox 안에 배치하고 StretchOffset 속성을 ​​조정하여 이미지를 쉽게 이동 및 확대/축소할 수 있습니다.

2. ImageBrush를 사용하여 오버레이 만들기:

ImageBrush 특정 영역에 이미지를 그릴 수 있습니다. ImageBrush을 생성하고 이를 기본 이미지 위에 배치된 모양이나 컨트롤의 채우기로 사용하여 오버레이를 생성할 수 있습니다.

3. ScrollViewer를 사용하여 전체 이미지를 표시합니다.

이미지 크기가 뷰어 크기를 초과하는 경우 ScrollViewer를 기본 ViewBox의 상위로 사용할 수 있습니다. 이를 통해 원본 이미지 전체를 스크롤할 수 있습니다.

4. 이동 및 확대/축소 구현:

다음 예에서는 ViewBox, ImageBrushScrollViewer을 사용하여 이동 및 확대/축소하는 방법을 보여줍니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.