我希望有人可以在这里帮助我。我正在构建一个WPF成像应用程序,该应用程序从照相机中获取实时图像,从而允许用户查看图像,并随后突出显示该图像上的关注区域(ROI)。然后将有关ROI的信息(宽度,高度,相对于图像上某个点的位置等)发送回相机,实际上是告诉/培训相机固件在哪里寻找诸如条形码,文本,液位,转弯等信息。在螺丝等上)。所需的功能是平移和缩放图像及其ROI的能力,以及在图像缩放到大于查看区域时滚动的能力。ROI的StrokeThickness和FontSize需要保持原始比例,但是ROI中形状的宽度和高度需要与图像成比例(这对于捕获确切的像素位置以传输到相机至关重要)。除了滚动和其他一些问题外,我已经完成了大部分工作。我关注的两个领域是:
当我介绍ScrollViewer时,我没有任何滚动行为。据我了解,我需要引入LayoutTransform以获得正确的ScrollViewer行为。但是,当我这样做时,其他区域就会开始崩溃(例如,ROI在图像上的位置不正确,或者在平移时鼠标指针或图像的左上角开始向远离图像上所选点的方向爬行。弹到MouseDown上的当前鼠标位置。)
我无法完全按照我需要的方式来扩展投资回报率。我有这个工作,但这不是理想的。我没有保留确切的笔触粗细,也没有考虑忽略文本块上的比例。希望您能在代码示例中看到我在做什么。
我确信我的问题与我对Transforms及其与WPF布局系统的关系缺乏了解有关。希望呈现出我到目前为止已完成的代码的翻译将有所帮助(请参见下文)。
仅供参考,如果有装饰者的建议,这可能对我不起作用,因为最终我得到的装饰者可能会多于所支持的(传闻144个装饰者是当事情开始崩溃的时候)。
首先,下面是屏幕截图,显示的图像具有ROI(文本和形状)。矩形,椭圆形和文本需要按比例缩放和旋转以跟随图像上的区域,但是它们不应该按宽度或字体大小按比例缩放。
该屏幕截图显示了具有ROI的样本图像
这是显示以上图像的XAML,以及用于缩放的Slider(稍后会进行鼠标轮缩放)
<Window x:Class="PanZoomStackOverflow.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Title="MainWindow" Height="768" Width="1024">
<DockPanel>
<Slider x:Name="_ImageZoomSlider" DockPanel.Dock="Bottom"
Value="2"
HorizontalAlignment="Center" Margin="6,0,0,0"
Width="143" Minimum=".5" Maximum="20" SmallChange=".1"
LargeChange=".2" TickFrequency="2"
TickPlacement="BottomRight" Padding="0" Height="23"/>
<!-- This resides in a user control in my solution -->
<Grid x:Name="LayoutRoot">
<ScrollViewer Name="border" HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Auto">
<Grid x:Name="_ImageDisplayGrid">
<Image x:Name="_DisplayImage" Margin="2" Stretch="None"
这是管理平移和缩放的C#。
该代码应该在.NET 4.0或4.5项目和解决方案中工作,假定没有剪切/粘贴错误。
有什么想法吗?欢迎提出建议。
梦里花落0921
子衿沉夜