C# 带注释的图纸必须保持在WPF中完成的位置

C# 带注释的图纸必须保持在WPF中完成的位置,c#,wpf,windows,image,drawing,C#,Wpf,Windows,Image,Drawing,我使用了WPF应用程序,在dicom图像上画了一条线。但我的问题是,当我调整主窗口的大小时,线的位置会改变。它不会在我画的地方持续。我试过使用pointtoscreen方法和translatepoint方法。但是没有起作用。正确的方法是什么 我使用了两个wpf图像控件。一个是显示dicom图像,另一个是在上面绘制注释 <Border x:Name="Border" ClipToBounds="True"> <Grid> <Image x:Name="ImageTil

我使用了WPF应用程序,在dicom图像上画了一条线。但我的问题是,当我调整主窗口的大小时,线的位置会改变。它不会在我画的地方持续。我试过使用pointtoscreen方法和translatepoint方法。但是没有起作用。正确的方法是什么

我使用了两个wpf图像控件。一个是显示dicom图像,另一个是在上面绘制注释

<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>


公共窗口1()
{
初始化组件();
TransformGroup=新建TransformGroup();
ScaleTransform xform=新的ScaleTransform();
group.Children.Add(xform);
TranslateTransform tt=新的TranslateTransform();
组。儿童。添加(tt);
imgTrash.RenderTransform=组;
canDrawing.RenderTransform=组;
}
私有无效窗口1_OnSizeChanged(对象发送方,SizeChangedEventArgs e)
{
var width=Convert.ToInt32(例如NewSize.width);
var height=Convert.ToInt32(例如NewSize.height);
双因素=数学最小值((宽度/imgtras.ActualWidth),(高度/imgtras.ActualHeight));
如果(宽度>=imgTrash.ActualWidth和高度>=imgTrash.ActualHeight)
{
系数=1;
}
TransformGroup TransformGroup=(TransformGroup)imgtras.RenderTransform;
ScaleTransform st=(ScaleTransform)transformGroup.Children[0];
st.ScaleX=系数;
st.ScaleY=系数;
TransformGroup transformGroup2=(TransformGroup)canDrawing.RenderTransform;
ScaleTransform st2=(ScaleTransform)transformGroup2.Children[0];
st2.ScaleX=系数;
st2.ScaleY=系数;

}

看起来您有一个窗口,并将两个图像放在窗口中。通常,诀窍是在窗口中添加一个面板,使参考点始终相同。问题是,当您将主图像居中时,线条不会自动移动。如果您注意到两张图片中的图像中心完全相同,且线条长度相同。图像的参考通常位于左上角。通过将线条和图像放在面板中,可以更容易地在居中时保持参考点不变。谢谢jdweng。您有任何示例吗?@jdweng我不能告诉您,在调整主窗口大小时,我会覆盖AnnotationImageGrid的SizeChanged事件。在这里,我缩放第二个图像控件(AnnotationImage)。如下所示------------------------------------------TransformGroup TransformGroup=(TransformGroup)\u currentTileControl.AnnotationImage.RenderTransform;ScaleTransform st=(ScaleTransform)transformGroup.Children[0];st.ScaleX=系数;st.ScaleY=系数;通常,图像具有以像素为单位的顶部、左侧、宽度和高度。因此,您可以保持图像居中,线条不必移动,但线条的长度可能需要更改。如果你把图像的大小增加一倍,线条的长度就会减少一半。@jdweng我想到了下面这个例子。
<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;