【问题标题】:annotated drawing must remain same position where it was done in WPF带注释的绘图必须保持在 WPF 中的相同位置
【发布时间】:2020-07-20 13:59:04
【问题描述】:

我使用 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>

【问题讨论】:

  • 看起来你有一个窗口并将两个图像放在窗口中。通常,诀窍是在窗口中添加一个面板,以便参考点始终相同。问题是当您将主图像居中时,线条不会自动移动。如果您注意到两张图片的图像中心完全相同,并且线条长度相同。图像的参考通常是左上角。通过将线条和图像都放在面板中,可以更轻松地在居中时保持参考点相同。
  • 谢谢jdweng。请问有样品吗?
  • @jdweng 我不能告诉你,在调整主窗口大小时,我会覆盖 AnnotationImageGrid 的 SizeChanged 事件。在那里我缩放第二个图像控件(AnnotationImage)。如下-----------------------------------TransformGroup transformGroup = (TransformGroup)_currentTileControl.AnnotationImage.RenderTransform; ScaleTransform st = (ScaleTransform)transformGroup.Children[0]; st.ScaleX = 因子; st.ScaleY = 因子;
  • 通常图像具有以像素为单位的顶部、左侧、宽度、高度。所以你可以保持图像居中线条不必移动,但线条的长度可能需要改变。如果将图像大小加倍,则线的长度将减半。
  • @jdweng 我在下面提到了这个。

标签: c# wpf windows image drawing


【解决方案1】:
<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;

}

【讨论】:

    猜你喜欢
    • 2021-08-03
    • 2012-06-09
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2013-05-13
    相关资源
    最近更新 更多