代码之家  ›  专栏  ›  技术社区  ›  Gabriel

在WPF中将坐标从图像控件转换到图像源

  •  7
  • Gabriel  · 技术社区  · 16 年前

    Stretch

    <Image Name="imageCtrl" Source="{Binding MyImage}" Stretch="{Binding ImageStretch}" />
    

    当用户在图像上移动鼠标时,我想确定鼠标相对于

    void imageCtrl_MouseMove(object sender, MouseEventArgs e)
    {
        Point locationInControl = e.GetPosition(imageCtrl);
        Point locationInImage = ???
        updateImage(locationInImage);
    }
    

    Source ActualSize imageCtrl.Stretch


    Point ImgControlCoordsToPixelCoords(Point locInCtrl, 
        double imgCtrlActualWidth, double imgCtrlActualHeight)
    {
        if (ImageStretch == Stretch.None)
            return locInCtrl;
    
        Size renderSize = new Size(imgCtrlActualWidth, imgCtrlActualHeight);
        Size sourceSize = bitmap.Size;
    
        double xZoom = renderSize.Width / sourceSize.Width;
        double yZoom = renderSize.Height / sourceSize.Height;
    
        if (ImageStretch == Stretch.Fill)
            return new Point(locInCtrl.X / xZoom, locInCtrl.Y / yZoom);
    
        double zoom;
        if (ImageStretch == Stretch.Uniform)
            zoom = Math.Min(xZoom, yZoom);
        else // (imageCtrl.Stretch == Stretch.UniformToFill)
            zoom = Math.Max(xZoom, yZoom);
    
        return new Point(locInCtrl.X / zoom, locInCtrl.Y / zoom);
    }
    
    1 回复  |  直到 16 年前
        1
  •  8
  •   Steven    15 年前

    <Viewbox Stretch="{Binding ImageStretch}">
        <Image Name="imageCtrl" Source="{Binding MyImage}" Stretch="None"/>
    </Viewbox>
    

    void imageCtrl_MouseMove(object sender, MouseEventArgs e) 
    { 
        Point locationInControl = e.GetPosition(imageCtrl);
    }