аннотированный чертеж должен оставаться в том же положении, где это было сделано в WPF - PullRequest
0 голосов
/ 08 апреля 2020

Я использовал приложение WPF и нарисовал линию на изображении dicom. Но моя проблема в том, что когда я изменяю размер главного окна, меняются положения линий. это не будет сохраняться на месте, где я нарисовал. Я пытался с методом pointtoscreen и методом translatepoint. но не сработало. Как правильно это сделать.

Я использовал два элемента управления изображения 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

1 Ответ

0 голосов
/ 09 апреля 2020
<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;

}

...