缩放以适应C#中的画布大小?

时间:2011-02-09 21:12:21

标签: c# canvas zoom scale

我有一个根据用户输入改变大小的画布,我想点击一个按钮,并能够缩小以查看整个画布。基本上我知道画布的高度和宽度我只想放大或缩小,以便用户可以看到整个画布。我有放大和缩小工作,但不知道如何缩放适合?有什么想法吗?

2月11日

感谢您的回复,这是很好的帮助,我可以完全缩小画布。我现在遇到的问题是用户已放大并缩小控件。因此,如果用户放大和缩小然后尝试缩放以适合画布,则缩放因子将关闭,我的代码低于

这适用于画布上的基本放大和缩小:

    double ScaleRate = 1.2;

    public void buttonZoomIn_Click(object sender, RoutedEventArgs e)
    {
        st.ScaleX *= ScaleRate;
        st.ScaleY *= ScaleRate;
    }

    public void buttonZoomOut_Click(object sender, RoutedEventArgs e)
    {
        st.ScaleX /= ScaleRate;
        st.ScaleY /= ScaleRate;
    }

我要按下的缩放以适合按钮以完全缩小画布:

private void zoomToFitBt_Click(object sender, RoutedEventArgs e)
    {
        float maxWidthScale = (float)ScrollViewerCanvas.Width / (float)Canvas1.Width;
        float maxHeightScale = (float)ScrollViewerCanvas.Height / (float)Canvas1.Height;
        float scale = Math.Min(maxHeightScale, maxWidthScale);

        if (st.ScaleX > scale || st.ScaleY> scale)
        {
            st.ScaleX *= scale;
            st.ScaleY *= scale;
        }
    }

如果我在开始时按下缩放以适合按钮它很好,但是当用户进行一些手动变焦时它会变得混乱。我的想法是,每次用户点击缩放以适应按钮时,它将首先返回其初始状态,然后使用缩放来拟合代码,但不确定。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

根据给出的少量信息,我会将您的问题简化为我在最基本的数学水平上所要求的评估。我想你在问......

  

“我有2个矩形(视口,   和画布)。我该如何扩展   画布使它如此大   可能不超过宽度   或视口的高度。“

此代码将确定如何缩放矩形,使其几乎不适合另一个矩形。

Rectangle c = new Rectangle(0, 0, 200, 100); //Canvas Rectancle (assume 200x100)
Rectangle v = new Rectangle(0, 0, 50, 50); //Viewport Rectangle (assume 50x50)

//The maximum scale width we could use
float maxWidthScale = (float)v.Width / (float)c.Width; 

//The maximum scale height we could use
float maxHeightScale = (float)v.Height / (float)c.Height; 

//Use the smaller of the 2 scales for the scaling
float scale = Math.Min(maxHeightScale, maxWidthScale); 

scale = .25(或25%),以便使用样本矩形进行拟合。