2

我开发了一个简单的直方图控件,它显示了实时图像中灰度颜色(1 到 256 个 bin)的分布。该控件在 ItemsControl 中呈现矩形,其 ItemsContainer 是一个 ViewBox。大多数情况下一切正常,但是当我调整托管控件的网格列(使用 GridSplitter)的大小时,直方图的保真度开始下降。

这是直方图在初始状态下的几张照片,然后是水平调整大小时(注意绿色矩形森林中的深色垂直线......我越小它变得越糟):

在此处输入图像描述 在此处输入图像描述

这是呈现直方图的 XAML:

  <ItemsControl x:Name="_Histogram" Margin="1,3"  
                ItemsSource="{Binding HistogramCollection}" 
                VerticalAlignment="Bottom">
      <ItemsControl.Template>
          <ControlTemplate TargetType="ItemsControl">
              <Grid>
                  <Viewbox Stretch="Fill" MaxHeight="100" >
                      <ItemsPresenter />
                  </Viewbox>
              </Grid>
          </ControlTemplate>
      </ItemsControl.Template>

      <ItemsControl.ItemsPanel>
          <ItemsPanelTemplate>
              <StackPanel Orientation="Horizontal" />
          </ItemsPanelTemplate>
      </ItemsControl.ItemsPanel>

      <ItemsControl.ItemTemplate>
          <DataTemplate>
              <Grid>
                  <Rectangle Fill="LimeGreen"
                             Stretch="Fill"
                             Height="{Binding Bin}"
                             MinWidth="1"
                             StrokeThickness="0"
                             VerticalAlignment="Bottom"
                             HorizontalAlignment="Stretch"
                             RenderOptions.EdgeMode="Aliased"
                             UseLayoutRounding="True"
                             MouseEnter="Rectangle_MouseEnter"
                             MouseLeave="Rectangle_MouseLeave"
                            />
              </Grid>
          </DataTemplate>
      </ItemsControl.ItemTemplate>
  </ItemsControl>

有什么想法吗?我的猜测是 WPF 丢弃了一些视觉效果,以便均匀分布其余部分。

我已经尝试使用 Polygon 代替 ItemsControl 和 Rectangles 来分配我的 bin 点并且行为消失了,但是,我需要能够将 MouseOver 直方图并显示一个弹出窗口(除其他外,例如选择一系列 bin并更新我的 ViewModel 中的属性)。如果您知道一种方法,使用多边形方法,我可以将鼠标悬停在绿色区域并确定我在一个特定的垃圾箱上,我肯定对此持开放态度。

更新:

移除 Rectangle XAML 上的 RenderOptions.EdgeMode="Aliased" 似乎可以解决黑线故障的问题。虽然它在设计器中渲染得有些苍白(使用 d:DesignData),但它似乎在运行时渲染得很好。在其他人有机会加入之前,我将推迟标记为“已回答”。我对多边形方法非常感兴趣,因为当我调整到更大的宽度时,我会得到一个更清晰的直方图(我做的越宽直方图,峰的像素化程度越高,即峰是平坦的,因为矩形的宽度,呈现为锯齿状图而不是平滑曲线图)。如果只有 Point 有一个鼠标悬停在处理程序上:D。

4

0 回答 0