当前位置: 首页 > 知识库问答 >
问题:

放大从点mschart缩小

刘野
2023-03-14

当前位置

private void chart1\u鼠标单击(object sender,MouseEventArgs e){

        lastPoint = e.Location;
}

缩放X和Y

 private void btnZoomXY_Click(object sender, EventArgs e)
    {



            step = (int)(chart1.ChartAreas["ChartArea1"].AxisX.Maximum - lastPoint.X ) / 20;
        if (zoomx > chart1.ChartAreas["ChartArea1"].AxisX.Maximum)
        {
            zoomx -= step;

        }
        else
            zoomx += step;
        this.chart1.ChartAreas["ChartArea1"].AxisX.ScaleView.Zoom(lastPoint.X+ zoomx, this.chart1.ChartAreas["ChartArea1"].AxisX.Maximum - zoomx);


        if (Mode == SpectometrMode.Absorbance)
        {
            step1 = 0.2f;
        }
        else
             step1 = (int)(chart1.ChartAreas["ChartArea1"].AxisY.Maximum - lastPoint.Y) / 20;
        if (zoomY > chart1.ChartAreas["ChartArea1"].AxisY.Maximum)
        {
            zoomY -= step1;

        }
        else
            zoomY += step1;
        this.chart1.ChartAreas["ChartArea1"].AxisY.ScaleView.Zoom(lastPoint.Y+ zoomY, this.chart1.ChartAreas["ChartArea1"].AxisY.Maximum - zoomY);




        chart1.ChartAreas[0].AxisX.LabelStyle.Format = "{0}";
    }

@taW

共有1个答案

顾俊哲
2023-03-14

这里有一个解决方案,每次单击都会放大2倍。

它使用变量spans作为在缩放视图中可见的值范围。

它还将单击的位置移动到下一个最近的DataPoint。您可以删除它以允许放大DataPoint之间的位置。

让我们看看它的实际效果:

请注意,代码的第一个问题是使用的坐标。

这是三个(!)MSChart中的坐标系:

  • 像素如鼠标单击
  • 轴中的值
  • 元素位置,即与下一个更高容器相关的百分比

您的主要问题是将像素与值混合,这将导致混乱。

您需要将像素转换为所示代码中的值。

以下是我使用的变量:

double span = 0;                     // axis range in values
Point lastPoint = Point.Empty;       // the clicked position
PointF clickedValues = PointF.Empty; // the values of the clicked positiom
DataPoint closePoint = null;         // the next closest DataPoint

现在点击代码与转换:

private void chart1_MouseClick(object sender, MouseEventArgs e)
{
    lastPoint = e.Location;
    Axis ax = chart1.ChartAreas[0].AxisX;
    Axis ay = chart1.ChartAreas[0].AxisY;

    if (closePoint != null) closePoint.MarkerColor = chart1.Series[0].MarkerColor;

    clickedValues = new PointF((float)ax.PixelPositionToValue(lastPoint.X),
                               (float)ay.PixelPositionToValue(lastPoint.Y));

    closePoint = chart1.Series[0].Points.Where(x => x.XValue >= clickedValues .X).First();
    closePoint.MarkerColor = Color.Red;  // optionally mark the point

    // optionally move clicked position to actual datapoint
    nextDPoint = new PointF((float)closePoint.XValue, (float)closePoint.YValues[0]);

    span = ax.Maximum - ax.Minimum;  // the full range of values
}

最后,放大按钮的代码:

private void button1_Click(object sender, EventArgs e)
{
    span /= 2;  // zoom in 2x each time
    Axis ax = chart1.ChartAreas[0].AxisX;
    Axis ay = chart1.ChartAreas[0].AxisY;
    ax.ScaleView.Zoom(nextDPoint.X - span, nextDPoint.X + span);
}

注意事项:

  • 转换功能仅在图表完成布局后可用
 类似资料:
  • 问题内容: 我希望能够放大HTML 5画布中鼠标下方的点,例如Google Maps上的。我该如何实现? 问题答案: 终于解决了: 关键是计算轴位置,以便缩放点(鼠标指针)在缩放后保持在同一位置。 最初,鼠标与角之间有一段距离,我们希望鼠标下方的点在缩放后保持在同一位置,但这是远离角的地方。因此,我们需要移动(角的坐标)以解决此问题。 然后,其余代码需要应用缩放并转换到绘制上下文,以便其原点与画布

  • 我试图创建一个具有可缩放/可折叠画布的应用程序。 特点: 用鼠标滚轮在支点处放大/缩小 用鼠标左键在画布上拖动节点 用鼠标右键拖动整个画布 很明显是枢轴点计算出了问题,但我想不出是什么,怎么修复。 非常感谢!

  • 本文向大家介绍bmp 缩放代码(BMP位图任意放大 和缩小),包括了bmp 缩放代码(BMP位图任意放大 和缩小)的使用技巧和注意事项,需要的朋友参考一下 前几天碰上需要对bmp位图进行缩放的功能, 调用API函数,虽然能实现位图缩放,但是对有放大的效果好,缩小会造成失真,图像上有花点,让人难以接受 ,因为本人以前学易语言,易语言有一段代码,对bmp图像缩放效果非常 好, 昨天抽空,把它翻译成c+

  • 问题内容: 我想拍摄一张图像并更改图像的比例,虽然它是一个numpy数组。 例如,我有一个可口可乐瓶的图像: bottle-1 转换为一个numpy的形状数组,我想调整其大小以表示第二个图像的大小: bottle-2 形状为。 如何在保持原始图像的同时将图像尺寸更改为特定形状?其他答案建议每隔一行或第三行剥离,但是我想要做的基本上是像通过图像编辑器(但在python代码中)那样收缩图像。是否有任何

  • 嗨,我目前正试图在谷歌地图上显示多个点。除了缩放功能外,一切正常。我无法确定如何设置缩放以便显示所有点。如果点很近,代码显示得很好,但如果点很远,代码显示得不好。我到处搜索过,但找不到任何东西。 有什么帮助吗?

  • 问题内容: 我需要实现变焦为包含在。我已经通过覆盖方法和调用来成功进行缩放。 这是不正常:对的和的规模如预期,但一定会得到的和这样的寄存器在预分频的位置。我能做什么?感谢您的阅读。 问题答案: 显示了如何使用明确的转化方法扩展鼠标坐标:,,和。)。