在WPF中放大图像

时间:2017-04-26 09:04:28

标签: c# wpf image xaml

我有一种方法可以放大和缩小WPF中的图像。它看起来像这样:

private void onMouseWheel_Scroll(object sender, MouseWheelEventArgs e)
{
    var position = e.MouseDevice.GetPosition(CctvImage);

    var renderTransformValue = CctvImage.RenderTransform.Value;
    if (e.Delta > 0)
        renderTransformValue.ScaleAtPrepend(1.1, 1.1, position.X, position.Y);
    else
        renderTransformValue.ScaleAtPrepend(1 / 1.1, 1 / 1.1, position.X, position.Y);

    CctvImage.RenderTransform = new MatrixTransform(renderTransformValue);
}

这适用于放大,我喜欢放大鼠标专用于屏幕的功能。

然而,当缩小用户时,能够缩小超过屏幕的图像点。这意味着很难回到占据整个窗口的图像原始位置。他们能够达到图像的大部分不在屏幕上或者有大量空白的地方,这是我所描述的一个例子:

enter image description here

正如您所看到的,屏幕上的图像很小,而我希望防止用户进一步缩小图像占据整个窗口的位置。

有没有办法实现这个?

2 个答案:

答案 0 :(得分:1)

如何重置之前的转换并保留自己的“比例”值,您可以检查“最大比例”和“最小比例”,如下所示:

    double scale = 1.0;
    double minScale = 0.5;
    double maxScale = 2.0;

    private void image_MouseWheel(object sender, MouseWheelEventArgs e)
    {
        // back to normal (maybe this isn't needed since we're making a new one below anyway)
        CctvImage.RenderTransform = null;

        var position = e.MouseDevice.GetPosition(CctvImage);

        if (e.Delta > 0)
            scale += 0.1;
        else
            scale -= 0.1;

        if (scale > maxScale)
            scale = maxScale;
        if (scale < minScale)
            scale = minScale;

        CctvImage.RenderTransform = new ScaleTransform(scale, scale, position.X, position.Y);


    }

答案 1 :(得分:0)

我想你想阻止Image从原来的尺寸缩小,对吧?然后你应该确保比例永远不会低于1

double currentScale = 1.0;
private void onMouseWheel_Scroll(object sender, MouseWheelEventArgs e)
{
    var position = e.MouseDevice.GetPosition(CctvImage);
    var renderTransformValue = CctvImage.RenderTransform.Value;
    if (e.Delta > 0)
    {
        currentScale += 0.1;
    }
    else if (e.Delta < 0)
    {
        currentScale -= 0.1;
        if (currentScale < 1.0)
            currentScale = 1.0;
    }
    CctvImage.RenderTransform = new ScaleTransform(currentScale, currentScale, position.X, position.Y);
}