带注释的绘图必须保持在 WPF 中的相同位置
Posted
技术标签:
【中文标题】带注释的绘图必须保持在 WPF 中的相同位置【英文标题】:annotated drawing must remain same position where it was done in 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 我在下面提到了这个。 【参考方案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;
【讨论】:
以上是关于带注释的绘图必须保持在 WPF 中的相同位置的主要内容,如果未能解决你的问题,请参考以下文章