对数轨迹条,变焦值为1%至1000%

时间:2016-01-31 02:21:41

标签: c# .net winforms zoom logarithm

我有一个与图片框关联的轨迹栏,我根据所选的缩放系数绘制图像。范围从1%到1,000%,因此滑动越低,缩小的速度就越快。

这是预期的,但不是所希望的。有没有办法缩放解释滑块值,以便缩放对用户来说更自然,特别是在< 50%的范围。

1 个答案:

答案 0 :(得分:0)

这很容易做到:

myTrackBar.Minimum = 0;
myTrackBar.Maximim = 3000;

...

public double RealValue
{
    get
       {
          var trackPos = myTrackBar.Value;

          return Math.Pow(10.0, trackPos / 1000.0);
       }

  set 
       {
          var logValue = Math.Log10(value) * 1000;

          myTrackBar.Value = (int) logValue;
       }
}

要了解其工作原理,请考虑您的范围 - 1到1000,或表示为10的幂,它是1e0到1e3。因此,如果我们给轨迹栏一个0到3的范围并将值提高到10,我们就会得到一个很好的指数值集,就像你想要的那样。

但是如果我们将范围设置为0..3,我们只能从4个不同的值中选择:0,1,2,3,它们将分别转换为1,10,100和100。

为了给我们中间的值,我们简单地将范围乘以一千,给我们3001个不同的值,轨迹栏可以跟踪,然后将轨迹栏的值除以千。