ホームページ >バックエンド開発 >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 は、ViewBoxImageBrushScrollViewer を組み合わせて、画像のパン、ズーム、オーバーレイ機能をサポートする画像ビューアーを作成する簡単な方法を提供します。その方法は次のとおりです:

1. ViewBox を使用してパンとズームを行います:

ViewBox コンテナを使用すると、コンテナ内の子要素を拡大縮小したり配置したりできます。画像を ViewBox 内に配置すると、StretchOffset プロパティを調整することで画像を簡単にパンしたりズームしたりできます。

2. ImageBrush を使用してオーバーレイを作成します:

ImageBrush を使用すると、指定した領域に画像を描画できます。 ImageBrush を作成し、それをメイン画像の上に配置された図形またはコントロールの塗りつぶしとして使用することで、オーバーレイを作成できます。

3. ScrollViewer を使用して完全な画像を表示します:

画像のサイズがビューアのサイズを超える場合は、ScrollViewer をメインの ViewBox の親として使用できます。これにより、元の画像全体をスクロールできます。

4. パンとズームの実装:

次の例は、ViewBoxImageBrush、および 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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。