带注释的图形必须保持在WPF中所做的相同位置

问题描述 投票:-1回答:1

我使用了WPF应用程序,并且在dicom image上画了一条线。但是我的问题是,当我调整主窗口的大小时,行的位置会改变。它不会持续在我画的地方。我已经尝试使用pointtoscreen方法和translationpoint方法。但没有工作。正确的方法是什么?

我使用了两个wpf图像控件。一种是显示dicom图像,另一种是在其上绘制注释。以下是我的wpf xaml代码。

<Border x:Name="Border" ClipToBounds="True">
<Grid>
<Image x:Name="ImageTileViewer"
           Margin="-234"
           Source="{Binding CurrentImage}"
           Stretch="None"
           StretchDirection="DownOnly" RenderTransformOrigin="0.5,0.5"/>

    <Grid Name="AnnotationImageGrid">
                <Image Name="AnnotationImage" Stretch="None" RenderTransformOrigin="0.5,0.5"/>
    </Grid>
</Grid>

Before Resize

After Resize

c# wpf windows image drawing
1个回答
0
投票
<Grid>
    <Canvas Name="canDrawing" Height="450" Width="800"
        MouseMove="canDrawing_MouseMove_NotDown"
        MouseDown="canDrawing_MouseDown">
        <Image Name="imgTrash" 
               StretchDirection="DownOnly" RenderTransformOrigin="0.5,0.5"
            Source="C:\Users\Chaithika\Downloads\after_resize.PNG" />
    </Canvas>
</Grid>

public Window1()
    {
        InitializeComponent();

        TransformGroup group = new TransformGroup();

        ScaleTransform xform = new ScaleTransform();
        group.Children.Add(xform);

        TranslateTransform tt = new TranslateTransform();
        group.Children.Add(tt);

        imgTrash.RenderTransform = group;
        canDrawing.RenderTransform = group;
    }

  private void Window1_OnSizeChanged(object sender, SizeChangedEventArgs e)
  {
   var width = Convert.ToInt32(e.NewSize.Width);
   var height = Convert.ToInt32(e.NewSize.Height);

        double factor = Math.Min((width / imgTrash.ActualWidth), (height /  imgTrash.ActualHeight));
if (width >= imgTrash.ActualWidth && height >= imgTrash.ActualHeight)
{
    factor = 1;
}

TransformGroup transformGroup = (TransformGroup)imgTrash.RenderTransform;
ScaleTransform st = (ScaleTransform)transformGroup.Children[0];


st.ScaleX = factor;
st.ScaleY = factor;


TransformGroup transformGroup2 = (TransformGroup)canDrawing.RenderTransform;
ScaleTransform st2 = (ScaleTransform)transformGroup2.Children[0];
st2.ScaleX = factor;
st2.ScaleY = factor;

}

© www.soinside.com 2019 - 2024. All rights reserved.