0

ディープズームのマルチスケール画像で固定ズームを実行する方法はありますか? つまり、ポイント X、Y を中心に 2 倍にズームするには 1 回クリックし、元の位置とズーム レベルに戻すにはもう一度クリックしますか?

ズームインとズームアウトするコードを書きましたが、ズームプロセスの途中で zoomaboutlogicalpoint を呼び出すと、ズームアウトしすぎてしまいます (マウスアップイベントの 1/2 の要因によるものだと思います - ズームレベルを取得できますか?)。また、ズームアウトした画像を中央に配置したいと思います(ポイントを変更して画像の途中にズームすると思いますが、これはうまくいかないようです。おそらくViewPortの位置を考慮する必要がありますか?)

例えば

private void msi_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) {
Point p = e.GetPosition(msi); ズーム (2、p); }

private void msi_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) {
Point p = e.GetPosition(msi); ズーム(1/2, p); }

    public void Zoom(double zoom, Point pointToZoom)
    {
        bool zoomingIn = zoom > 1;
        bool zoomingOut = zoom < 1;
        double minViewportWidth = 0.05;
        double maxViewportWidth = 1;

        if (msi.ViewportWidth < minViewportWidth && zoomingIn)
        {
            return;
        }

        if (msi.ViewportWidth > maxViewportWidth && zoomingOut)
        {
            return;
        }

        Point logicalPoint = this.msi.ElementToLogicalPoint(pointToZoom);
        this.msi.ZoomAboutLogicalPoint(zoom, logicalPoint.X, logicalPoint.Y);

    } 

ありがとう。

4

1 に答える 1

0

ズームアウトする前に変換原点をリセットすると、うまくいったようです:

msi.RenderTransformOrigin = new Point(msi.Height / 2, msi.Width / 2);

于 2010-02-19T09:49:13.180 に答える