ImageAcqView.xaml 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. <UserControl x:Class="Plugins.Standard.Views.ImageAcqView"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:loc="clr-namespace:TeamAAS.Localization;assembly=TeamAAS.Global"
  5. xmlns:camui="clr-namespace:TeamAAS.Camera.UI.Controls;assembly=TeamAAS.Camera"
  6. Background="{DynamicResource SecondaryRegionBrush}">
  7. <DockPanel>
  8. <!-- 顶部工具栏 -->
  9. <Border DockPanel.Dock="Top" Height="36"
  10. Background="{DynamicResource RegionBrush}"
  11. BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,0,0,1">
  12. <Grid>
  13. <StackPanel Orientation="Horizontal" VerticalAlignment="Center" Margin="8,0">
  14. <TextBlock Text="{loc:Translate '图像采集'}" FontSize="14" FontWeight="Bold"
  15. Foreground="{DynamicResource PrimaryTextBrush}" VerticalAlignment="Center" Margin="0,0,16,0"/>
  16. <TextBlock x:Name="TxtSourceTag" Text="" FontSize="12"
  17. Foreground="{DynamicResource SecondaryTextBrush}" VerticalAlignment="Center"/>
  18. </StackPanel>
  19. <Button x:Name="BtnProperties" HorizontalAlignment="Right" VerticalAlignment="Center" Margin="0,0,8,0"
  20. Width="Auto" Height="Auto" Cursor="Hand"
  21. Background="Transparent" BorderThickness="0"
  22. Tag="{loc:Translate '打开图像采集参数设置(曝光/增益/Gamma 公式绑定等)'}"
  23. Click="BtnProperties_Click">
  24. <Path Data="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.97,5.03C9.38,5.27,8.85,5.59,8.35,5.97L5.96,5.01C5.73,4.92,5.49,5.01,5.37,5.23L3.45,8.55 c-0.12,0.21-0.08,0.47,0.12,0.61l2.03,1.58C5.55,11.04,5.53,11.36,5.53,11.69c0,0.32,0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.37,2.22 c0.04,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.43-0.17,0.47-0.41l0.37-2.22c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.75c-2.07,0-3.75-1.68-3.75-3.75 c0-2.07,1.68-3.75,3.75-3.75c2.07,0,3.75,1.68,3.75,3.75C15.75,14.07,14.07,15.75,12,15.75z"
  25. Width="22" Height="22" Stretch="Uniform"
  26. Fill="{DynamicResource PrimaryTextBrush}"/>
  27. </Button>
  28. </Grid>
  29. </Border>
  30. <!-- 主体:左侧配置 + 右侧预览 -->
  31. <Grid>
  32. <Grid.ColumnDefinitions>
  33. <ColumnDefinition Width="330" MinWidth="260"/>
  34. <ColumnDefinition Width="4"/>
  35. <ColumnDefinition Width="*"/>
  36. </Grid.ColumnDefinitions>
  37. <!-- 左侧配置面板 -->
  38. <ScrollViewer Grid.Column="0" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Disabled">
  39. <StackPanel Margin="8">
  40. <!-- 图像来源 -->
  41. <GroupBox Header="{loc:Translate '图像来源'}" Margin="0,0,0,8">
  42. <StackPanel Margin="4">
  43. <RadioButton x:Name="RbCamera" Content="{loc:Translate '相机采集'}" GroupName="Src"
  44. Margin="2,4" Click="Source_Changed"
  45. Foreground="{DynamicResource PrimaryTextBrush}"/>
  46. <RadioButton x:Name="RbFile" Content="{loc:Translate '本地图像'}" GroupName="Src"
  47. Margin="2,4" Click="Source_Changed"
  48. Foreground="{DynamicResource PrimaryTextBrush}"/>
  49. <RadioButton x:Name="RbDir" Content="{loc:Translate '本地目录'}" GroupName="Src"
  50. Margin="2,4" Click="Source_Changed"
  51. Foreground="{DynamicResource PrimaryTextBrush}"/>
  52. </StackPanel>
  53. </GroupBox>
  54. <!-- 相机采集 -->
  55. <GroupBox x:Name="PanelCamera" Header="{loc:Translate '相机采集'}" Margin="0,0,0,8">
  56. <StackPanel Margin="4">
  57. <TextBlock Text="{loc:Translate '相机设备'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  58. <ComboBox x:Name="CmbCamera" Margin="2,0,2,6" SelectionChanged="CmbCamera_SelectionChanged"/>
  59. <TextBlock Text="{loc:Translate '触发模式'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  60. <ComboBox x:Name="CmbTrigger" Margin="2,0,2,2" SelectionChanged="CmbTrigger_SelectionChanged"
  61. Tag="{loc:Translate '跟随相机=不改相机触发设置;连续采集=自由运行;软触发=每次取相发软件命令;硬触发=等外部信号'}"/>
  62. <TextBlock x:Name="TxtTriggerHint" Margin="2,0,2,6" TextWrapping="Wrap" FontSize="11"
  63. Foreground="{DynamicResource SecondaryTextBrush}"/>
  64. <TextBlock Text="{loc:Translate '曝光时间(us)'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  65. <TextBox x:Name="TxtExposure" Margin="2,0,2,6"
  66. Text="{Binding ExposureTime.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=10000}"/>
  67. <TextBlock Text="{loc:Translate '增益(dB)'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  68. <TextBox x:Name="TxtGain" Margin="2,0,2,6"
  69. Text="{Binding Gain.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=0}"/>
  70. <TextBlock Text="Gamma" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  71. <TextBox x:Name="TxtGamma" Margin="2,0,2,6"
  72. Text="{Binding Gamma.Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=1.0}"/>
  73. <CheckBox x:Name="ChkAutoOpen" Content="{loc:Translate '自动打开设备'}" Margin="2,6,2,6"
  74. IsChecked="{Binding AutoOpen, Mode=TwoWay}"
  75. Foreground="{DynamicResource PrimaryTextBrush}"/>
  76. <Button x:Name="BtnGrab" Content="{loc:Translate '采集预览'}" Margin="2,4,2,2" Padding="10,5"
  77. HorizontalAlignment="Left" Click="BtnGrabPreview_Click"
  78. Tag="{loc:Translate '从所选相机采集一帧并显示(等价于点击窗体底部「执行」)'}"/>
  79. </StackPanel>
  80. </GroupBox>
  81. <!-- 本地图像 -->
  82. <GroupBox x:Name="PanelFile" Header="{loc:Translate '本地图像'}" Margin="0,0,0,8" Visibility="Collapsed">
  83. <StackPanel Margin="4">
  84. <TextBlock Text="{loc:Translate '图像文件'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  85. <DockPanel Margin="2,0,2,4">
  86. <Button DockPanel.Dock="Right" Content="{loc:Translate '浏览'}" Width="60" Margin="4,0,0,0"
  87. Padding="4,4" Click="BtnBrowseFile_Click"/>
  88. <TextBox x:Name="TxtImagePath"
  89. Text="{Binding LocalImagePath, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
  90. </DockPanel>
  91. <TextBlock Text="{loc:Translate '选择文件后立即预览;也可将图片拖放到右侧画面'}" Margin="2,2"
  92. TextWrapping="Wrap" FontSize="11" Foreground="{DynamicResource SecondaryTextBrush}"/>
  93. </StackPanel>
  94. </GroupBox>
  95. <!-- 本地目录 -->
  96. <GroupBox x:Name="PanelDir" Header="{loc:Translate '本地目录'}" Margin="0,0,0,8" Visibility="Collapsed">
  97. <StackPanel Margin="4">
  98. <TextBlock Text="{loc:Translate '图像目录'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  99. <DockPanel Margin="2,0,2,4">
  100. <Button DockPanel.Dock="Right" Content="{loc:Translate '浏览'}" Width="60" Margin="4,0,0,0"
  101. Padding="4,4" Click="BtnBrowseDir_Click"/>
  102. <TextBox x:Name="TxtDirPath"
  103. Text="{Binding LocalImageDir, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
  104. </DockPanel>
  105. <CheckBox x:Name="ChkCyclic" Content="{loc:Translate '循环读取'}" Margin="2,4,2,4"
  106. IsChecked="{Binding CyclicRead, Mode=TwoWay}"
  107. Foreground="{DynamicResource PrimaryTextBrush}"/>
  108. <TextBlock Text="{loc:Translate '目录内图像(双击预览)'}" Margin="2,4,2,2" Foreground="{DynamicResource SecondaryTextBrush}"/>
  109. <ListBox x:Name="LstDirFiles" Height="150" Margin="2,0,2,4"
  110. MouseDoubleClick="LstDirFiles_MouseDoubleClick"/>
  111. </StackPanel>
  112. </GroupBox>
  113. <!-- 本地图像选项(文件/目录共用) -->
  114. <GroupBox x:Name="PanelLocalOpts" Header="{loc:Translate '本地图像选项'}" Margin="0,0,0,8" Visibility="Collapsed">
  115. <StackPanel Margin="4">
  116. <CheckBox x:Name="ChkApplyGamma" Content="{loc:Translate '应用 Gamma 校正'}" Margin="2,4"
  117. IsChecked="{Binding ApplyGamma, Mode=TwoWay}"
  118. Foreground="{DynamicResource PrimaryTextBrush}"/>
  119. <TextBlock Text="{loc:Translate '相机采集由相机硬件处理 Gamma,此项仅作用于本地加载的图像'}"
  120. Margin="2,2" TextWrapping="Wrap" FontSize="11"
  121. Foreground="{DynamicResource SecondaryTextBrush}"/>
  122. </StackPanel>
  123. </GroupBox>
  124. </StackPanel>
  125. </ScrollViewer>
  126. <GridSplitter Grid.Column="1" Width="4" HorizontalAlignment="Stretch"
  127. Background="{DynamicResource BorderBrush}"/>
  128. <!-- 右侧图像预览 -->
  129. <Grid Grid.Column="2">
  130. <Grid.RowDefinitions>
  131. <RowDefinition Height="*"/>
  132. <RowDefinition Height="Auto"/>
  133. </Grid.RowDefinitions>
  134. <camui:ImageDisplayControl x:Name="Display" Grid.Row="0" Margin="4"/>
  135. <Border Grid.Row="1" Background="{DynamicResource RegionBrush}"
  136. BorderBrush="{DynamicResource BorderBrush}" BorderThickness="0,1,0,0" Padding="8,4">
  137. <TextBlock x:Name="TxtInfo" Text="{loc:Translate '尚未采集图像'}"
  138. Foreground="{DynamicResource SecondaryTextBrush}" FontSize="12"
  139. TextTrimming="CharacterEllipsis"/>
  140. </Border>
  141. </Grid>
  142. </Grid>
  143. </DockPanel>
  144. </UserControl>